Skip to main content
NetApp container solutions
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

在 VKS 叢集中安裝 NetApp Trident

貢獻者 banum-netapp

在您的 vSphere Kubernetes Service 叢集中安裝 NetApp Trident 作為動態儲存資源配置程式,以將 NetApp ONTAP 儲存設備與您的 Kubernetes 工作負載整合。

開始之前
  • 請確保您的 ONTAP 叢集已設定並連線至您的 VMware Kubernetes 環境。

  • 如果您的工作負載將使用這些協定進行儲存設備,請確保您的 VKS 叢集已安裝 iSCSI 或 NVMe 工具。

  • 請確保已在可以使用 kubeconfig 檔案連接到 VKS 叢集的機器上安裝了 kubectl

    從「資源」標籤下載 kubeconfig 檔案
步驟
  1. 依照 Trident 文件中的說明,使用 Helm chart 安裝 Trident Operator:

    在執行 Helm 安裝之前,請建立並標記 trident 命名空間。此 enforce=privileged 標籤是必要的,因為 Trident 執行的是特權工作負載。如果沒有此標籤,Kubernetes Pod 安全性許可控制器將封鎖 Trident Pod 啟動。

    kubectl create namespace trident
    kubectl label namespace trident pod-security.kubernetes.io/enforce=privileged
    顯示範例
    helm install trident netapp-trident/trident-operator --version 100.2606.0 --namespace trident

    若要啟用除錯記錄,請新增 --set tridentDebug=true

    helm install trident netapp-trident/trident-operator --version 100.2606.0 --namespace trident --set tridentDebug=true
    註 您也可以使用 Trident Operator 手動安裝 Trident。請參閱 Trident 文件中的步驟:"手動部署 Trident Operator"

    在手動安裝 Trident 之前,請確保已使用所需的 pod 安全性標籤來標記 `trident`命名空間。

  2. 確認叢集中所有 Trident Pod 都正在運作。

    顯示範例
    kubectl get pods -n trident
    安裝Trident
    註 如果 Trident Pod 啟動失敗並出現 `PodSecurity`存取錯誤,則可能是安裝前未將 Pod 安全性標籤套用到 `trident`命名空間。請使用 `--overwrite`重新套用這些標籤,然後驗證 Pod 是否啟動。
    kubectl label namespace trident pod-security.kubernetes.io/enforce=privileged --overwrite

為您的環境準備儲存設備後端和 StorageClass 組態檔案

  1. 透過定義必要的連線詳細資訊和儲存設備參數,為 ONTAP 設定 Trident 後端。

  2. 在 Kubernetes 中定義對應至 NetApp 儲存設備後端的儲存設備類別。這些類別指定效能特性和複寫原則等參數。

    根據工作負載的要求,為下列協定定義 Trident 後端和儲存設備類別:

    • NAS(ontap-nas 驅動程式)

    • NAS Economy(ontap-nas-economy 驅動程式)

    • SAN(ontap-san 驅動程式)支援 iSCSI、FC 或 NVMe 協議

    • SAN Economy(ontap-san-economy 驅動程式)適用於 iSCSI

      網路儲存

      為 ONTAP NAS 建立 TridentBackendConfig 和 StorageClass,以啟用基於 NFS 的持久性儲存配置。後端組態包含儲存在 Kubernetes Secret 中的認證,並參照您的 ONTAP SVM 和管理 LIF。

      使用使用者名稱和密碼認證的後端金鑰和後端設定檔案範例(另存為 tbc-nas.yaml):

      # tbc-nas.yaml
      apiVersion: v1
      kind: Secret
      metadata:
        name: tbc-nas-secret
        namespace: trident
      type: Opaque
      data:
        username: "<base64-encoded cluster admin username>"
        password: "<base64-encoded cluster admin password>"
      ---
      apiVersion: trident.netapp.io/v1
      kind: TridentBackendConfig
      metadata:
        name: tbc-nas
        namespace: trident
      spec:
        version: 1
        storageDriverName: ontap-nas
        managementLIF: <ONTAP management LIF>
        backendName: tbc-nas
        svm: <your SVM name>
        storagePrefix: <your prefix for all volume names created using this backend configuration>
        defaults:
          nameTemplate: "{{ .config.StoragePrefix }}_{{ .volume.Namespace }}_{{ .volume.RequestName }}"
        credentials:
          name: tbc-nas-secret

      使用用戶端憑證認證的後端金鑰和後端設定檔案範例(另存為 tbc-nas.yaml):

      # tbc-nas.yaml
      apiVersion: v1
      kind: Secret
      metadata:
        name: ontap-nas-secret
        namespace: trident
      type: Opaque
      stringData:
        clientPrivateKey: <client private key value>
      ---
      apiVersion: trident.netapp.io/v1
      kind: TridentBackendConfig
      metadata:
        name: tbc-nas
        namespace: trident
      spec:
        version: 1
        storageDriverName: ontap-nas
        managementLIF: <ONTAP management LIF>
        backendName: tbc-nas
        svm: <your SVM name>
        storagePrefix: <your prefix for all volume names created using this backend configuration>
        credentials:
          name: ontap-nas-secret
        clientCertificate: <client certificate>

      StorageClass 定義(另存為 sc-nas.yaml):

      mountOptions 是一個可選參數,用於指定 NFS Volume 的附加裝載選項。此 nconnect 選項允許為單一 NFS 裝載建立多個並行 TCP 連線,從而提升高吞吐量工作負載的效能。預設值為 1,但可以增加至 ONTAP 系統允許的最大值。

ONTAP 支援在支援 nconnect 的用戶端上,單一 NFS 裝載最多可建立 16 個連線。Trident 會將裝載選項直接傳遞給 Kubernetes 工作節點,因此請選擇工作節點 NFS 用戶端和 ONTAP 都支援的值;以下範例使用四個連線。

# sc-nas.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-nas
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-nas"
  media: "ssd"
  provisioningType: "thin"
  snapshots: "true"
allowVolumeExpansion: true
mountOptions:
- nconnect=4

為 ONTAP NAS Economy 驅動程式建立 TridentBackendConfig 和 StorageClass,以使用 qtree 啟用基於 NFS 的持續儲存資源配置。後端組態包含儲存在 Kubernetes Secret 中的憑證,並參照您的 ONTAP SVM 和管理 LIF。

使用使用者名稱和密碼認證的後端金鑰和後端設定檔案範例(另存為 tbc-nas-economy.yaml):

# tbc-nas-economy.yaml
apiVersion: v1
kind: Secret
metadata:
  name: tbc-nas-economy-secret
  namespace: trident
type: Opaque
data:
  username: "<base64-encoded cluster admin username>"
  password: "<base64-encoded cluster admin password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: tbc-nas-economy
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-nas-economy
  managementLIF: <ONTAP management LIF>
  backendName: tbc-nas-eco
  svm: <your SVM name>
  storagePrefix: <your prefix for all volume names created using this backend configuration>
  defaults:
    nameTemplate: "{{ .config.StoragePrefix }}_{{ .volume.Namespace }}_{{ .volume.RequestName }}"
  credentials:
    name: tbc-nas-economy-secret

StorageClass 定義(另存為 sc-nas-economy.yaml):

# sc-nas-economy.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-nas-economy
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-nas-economy"
  media: "ssd"
  provisioningType: "thin"
allowVolumeExpansion: true
mountOptions:
- nconnect=4

建立適用於 ONTAP SAN 與 iSCSI 的 TridentBackendConfig 和 StorageClass,以啟用基於 iSCSI 的區塊儲存資源配置。後端組態使用 ontap-san 驅動程式,並包含儲存在 Kubernetes Secret 中的憑證。若省略 sanType 參數,則預設使用 iSCSI 通訊協定。

使用使用者名稱和密碼驗證的後端金鑰和後端組態檔案(另存為 tbc-iscsi.yaml):

# tbc-iscsi.yaml
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-ontap-iscsi-secret
  namespace: trident
type: Opaque
data:
  username: "<base64-encoded cluster admin username>"
  password: "<base64-encoded cluster admin password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: ontap-iscsi
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-san
  managementLIF: <ONTAP management LIF>
  backendName: ontap-iscsi
  svm: <your SVM name>
  credentials:
    name: backend-tbc-ontap-iscsi-secret

使用用戶端憑證認證的後端金鑰和後端設定檔案(另存為 tbc-iscsi.yaml):

# tbc-iscsi.yaml
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-ontap-iscsi-secret
  namespace: trident
type: Opaque
stringData:
  clientPrivateKey: <client private key>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: ontap-iscsi
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-san
  managementLIF: <ONTAP management LIF>
  backendName: ontap-iscsi
  svm: <your SVM name>
  credentials:
    name: backend-tbc-ontap-iscsi-secret
  clientCertificate: <client certificate>

StorageClass 定義(另存為 sc-iscsi.yaml):

# sc-iscsi.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-iscsi
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-san"
  media: "ssd"
  provisioningType: "thin"
  fsType: ext4
  snapshots: "true"
allowVolumeExpansion: true

為 ONTAP SAN 搭配 NVMe 建立 TridentBackendConfig 和 StorageClass,以啟用基於 NVMe 的區塊儲存資源配置。後端組態使用 ontap-san 驅動程式,並包含儲存在 Kubernetes Secret 中的憑證。 sanType`參數必須設定為 `nvme

使用使用者名稱和密碼驗證的後端金鑰和後端組態檔案(另存為 tbc-nvme.yaml):

# tbc-nvme.yaml
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-ontap-nvme-secret
  namespace: trident
type: Opaque
data:
  username: "<base64-encoded cluster admin username>"
  password: "<base64-encoded cluster admin password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: ontap-nvme
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-san
  sanType: nvme
  managementLIF: <ONTAP management LIF>
  backendName: ontap-nvme
  svm: <your SVM name>
  credentials:
    name: backend-tbc-ontap-nvme-secret

使用用戶端憑證認證的後端金鑰和後端設定檔案(另存為 tbc-nvme.yaml):

# tbc-nvme.yaml
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-ontap-nvme-secret
  namespace: trident
type: Opaque
stringData:
  clientPrivateKey: <client private key>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: ontap-nvme
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-san
  sanType: nvme
  managementLIF: <ONTAP management LIF>
  backendName: ontap-nvme
  svm: <your SVM name>
  credentials:
    name: backend-tbc-ontap-nvme-secret
  clientCertificate: <client certificate>

StorageClass 定義(另存為 sc-nvme.yaml):

# sc-nvme.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-nvme
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-san"
  media: "ssd"
  provisioningType: "thin"
  fsType: ext4
  snapshots: "true"
allowVolumeExpansion: true

請參閱 Trident 文件,以取得更多 YAML 檔案範例,以及 SAN 驅動程式和 NAS 驅動程式支援的存取模式和 Volume 模式的相關資訊。

建立 VolumeSnapshotClass 組態檔案

建立 VolumeSnapshotClass 定義。此組態可為持續性 Volume 啟用快照型作業。

VolumeSnapshotClass 定義(另存為 snapshot-class.yaml):

# snapshot-class.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: trident-snapshotclass
driver: csi.trident.netapp.io
deletionPolicy: Retain

將組態檔套用至叢集

使用 `kubectl`將您在前面步驟中建立的組態檔套用至 vSphere Kubernetes 服務叢集。這將在您的叢集中建立必要的機密、後端組態、儲存設備類別和快照類別。

步驟
  1. 為您配置的每個協定套用 TridentBackendConfig 和 StorageClass 檔案。

    kubectl apply -f tbc-nas.yaml -n trident
    kubectl apply -f sc-nas.yaml
    
    kubectl apply -f tbc-nas-economy.yaml -n trident
    kubectl apply -f sc-nas-economy.yaml
    
    kubectl apply -f tbc-iscsi.yaml -n trident
    kubectl apply -f sc-iscsi.yaml
    
    kubectl apply -f tbc-nvme.yaml -n trident
    kubectl apply -f sc-nvme.yaml
    
    kubectl apply -f snapshot-class.yaml
  2. 確認資源已成功建立。

    檢查 TridentBackendConfig 物件:

    kubectl get tbc -n trident

    檢查 StorageClass 物件:

    kubectl get storageclass

    檢查 VolumeSnapshotClass:

    kubectl get volumesnapshotclass

設定預設的 Trident 儲存設備和快照類別

將 Trident StorageClass 和 VolumeSnapshotClass 設為 vSphere Kubernetes Service 叢集中的預設值。

步驟
  1. 設定預設的 Trident StorageClass。

    將 Trident 支援的 StorageClass 設定為叢集預設值,以便在未指定儲存類別時,PersistentVolumeClaims 自動使用它。

    確保只將一個 StorageClass 設定為預設值。如果另一個 StorageClass 已設定為預設值,請將其註解設為 false

    從 CLI:

    kubectl patch storageclass <storage class name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
  2. 設定預設的 Trident VolumeSnapshotClass。

    將 Trident 支援的 VolumeSnapshotClass 設定為叢集預設值,以啟用持續性 Volume 的快照型作業。這可確保 VolumeSnapshots 在未指定快照類別時,自動使用 Trident CSI 驅動程式。

    確保只將一個 VolumeSnapshotClass 設定為預設值。如果另一個 VolumeSnapshotClass 已設定為預設值,請將其註解設為 false

    從 CLI:

    kubectl patch volumesnapshotclass <snapshot class name> --type=merge -p '{"metadata":{"annotations":{"snapshot.storage.kubernetes.io/is-default-class":"true"}}}'

使用 Kubernetes Persistent Volume Claims 為工作負載請求儲存設備

Trident 會自動從後端 NetApp 儲存設備配置必要的 Volume。有關在 VKS 叢集中使用 PVC 部署工作負載的範例,請參閱 "使用持續儲存部署工作負載"