共用方式為


搭配本機 NVMe 和磁碟區復寫使用 Azure 容器儲存體預覽版

Azure 容器儲存體是雲端式磁碟區管理、部署和協調流程服務,專為容器原生建置。 本文說明如何設定 Azure 容器儲存體以使用暫時性磁碟搭配本機 NVMe 和磁碟區複寫,做為 Kubernetes 工作負載的後端儲存體。 最後,您將擁有使用本機 NVMe 做為其儲存體的 Pod。 複寫跨不同節點上的磁碟區複製資料,並在複本遺失時還原磁碟區,從而為暫時性磁碟提供了復原性。

什麽是暫時性磁碟?

當您的應用程式需要不到一毫秒的儲存體延遲時,您可以將暫時性磁碟與 Azure 容器儲存體一起使用以滿足您的效能需求。 暫時性表示磁碟部署在託管 AKS 叢集的本機虛擬機器 (VM) 上,而非儲存至 Azure 儲存體服務。 如果您停止/解除配置 VM,則這些磁碟上的資料將會遺失。

有兩種類型的暫時性磁碟可用:NVMe 和暫存 SSD。 NVMe 是為儲存體和 CPU 之間的高速資料傳輸而設計的。 當您的應用程式需要比暫存 SSD 更高的 IOPS 和輸送量時,或者如果您的工作負載需要複製,請選擇 NVMe。 暫存 SSD 目前不支援複寫。

必要條件

  • 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

  • 本文需要最新版本 (2.35.0 或更新版本) 的 Azure CLI。 請參閱如何安裝 Azure CLI。 若您使用的是 Azure Cloud Shell 中的 Bash 環境,即已安裝最新版本。 如果您打算在本機執行命令,而不是在 Azure Cloud Shell 中執行命令,請務必使用系統管理權限來執行這些命令。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell

  • 您將需要 Kubernetes 命令列用戶端,kubectl。 如果您使用 Azure Cloud Shell,則已安裝;您也可以執行 az aks install-cli 命令,在本機安裝。

  • 如果您尚未安裝 Azure 容器儲存體,請遵循將 Azure 容器儲存體與 Azure Kubernetes Service 一起使用中的指示。

  • 檢查您的目標區域是否受 Azure 容器儲存體區域支援。

選擇支援本機 NVMe 的 VM 類型

暫時性磁碟僅適用於特定類型的 VM。 如果您打算使用本機 NVMe,則需要儲存體最佳化 VM,例如 standard_l8s_v3

您可以執行下列命令,以取得與節點集區搭配使用的 VM 類型。

az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table

以下是輸出的範例。

PoolName    VmSize
----------  ---------------
nodepool1   standard_l8s_v3

我們建議每個 VM 至少有四個虛擬 CPU (vCPU),且每個節點集區至少有三個節點。

建立及連結永續性磁碟區

請遵循下列步驟來建立及連結永續性磁碟區。

1.建立具有磁碟區復寫的存放集區

請按照以下步驟,使用本機 NVMe 搭配複寫建立存放集區。 Azure 容器儲存體目前支援三個複本和五個複本組態。 如果您指定三個複本,則必須在 AKS 叢集中至少有三個節點。 如果您指定五個複本,則必須至少有五個節點。

注意

由於暫時性 OS 磁碟存放集區會取用所有可用的 NVMe 磁碟,因此您必須先刪除任何現有的本機 NVMe 存放集區,才能建立新的存放集區。

  1. 使用您慣用的文字編輯器來建立 YAML 資訊清單檔,例如 code acstor-storagepool.yaml

  2. 貼上下列程式碼並儲存檔案。 存放集區 name 值可以是您想要的任何值。 將複本設定為 3 或 5。

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
          replicas: 3
    
  3. 套用 YAML 資訊清單檔以建立存放集區。

    kubectl apply -f acstor-storagepool.yaml 
    

    當存放集區建立完成時,您會看到如下的訊息:

    storagepool.containerstorage.azure.com/nvme created
    

    您也可以執行此命令來檢查存放集區的狀態。 將 <storage-pool-name> 取代為您的存放集區 name 值。 在此範例中,值會是 nvme

    kubectl describe sp <storage-pool-name> -n acstor
    

建立存放集區時,Azure 容器儲存體會代表您建立儲存類別,並使用命名慣例 acstor-<storage-pool-name>

2.顯示可用的儲存類別

當存放集區準備好使用時,您必須選取儲存類別,以定義在建立及部署磁碟區時,如何動態建立儲存體。

執行 kubectl get sc 以顯示可用的儲存類別。 您應看到名為 acstor-<storage-pool-name> 的儲存類別。

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

重要

請勿使用標示為 [內部] 的儲存類別。 這是 Azure 容器儲存體運作所需的內部儲存類別。

3.建立永續性磁碟區宣告

永續性磁碟區宣告 (PVC) 可用來根據儲存體類別,動態佈建儲存體。 請遵循下列步驟,使用新的儲存類別建立 PVC。

  1. 使用您慣用的文字編輯器來建立 YAML 資訊清單檔,例如 code acstor-pvc.yaml

  2. 貼上下列程式碼並儲存檔案。 PVC name 值可以是您想要的任何值。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ephemeralpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-nvme # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    

    當您變更磁碟區的儲存大小時,請確定大小小於單一節點暫時性磁碟的可用容量。 請參閱檢查節點暫時性磁碟容量

  3. 套用 YAML 資訊清單檔以建立 PVC。

    kubectl apply -f acstor-pvc.yaml
    

    您應該會看到如下所示的輸出:

    persistentvolumeclaim/ephemeralpvc created
    

    您可以執行下列命令來驗證 PVC 狀態:

    kubectl describe pvc ephemeralpvc
    

建立 PVC 後,就可以由 Pod 使用。

4.部署 Pod 並連結永續性磁碟區

使用 Fio (彈性 I/O 測試器) 建立 Pod,以進行基準測試和工作負載模擬,並指定永續性磁碟區的掛接路徑。 針對 claimName,請使用您在建立永續性磁碟區宣告時所使用的 name 值。

  1. 使用您慣用的文字編輯器來建立 YAML 資訊清單檔,例如 code acstor-pod.yaml

  2. 貼上下列程式碼並儲存檔案。

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: ephemeralpv
          persistentVolumeClaim:
            claimName: ephemeralpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralpv
    
  3. 套用 YAML 資訊清單檔以部署 Pod。

    kubectl apply -f acstor-pod.yaml
    

    您應該會看到如下輸出:

    pod/fiopod created
    
  4. 檢查 Pod 是否正在執行,且永續性磁碟區宣告已成功繫結至 Pod:

    kubectl describe pod fiopod
    kubectl describe pvc ephemeralpvc
    
  5. 檢查 Fio 測試以查看其目前狀態:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

您現在已部署使用具有磁碟區復寫本機 NVMe 的 Pod,並可用於 Kubernetes 工作負載。

管理磁碟區和存放集區

在本節中,您將了解如何檢查單一節點暫時性磁碟的可用容量,如何中斷連結及重新連結永續性磁碟區,以及如何展開或刪除存放集區。

檢查節點暫時性磁碟容量

暫時性磁碟區會配置在單一節點上。 當您設定暫時性磁碟區大小時,大小應該小於單一節點暫時性磁碟的可用容量。

執行下列命令來檢查單一節點的暫時性磁碟可用容量。

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-nvme-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

在此範例中,單一節點的暫時性磁碟可用容量為 75031990272 位元組或 69 GiB。

中斷連結及重新連結永續性磁碟區

若要中斷連結永續性磁碟區,請刪除永續性磁碟區連結的 Pod。

kubectl delete pods <pod-name>

若要重新連結永續性磁碟區,只要參考 YAML 資訊清單檔中的永續性磁碟區宣告名稱,如部署 Pod 並連結永續性磁碟區中所述。

若要檢查永續性磁碟區宣告繫結至哪個永續性磁碟區,請執行:

kubectl get pvc <persistent-volume-claim-name>

擴充存放集區

您可以擴充本機 NVMe 支援的存放集區,以快速且不停機地相應增加。 目前不支援壓縮存放集區。

由於暫時性磁碟所支援的存放集區會使用 AKS 叢集節點 (VM) 上的本機存放區資源,因此擴充存放集區需要將另一個節點新增至叢集。 請依照這些指示擴充存放集區。

  1. 執行下列命令,以將節點新增至 AKS 叢集。 將 <cluster-name><nodepool name><resource-group-name> 取代為您自己的值。 若要取得節點集區的名稱,請執行 kubectl get nodes

    az aks nodepool add --cluster-name <cluster name> --name <nodepool name> --resource-group <resource group> --node-vm-size Standard_L8s_v3 --node-count 1 --labels acstor.azure.com/io-engine=acstor
    
  2. 執行 kubectl get nodes,您就會看到節點已新增至叢集。

  3. 執行 kubectl get sp -A,您應該會看到存放集區的容量已增加。

刪除存放集區

若要刪除存放集區,請執行下列命令。 使用存放集區名稱取代 <storage-pool-name>

kubectl delete sp -n acstor <storage-pool-name>

另請參閱