安裝 DirectPV

先決條件

名稱 版本
Kubernetes v1.19+
kubectl v1.19+
krew v0.4.3+

生產環境整備檢查清單

在開始生產部署之前,請確保已完成以下步驟(如果適用)

  • 如果使用私有登錄檔,請將 氣隙安裝映像 中列出的所有映像提供於私有登錄檔中。

  • 如果在系統上使用 seccomp,請在所有節點上載入 DirectPV seccomp 政策

    如需有關 seccomp 的詳細說明,請參閱 Kubernetes 文件

  • 如果在系統上使用 AppArmor,請在所有節點上載入 DirectPV apparmor 設定檔

    如需有關 Kubernetes 環境中 AppArmor 的詳細說明,請參閱 Kubernetes 文件

外掛程式安裝

在您的本機環境中安裝 DirectPV 外掛程式,以管理 Kubernetes 叢集中的 DirectPV CSI 驅動程式。您可以使用 krew 安裝,或安裝為二進位檔。

使用 krew 安裝 DirectPV 外掛程式

最新的 DirectPV 外掛程式可在 Krew 存放庫中取得。

  1. 更新 Krew 以下載最新版本的外掛程式。

    kubectl krew update
    
  2. 將 DirectPV 安裝至您的 krew 安裝目錄(預設值:$HOME/.krew)。

    kubectl krew install directpv
    
  3. 執行 kubectl directpv --version 以驗證 DirectPV 是否正確安裝。

    如果您收到錯誤訊息 Error: unknown command "directpv" for "kubectl",您可能需要將 $HOME/.krew/bin 新增至您的 $PATH

將 DirectPV 外掛程式安裝為二進位檔

外掛程式的二進位檔名稱以 kubectl-directpv 開頭,可從 https://github.com/minio/directpv/releases/latest 取得。請下載適用於您作業系統和架構的二進位檔。您可能需要將該檔案移至系統路徑可存取的位置。

請參閱您作業系統的文件,以瞭解如何將二進位檔案設為可執行,以及如何執行該檔案。由於每個可用的作業系統的詳細說明超出本文件的範圍,因此不在此贅述。

以下是在 amd64 架構上的 GNU/Linux 的範例

# Download DirectPV plugin.
$ release=$(curl -sfL "https://api.github.com/repos/minio/directpv/releases/latest" | awk '/tag_name/ { print substr($2, 3, length($2)-4) }')
$ curl -fLo kubectl-directpv https://github.com/minio/directpv/releases/download/v${release}/kubectl-directpv_${release}_linux_amd64
# Make the binary executable.
$ chmod a+x kubectl-directpv
$ mv kubectl-directpv /usr/local/bin/kubectl-directpv
使用二進位檔時,請使用 kubectl-directpv 而非 kubectl directpv 來叫用命令。

驅動程式安裝

將 DirectPV 驅動程式安裝至您的 Kubernetes 部署。

若要在生產環境中安裝,請確保您符合生產準備檢查清單中的所有條件。

標準安裝

標準安裝會使用預設選項,並在所有節點上安裝 DirectPV。

先決條件

  • Kubernetes >= v1.18 (在 amd64 上的 GNU/Linux 上)

  • 如果您使用私人登錄檔,則必須將下列映像檔推送至您的登錄檔。

    您可以使用 輔助指令碼 來執行此操作。

    • quay.io/minio/csi-node-driver-registrar:v2.8.0
    • quay.io/minio/csi-provisioner:v3.5.0 (適用於 Kubernetes >= v1.20)
    • quay.io/minio/csi-provisioner:v2.2.0-go1.18 (適用於 Kubernetes < v1.20)
    • quay.io/minio/livenessprobe:v2.10.0
    • quay.io/minio/csi-resizer:v1.8.0
    • quay.io/minio/directpv:latest
  • 如果已啟用 seccomp,請在您要安裝 DirectPV 的節點上載入 DirectPV seccomp 設定檔,並使用 --seccomp-profile 旗標搭配 kubectl directpv install 命令。

    如需更多資訊,請參閱 Kubernetes 文件中的 seccomp

  • 如果已啟用 apparmor,請在您要安裝 DirectPV 的節點上載入 DirectPV apparmor 設定檔,並使用 --apparmor-profile 旗標搭配 kubectl directpv install 命令。

    如需更多資訊,請參閱Kubernetes 文件中的 apparmor

  • 磁碟區擴充功能啟用 ExpandCSIVolumes 功能閘道

  • 請檢閱驅動程式規格文件

  • 對於 Red Hat OpenShift 使用者,請參閱OpenShift 專用文件,以了解安裝 DirectPV 之前的組態設定。

程序

安裝程序會建立名為 directpv-min-io 的新儲存類別。您可以使用此儲存類別作為 PodSpec.VolumeClaimTemplates 中的 storageClassName 來佈建 DirectPV 磁碟區。

如需使用 directpv-min-io 的範例,請參閱GitHub 上的 MinIO 範例

請參閱CLI 指南,以了解以下命令的更多輔助說明。

安裝驅動程式

在 Kubernetes 叢集中的所有節點上安裝 directpv-min-io CSI 驅動程式。

kubectl directpv install
  • DirectPV 元件會安裝在 directpv 名稱空間中。
  • 使用 kubectl directpv --kubeconfig /path/to/kubeconfig 來指定替代的 kubeconfig。
  • DirectPV 驅動程式需要規格文件中列出的基於角色的存取控制 (RBAC)。
  • DirectPV 驅動程式會在 privileged 模式下執行,這是掛載、卸載和格式化磁碟機所必需的。
  • DirectPV 使用的 daemonset 需要下列開啟的連接埠
    • 10443 用於度量
    • 連接埠 30443 用於就緒處理常式
若要在選定的節點上安裝 DirectPV,使用容錯機制或使用非標準的 kubelet 目錄,請參閱下方的自訂安裝章節。

列出探索到的磁碟機

列出 Kubernetes 叢集中所有可用的磁碟機。DirectPV 會產生一個 init 組態檔 (預設值:drives.yaml),您可以使用它來初始化這些磁碟機。

kubectl directpv discover

根據需要修改該檔案,以移除 DirectPV 不應控制的任何磁碟機。

初始化磁碟機

初始化 drives.yaml 中選取的磁碟機

kubectl directpv init drives.yaml
潛在的資料遺失
初始化會清除磁碟機上的所有現有資料。請確認傳遞至 init 命令的檔案中僅指定了預期的磁碟機。

驗證安裝

若要驗證安裝,請使用下列命令列出關於已格式化並新增至 DirectPV 的磁碟機的資訊。

kubectl directpv info

使用指令碼安裝

下列命令會下載並執行 install.sh 指令碼檔,以在所有節點上執行 DirectPV 的標準安裝。

curl -sfL https://github.com/minio/directpv/raw/master/docs/tools/install.sh | sh - apply

氣隙安裝(私人登錄檔)

將下列映像檔推送至您的私人登錄檔

  • quay.io/minio/csi-node-driver-registrar:v2.6.3
  • quay.io/minio/csi-provisioner:v3.4.0
  • quay.io/minio/livenessprobe:v2.9.0
  • quay.io/minio/csi-resizer:v1.7.0
  • quay.io/minio/directpv:latest

附註

  • 如果您使用早於 v1.20 的 Kubernetes 版本,您需要推送 quay.io/minio/csi-provisioner:v2.2.0-go1.18

下列 shell 指令碼會執行上述步驟

/bin/bash -e

# set this to private registry URL (the URL should NOT include http or https)
if [ -z $PRIVATE_REGISTRY_URL ]; then "PRIVATE_REGISTRY_URL env var should be set"; fi

images[0]=quay.io/minio/csi-node-driver-registrar:v2.6.3
images[1]=quay.io/minio/csi-provisioner:v3.4.0
images[2]=quay.io/minio/livenessprobe:v2.9.0
images[3]=quay.io/minio/csi-resizer:v1.7.0
images[4]=quay.io/minio/directpv:$(curl -s "https://api.github.com/repos/minio/directpv/releases/latest" | grep tag_name | sed -E 's/.*"([^"]+)".*/\1/')

function privatize(){ echo $1 | sed "s#quay.io#${PRIVATE_REGISTRY_URL}#g"; }
function pull_tag_push(){ docker pull $1 &&  docker tag $1 $2 && docker push $2; }
for image in ${images[*]}; do pull_tag_push $image $(privatize $image); done

在 OpenShift 上安裝

當部署至 OpenShift 時,DirectPV 需要不同的組態設定選項。使用下列命令在 OpenShift 上安裝具有適當設定的 DirectPV

$ kubectl directpv install --openshift

自訂安裝

在選定的節點上安裝

若要僅在選定的節點上安裝 DirectPV,請使用 --node-selector 旗標來指定所需的節點

kubectl directpv info
# Install DirectPV on nodes having label 'group-name' key and 'bigdata' value
$ kubectl directpv install --node-selector group-name=bigdata

在受污節點上安裝

若要在受污節點上安裝 DirectPV,請使用 --toleration 旗標。

下列範例會在受污節點上安裝 DirectPV,方法是容忍具有 'PVs' 值的 'key1' 鍵,並使用 'NoSchedule' 效果

kubectl directpv install --tolerations key1=PVs:NoSchedule

以下範例會透過容忍 ‘key2’ 鍵的存在(無論該鍵被賦予何值),並使用 ‘NoExecute’ 效果,在受污染的節點上安裝 DirectPV。

$ kubectl directpv install --tolerations key2:NoExecute

在非標準 kubelet 目錄上安裝

若要安裝在非標準的 kubelet 目錄上,請在開始安裝前設定 KUBELET_DIR_PATH 環境變數。

export KUBELET_DIR_PATH=/path/to/my/kubelet/dir
kubectl directpv install

透過產生 DirectPV 資訊清單來安裝

若要使用產生的資訊清單檔案進行安裝,請使用以下指令。

curl -sfL https://github.com/minio/directpv/raw/master/docs/tools/install.sh | sh -s - apply