Share via


在 Azure Arc 啟用的 AKS 中使用容器記憶體介面 (CSI) 磁碟驅動器

> 適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS、Azure Stack HCI 23H2 上的 AKS

本文說明如何使用容器記憶體介面 (CSI) 內建儲存類別,以動態方式建立磁碟永續性磁碟區,並在 Arc 啟用的 AKS 中建立自定義儲存類別。

Arc 所啟用 AKS 中的 CSI 概觀

容器儲存體介面 (CSI) 是將任意區塊和檔案儲存系統公開給 Kubernetes 上容器化工作負載的標準。 透過使用 CSI,Arc 所啟用的 AKS 可以寫入、部署和逐一查看外掛程式,以公開新的儲存系統。 使用 CSI 也可以改善 Kubernetes 中現有的儲存系統,而不需要變更核心 Kubernetes 程式碼,然後等候其發行週期。

AKS Arc 所使用的磁碟和檔案 CSI 驅動程式與 CSI 規格相容驅動程式。

AKS Arc 上的 CSI 記憶體驅動程式支援可讓您使用:

  • 可用來建立 Kubernetes DataDisk 資源的 AKS Arc 磁碟。 這些磁碟會以 ReadWriteOnce 的形式掛接,因此僅適用於單一節點。 對於可同時由多個 Pod 存取的記憶體磁碟區,請使用 AKS Arc 檔案

  • 可用來將 SMB 或 NFS 共用掛接至 Pod 的 AKS Arc 檔案。 這些檔案會以 ReadWriteMany 的形式掛接,因此您可以在多個節點和 Pod 之間共用資料。 這些檔案也可以根據 PVC 規格 (永續性磁碟區宣告) 掛接為 ReadWriteOnce

使用內建儲存類別動態建立磁碟永續性磁碟區

儲存類別可用來定義如何搭配永續性磁碟區動態建立儲存體單位。 如需有關如何使用儲存體類別的詳細資訊,請參閱 Kubernetes 儲存體類別

在 AKS Arc 中, 預設 會建立預設儲存類別,並使用 CSI 來建立 VHDX 支援的磁碟區。 當所用的永續性磁碟區遭刪除時,回收原則可確保將基礎 VHDX 刪除。 儲存類別也會將永續性磁碟區設為可展開;您只需要以新的大小來編輯永續性磁碟區宣告。

若要利用這個儲存類別,請建立 PVC 和個別的 Pod 來參考及使用它。 PVC 可用來根據儲存體類別,動態佈建儲存體。 PVC 可以使用任一個預先建立的儲存類別,或使用者定義的儲存類別來建立所需大小的 VHDX。 當您建立 Pod 定義時,您會指定 PVC 應要求所需的儲存體。

建立磁碟的自定義儲存類別

預設儲存類別適用於大部分的常見案例。 不過在某些情況下,您可能會想要建立自己的儲存類別,以將 PV 儲存在對應至特定效能層級的特定位置。

如果您有 Linux 工作負載 (Pod),您必須使用參數 fsType: ext4 建立自訂的儲存類別。 此需求適用於 Kubernetes 1.19 版和 1.20 版或更新版本。 下列範例顯示已定義參數的 fsType 自訂記憶體類別定義:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aks-hci-disk-custom
parameters:
  blocksize: "33554432"
  container: SqlStorageContainer
  dynamic: "true"
  group: clustergroup-summertime
  hostname: TESTPATCHING-91.sys-sqlsvr.local
  logicalsectorsize: "4096"
  physicalsectorsize: "4096"
  port: "55000"
  fsType: ext4
provisioner: disk.csi.akshci.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true  

如果建立自訂儲存類別,您可以指定要儲存 PV 的位置。 如果基礎結構是 Azure Stack HCI,這個新位置可能是高效能 SSD/NVMe 所支援的磁碟區,或 HDD 所支援的成本優化磁碟區。

建立自訂儲存類別的程序有兩個步驟:

  1. 使用 stack-hci-vm storagepath Cmdlet 來建立、顯示及列出 Azure Stack HCI 叢集上的記憶體路徑,以建立新的記憶體路徑。 如需記憶體路徑建立的詳細資訊,請參閱 記憶體路徑

    針對 $path,建立名為 的 $storagepathname記憶體路徑;例如 C:\ClusterStorage\test-storagepath

    az stack-hci-vm storagepath create --resource-group $resource_group --custom-location $customLocationID --name $storagepathname --path $path
    

    取得記憶體路徑資源識別碼:

    $storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv 
    
  2. 使用新的記憶體路徑建立新的自訂儲存類別。

    1. 建立名為 sc-aks-hci-disk-custom.yaml 的檔案,然後從下列 YAML 檔案複製指令清單。 除了新 container 的以外,儲存類別與預設的儲存類別相同。 storage path ID使用在上一個步驟中建立的 container。 針對 grouphostname,執行 來查詢預設儲存類別 kubectl get storageclass default -o yaml,然後使用指定的值:

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
       name: aks-hci-disk-custom
      provisioner: disk.csi.akshci.com
      parameters:
       blocksize: "33554432"
       container: <storage path ID>
       dynamic: "true"
       group: <e.g clustergroup-akshci> # same as the default storageclass
       hostname: <e.g. ca-a858c18c.ntprod.contoso.com> # same as the default storageclass
       logicalsectorsize: "4096"
       physicalsectorsize: "4096"
       port: "55000"
       fsType: ext4 # refer to the note above to determine when to include this parameter
      allowVolumeExpansion: true
      reclaimPolicy: Delete
      volumeBindingMode: Immediate
      
    2. 使用 kubectl apply 命令建立記憶體類別,並指定 sc-aks-hci-disk-custom.yaml 檔案:

       $ kubectl apply -f sc-aks-hci-disk-custom.yaml
       storageclass.storage.k8s.io/aks-hci-disk-custom created
      

下一步