在 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
下一步
- 如需進階 SSD v2 磁碟的詳細資訊,請參閱使用 Azure 進階 SSD v2 磁碟。
- 如需儲存體最佳做法的詳細資訊,請參閱《Azure Kubernetes Service (AKS) 中的儲存體和備份最佳做法 (英文)》