共用方式為


在 Azure Kubernetes Service 上使用 Azure 進階 SSD v2 磁碟

Azure 進階 SSD v2 磁碟提供 IO 密集的企業工作負載、一致的子磁碟延遲,以及高 IOPS 和輸送量。 進階 SSD v2 磁碟的效能 (容量、輸送量和 IOPS) 可隨時單獨設定,因此在更多情況下都能更輕易地符合成本效益,同時達到效能需求。

本文說明如何設定新的或現有的 AKS 叢集以使用 Azure 進階 SSD v2 磁碟。

開始之前

在建立或升級能夠使用 Azure 進階 SSD v2 磁碟的 AKS 叢集之前,您必須在支援進階儲存體的相同區域和可用性區域中建立 AKS 叢集,並遵循下列步驟連結磁碟。

針對現有的 AKS 叢集,您可以將新的節點集區新增至叢集,然後遵循下列步驟連結磁碟,以啟用進階 SSD v2 磁碟。

重要

Azure 進階 SSD v2 磁碟需要部署在支援這些磁碟的區域中的節點集區。 如需支援區域的清單,請參閱進階 SSD v2 磁碟支援的區域

限制

  • Azure 進階 SSD v2 磁碟有一些您需要注意的限制。 如需完整清單,請參閱 進階 SSD v2 限制

動態搭配記憶體類別使用進階 SSD v2 磁碟

若要在部署或具狀態集合中使用進階 SSD v2 磁碟,您可以使用記憶體類別進行動態佈建

建立儲存類別

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

在此範例中,您會建立參考進階 SSD v2 磁碟的記憶體類別。 建立名為 azure-pv2-disk-sc.yaml 的檔案,然後將下列資訊清單複製進來。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: premium2-disk-sc
parameters:
   cachingMode: None
   skuName: PremiumV2_LRS
   DiskIOPSReadWrite: "4000"
   DiskMBpsReadWrite: "1000"
provisioner: disk.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true

使用 kubectl apply 命令建立儲存體類別,並指定您的 azure-pv2-disk-sc.yaml 檔案:

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

此命令的輸出與下列範例類似:

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

建立永續性磁碟區宣告

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

建立名為 azure-pv2-disk-pvc.yaml 的檔案,然後將下列資訊清單複製進來。 宣告要求名為 premium2-disk 的磁碟,其大小為 1000 GB 且具備 ReadWriteOnce 存取權。 系統會將 premium2-disk-sc 儲存類別指定為儲存類別。

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

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

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

此命令的輸出與下列範例類似:

persistentvolumeclaim/premium2-disk created

使用永續性磁碟區

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

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

kind: Pod
apiVersion: v1
metadata:
  name: nginx-premium2
spec:
  containers:
  - name: nginx-premium2
    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: premium2-disk

使用 kubectl apply 命令建立 Pod,如下列範例所示:

kubectl apply -f nginx-premium2.yaml

此命令的輸出與下列範例類似:

pod/nginx-premium2 created

您現在已有一個 Azure 磁碟掛接在 /mnt/azure 目錄中的執行中 Pod。 此設定會在透過 kubectl describe pod nginx-premium2 檢查您的 Pod 時顯示,如下列精簡範例所示:

kubectl describe pod nginx-premium2

[...]
Volumes:
  volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  premium2-disk
    ReadOnly:   false
  kube-api-access-sh59b:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason                  Age    From                     Message
  ----    ------                  ----   ----                     -------
  Normal  Scheduled               7m58s  default-scheduler        Successfully assigned default/nginx-premium2 to aks-agentpool-12254644-vmss000006
  Normal  SuccessfulAttachVolume  7m46s  attachdetach-controller  AttachVolume.Attach succeeded for volume "pvc-ff39fb64-1189-4c52-9a24-e065b855b886"
  Normal  Pulling                 7m39s  kubelet                  Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine"
  Normal  Pulled                  7m38s  kubelet                  Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine" in 1.192915667s
  Normal  Created                 7m38s  kubelet                  Created container nginx-premium2
  Normal  Started                 7m38s  kubelet                  Started container nginx-premium2
[...]

設定 IOPS 和輸送量限制

目前透過 AKS 不支援 Azure 進階 v2 SSD 磁碟的每秒輸入/輸出作業 (IOPS) 和輸送量限制。 若要調整效能,您可以使用 Azure CLI 命令 az disk update,包括 --disk-iops-read-write--disk-mbps-read-write 參數。

下列範例會將磁碟 IOPS 讀取/寫入更新為 5000,並將 Mbps 更新為 200。 針對 --resource-group,此值必須是自動建立的第二個資源群組,才能使用命名慣例 儲存 AKS 背景工作節點 MC_resourcegroupname_clustername_location。 如需詳細資訊,請參閱為何會使用 AKS 建立兩個資源群組?

--name 參數的值是使用 StorageClass 建立的磁碟區名稱,並以 pvc- 開頭。 若要識別磁碟名稱,您可以在入口網站中執行 kubectl get pvc 或瀏覽至次要資源群組來尋找這。 若要深入了解,請參閱從 Azure 入口網站管理資源

az disk update --subscription subscriptionName --resource-group myResourceGroup --name diskName --disk-iops-read-write=5000 --disk-mbps-read-write=200  

下一步