在 Azure Kubernetes 服务上使用 Azure 高级 SSD v2 磁盘
Azure 高级 SSD v2 磁盘提供 IO 密集型企业工作负载、一致的亚毫秒级磁盘延迟以及高 IOPS 和吞吐量。 可随时独立配置 Premium 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 磁盘
若要在部署或 StatefulSet 中使用高级 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 可以使用以前创建的存储类来创建超级磁盘。
创建名为 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 的永久性卷声明将 Azure 磁盘装载到 /mnt/azure
路径。
创建名为 nginx-premium2.yaml
的文件,并将其复制到以下清单中。
kind: Pod
apiVersion: v1
metadata:
name: nginx-premium2
spec:
containers:
- name: nginx-premium2
image: mcr.azk8s.cn/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
现在你有一个正在运行的 Pod,其中 Azure 磁盘被装载到 /mnt/azure
目录中。 通过 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.azk8s.cn/oss/nginx/nginx:1.15.5-alpine"
Normal Pulled 7m38s kubelet Successfully pulled image "mcr.azk8s.cn/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
,该值必须是自动创建的第二个资源组,用于存储具有命名约定 MC_resourcegroupname_clustername_location 的 AKS 工作器节点。 有关详细信息,请参阅为何使用 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
后续步骤
- 有关存储最佳做法的详细信息,请参阅有关 Azure Kubernetes 服务 (AKS) 中存储和备份的最佳做法。