管理磁碟機

先決條件

磁碟機

新增磁碟機

DirectPV 必須有權存取磁碟機才能配置卷冊。這涉及兩個步驟的流程

  1. 執行 discover 命令。

    discover 命令會探查 DirectPV 節點中符合條件的磁碟機,並將磁碟機資訊儲存在 YAML 檔案中。檢查產生的 YAML 檔案,並將您要新增的每個磁碟機的 select 欄位設定為 yes。如果您不想新增特定磁碟機,請將其 select 值設定為 no

    DirectPV 預設會將所有已探索到的磁碟機的 select 欄位設定為 yes。您必須手動取消選取 DirectPV 不應格式化和使用的任何已探索到的磁碟機。仔細檢閱產生的 YAML 檔案。

    以下是 discover 命令的範例

    # Probe and save drive information to drives.yaml file.
    $ kubectl directpv discover
    
     Discovered node 'master' Discovered node 'node1'
    ┌─────────────────────┬────────┬───────┬─────────┬────────────┬──────┬───────────┬─────────────┐
    │ ID                  │ NODE   │ DRIVE │ SIZE    │ FILESYSTEM │ MAKE │ AVAILABLE │ DESCRIPTION │
    ├─────────────────────┼────────┼───────┼─────────┼────────────┼──────┼───────────┼─────────────┤
    │ 252:16$ud8mwCjPT... │ master │ vdb   │ 512 MiB │ -          │ -    │ YES       │ -           │
    │ 252:16$gGz4UIuBj... │ node1  │ vdb   │ 512 MiB │ -          │ -    │ YES       │ -           │
    └─────────────────────┴────────┴───────┴─────────┴────────────┴──────┴───────────┴─────────────┘
    
    Generated 'drives.yaml' successfully.
    
    # Show generated drives.yaml file.
    $ cat drives.yaml
    version: v1
    nodes:
        - name: master
          drives:
            - id: 252:16$ud8mwCjPTH8147TysmiQ2GGLpffqUht6bz7NtHqReJo=
              name: vdb
              size: 536870912
              make: ""
              select: "yes"
        - name: node1
          drives:
            - id: 252:16$gGz4UIuBjQlO1KibOv7bZ+kEDk3UCeBneN/UJdqdQl4=
              name: vdb
              size: 536870912
              make: ""
              select: "yes"
    
  2. 執行 init 命令。

    init 命令會建立一個要求,以新增上一步中使用 discover 命令產生的 YAML 檔案中所選取的磁碟機。

    此流程會清除所選磁碟機上的所有資料。不正確的磁碟機選取會導致永久性資料遺失。

    在執行此命令之前,請修改 YAML 檔案,將任何不想要的磁碟機標記為 select 欄位的 no

    以下是 init 命令的範例

    $ kubectl directpv init drives.yaml
    
    
     ███████████████████████████████████████████████████████████████████████████ 100%
    
     Processed initialization request 'c24e22f5-d582-49ba-a883-2ce56909904e' for node 'master' Processed initialization request '7e38a453-88ed-412c-b146-03eef37b23bf' for node 'node1'
    ┌──────────────────────────────────────┬────────┬───────┬─────────┐
    │ REQUEST_ID                           │ NODE   │ DRIVE │ MESSAGE │
    ├──────────────────────────────────────┼────────┼───────┼─────────┤
    │ c24e22f5-d582-49ba-a883-2ce56909904e │ master │ vdb   │ Success │
    │ 7e38a453-88ed-412c-b146-03eef37b23bf │ node1  │ vdb   │ Success │
    └──────────────────────────────────────┴────────┴───────┴─────────┘
    

如需更多詳細資訊和選用參數,請參閱discover 命令init 命令

列出磁碟機

若要從 DirectPV 取得磁碟機的相關資訊,請執行 list drives 命令。

$ kubectl directpv list drives
┌────────┬──────┬──────┬─────────┬─────────┬─────────┬────────┐
│ NODE   │ NAME │ MAKE │ SIZE    │ FREE    │ VOLUMES │ STATUS │
├────────┼──────┼──────┼─────────┼─────────┼─────────┼────────┤
│ master │ vdb  │ -    │ 512 MiB │ 506 MiB │ -       │ Ready  │
│ node1  │ vdb  │ -    │ 512 MiB │ 506 MiB │ -       │ Ready  │
└────────┴──────┴──────┴─────────┴─────────┴─────────┴────────┘

請參考 list drives 命令 以取得更多資訊。

標記磁碟機

磁碟機會被標記以設定自訂標籤,這些標籤可用於配置磁碟區。

# Set label 'tier' key to 'hot' value.
$ kubectl directpv label drives tier=hot

# Remove label 'tier'.
$ kubectl directpv label drives tier-

設定後,請使用標籤來排程磁碟機

請參考 label drives 命令 以取得更多資訊。

更換磁碟機

在同一個節點上,使用新的磁碟機更換故障的磁碟機。在此過程中,故障磁碟機上的所有磁碟區都會移至新的磁碟機,然後將故障的磁碟機從 DirectPV 中移除。目前,DirectPV 不支援將磁碟區上的資料移至新的磁碟機。請使用 replace.sh 腳本來執行磁碟機更換。

以下為範例

# Replace 'sdd' drive by 'sdf' drive on 'node1' node
$ replace.sh sdd sdf node1

移除磁碟機

不包含任何磁碟區的磁碟機可以被移除。

# Remove drive 'vdb' from 'node1' node
$ kubectl directpv remove --drives=vdb --nodes=node1

請參考 remove 命令 以取得更多資訊。

修復磁碟機

資料遺失
此操作非常危險,會導致資料遺失。

DirectPV 支援使用 xfs_repair 工具來嘗試修復回報 XFS 檔案系統錯誤、故障或損毀的受管理磁碟機。此命令無法保證成功或完全復原。

repair 命令會建立一個名為 repair-<DRIVE-ID> 的一次性 Kubernetes Job,其中 pod 名稱會是此名稱。Kubernetes 會在完成後五分鐘自動移除此 Job。

可以使用 kubectl log 命令檢視磁碟機修復的進度和狀態。

在開始修復之前,您必須先暫停磁碟機

使用 repair.sh 腳本來修復故障的磁碟機。

暫停磁碟機

資料遺失
此操作非常危險,會導致資料遺失。

根據 Kubernetes 設計,只有在其所有 pod 都處於執行狀態時,StatefulSet 工作負載才會處於活動狀態。故障的磁碟機將會阻止 StatefulSet 啟動。

DirectPV 提供一種解決方案來暫停故障的磁碟機,該方案會將各自的磁碟區掛載在空的 /var/lib/directpv/tmp 目錄上,並且僅具有唯讀存取權。這可以透過執行 suspend drives 命令來完成。

kubectl directpv suspend drives af3b8b4c-73b4-4a74-84b7-1ec30492a6f0

修復後,請恢復磁碟機以回到正常的功能。恢復後,對應的磁碟區將返回使用各自配置的磁碟機。這可以使用 resume drives 命令來完成。

kubectl directpv resume drives af3b8b4c-73b4-4a74-84b7-1ec30492a6f0