共用方式為


在 Azure Kubernetes Service 上使用 Azure Ultra 磁碟

Azure Ultra 磁碟可為具狀態應用程式提供高輸送量、高 IOPS 以及一致的低延遲磁碟儲存體。 Ultra 磁碟的其中一個主要優點是能夠動態變更 SSD 的效能和和工作負載,而不需要重新啟動代理程式節點。 Ultra 磁碟適用於資料密集的工作負載。

本文描述如何設定新的或現有的 AKS 叢集以使用 Azure Ultra 磁碟。

開始之前

只有在建立叢集時或建立節點集區時,才能設定此功能。

限制

  • Azure Ultra 磁碟需要支援這些磁碟的可用性區域和區域中所部署的節點集區,而且只有特定 VM 系列所支援。 如需詳細資訊,請檢閱 Ultra 磁碟限制 一節下方的對應資料表。
  • Ultra 磁碟無法與某些功能搭配使用,例如可用性設定組或 Azure 磁碟加密。 如需最新資訊,請檢閱 Ultra 磁碟限制

建立可使用 Ultra 磁碟的叢集

使用下列 CLI 命令,以建立能夠利用 Azure Ultra 磁碟的 AKS 叢集。 使用 --enable-ultra-ssd 參數來設定 EnableUltraSSD 功能。

az aks create \
    --resource-group MyResourceGroup \
    --name myAKSCluster \
    --location westus2 \
    --node-vm-size Standard_D2s_v3 \
    --zones 1 2 \
    --node-count 2 \
    --enable-ultra-ssd \
    --generate-ssh-keys

如果您想要建立沒有 Ultra 磁碟支援的叢集,則可以省略 --enable-ultra-ssd 參數來執行此動作。

在現有叢集上啟用 Ultra 磁碟

您可以將新的節點集區新增至支援 Ultra 磁碟的叢集,以在現有叢集上啟用 Ultra 磁碟。 搭配使用 --enable-ultra-ssd 參數與 az aks nodepool add 命令,以設定新的節點集區來使用 Ultra 磁碟。

如果您想要建立不支援 Ultra 磁碟的新節點集區,則可以排除 --enable-ultra-ssd 參數來執行此動作。

以動態方式搭配儲存類別使用 Ultra 磁碟

若要在您的部署或具狀態集合中使用 Ultra 磁碟,您可以使用儲存類別進行動態佈建

建立儲存類別

儲存體類別可用來定義如何搭配永續性磁碟區動態建立儲存體單位。 如需 Kubernetes 儲存類別的詳細資訊,請參閱 Kubernetes 儲存類別。 在此範例中,我們將建立可參考 Ultra 磁碟的儲存類別。

  1. 建立名為 azure-ultra-disk-sc.yaml 的檔案,然後將下列資訊清單複製進來:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: ultra-disk-sc
    provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
    volumeBindingMode: WaitForFirstConsumer # optional, but recommended if you want to wait until the pod that will use this disk is created 
    parameters:
      skuname: UltraSSD_LRS
      kind: managed
      cachingMode: None
      diskIopsReadWrite: "2000"  # minimum value: 2 IOPS/GiB 
      diskMbpsReadWrite: "320"   # minimum value: 0.032/GiB
    
  2. 使用 kubectl apply 命令來建立儲存類別,並指定您的 azure-ultra-disk-sc.yaml 檔案。

    kubectl apply -f azure-ultra-disk-sc.yaml
    

    您的輸出應該與下列範例輸出類似:

    storageclass.storage.k8s.io/ultra-disk-sc created
    

建立永續性磁碟區宣告

永續性磁碟區宣告 (PVC) 可用來根據儲存體類別,動態佈建儲存體。 在此情況下,PVC 可以使用先前建立的儲存類別建立 Ultra 磁碟。

  1. 建立名為 azure-ultra-disk-pvc.yaml 的檔案,然後將下列資訊清單複製進來:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ultra-disk
    spec:
      accessModes:
     - ReadWriteOnce
      storageClassName: ultra-disk-sc
      resources:
        requests:
          storage: 1000Gi
    

    宣告要求名為 ultra-disk 的磁碟,其大小為 1000 GB 且具備 ReadWriteOnce 存取權。 系統會將 ultra-disk-sc 儲存類別指定為儲存類別。

  2. 使用 kubectl apply 命令來建立永續性磁碟區宣告,並指定您的 azure-ultra-disk-pvc.yaml 檔案。

    kubectl apply -f azure-ultra-disk-pvc.yaml
    

    您的輸出應該與下列範例輸出類似:

    persistentvolumeclaim/ultra-disk created
    

使用永續性磁碟區

建立永續性磁碟區宣告,並成功佈建磁碟之後,就能建立可存取磁碟的 Pod。 下列資訊清單所建立的基本 NGINX Pod,會使用名為 ultra-disk 的永續性磁碟區宣告,在 /mnt/azure 路徑上掛接 Azure 磁碟。

  1. 建立名為 nginx-ultra.yaml 的檔案,然後將下列資訊清單複製進來:

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-ultra
    spec:
      containers:
     - name: nginx-ultra
        image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
        - mountPath: "/mnt/azure"
          name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: ultra-disk
    
  2. 使用 kubectl apply 命令來建立 Pod,並指定 nginx-ultra.yaml 檔案。

    kubectl apply -f nginx-ultra.yaml
    

    您的輸出應該與下列範例輸出類似:

    pod/nginx-ultra created
    

    您現在已有一個 Azure 磁碟掛接在 /mnt/azure 目錄中的執行中 Pod。

  3. 使用 kubectl describe pod 命令來查看設定詳細資料,並指定您的 nginx-ultra.yaml 檔案。

    kubectl describe pod nginx-ultra
    

    您的輸出應該與下列範例輸出類似:

    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  azure-managed-disk
        ReadOnly:   false
      default-token-smm2n:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-smm2n
        Optional:    false
    [...]
    Events:
      Type    Reason                 Age   From                               Message
      ----    ------                 ----  ----                               -------
      Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-79590246-0
      Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
      Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
    [...]
    

下一步