共用方式為


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

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

本文說明如何使用容器記憶體介面 (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 使用。 針對可同時由多個 Pod 存取的記憶體磁碟區,請使用 AKS Arc 檔案

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

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

記憶體類別可用來定義以永續性磁碟區動態建立記憶體單位的方式。 如需如何使用記憶體類別的詳細資訊,請參閱 Kubernetes 記憶體類別

在 AKS Arc 中 ,預設會建立預設 記憶體類別,並使用 CSI 來建立 VHDX 支援的磁碟區。 回收原則可確保刪除使用基礎 VHDX 的永續性磁碟區時,會刪除基礎 VHDX。 記憶體類別也會將永續性磁碟區設定為可擴充;您只需要編輯具有新大小的永續性磁碟區宣告。

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

建立磁碟的自定義記憶體類別

默認記憶體類別適用於最常見的案例。 不過,在某些情況下,您可能想要建立自己的儲存類別,將 PV 儲存在對應至特定效能層的特定位置。

如果您有Linux工作負載 (pods),則必須使用 參數 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 本機,這個新位置可能是高效能 SSD/NVMe 支援的磁碟區,或 HDD 所支援的成本優化磁碟區。

建立自訂記憶體類別是兩個步驟的程式:

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

    針對 $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
      

下一步