你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure Kubernetes 服务上使用 Azure 超级磁盘
Azure 超级磁盘为有状态应用程序提供高吞吐量、高 IOPS 和一致且低延迟的磁盘存储。 超级磁盘的一个主要优点是能够动态更改 SSD 的性能和工作负载,而无需重启代理节点。 超级磁盘适用于数据密集型工作负载。
本文介绍如何配置新的或现有的 AKS 群集以使用 Azure 超级磁盘。
准备阶段
只能在创建群集或创建节点池时设置此功能。
限制
- 如果要使用 Azure 超级磁盘,需要在支持此类磁盘的可用性区域和其他区域中部署节点池,并且只有特定的 VM 系列支持此类磁盘。 有关详细信息,请查看超级磁盘限制部分下的相应表。
- 超级磁盘不能与某些特性和功能一起使用,例如可用性集或 Azure 磁盘加密。 有关最新信息,请查看超级磁盘限制 。
创建可以使用超级磁盘的群集
使用以下 CLI 命令创建能够利用 Azure 超级磁盘的 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
如果要创建不支持超级磁盘的群集,可以省略 --enable-ultra-ssd
参数。
在现有群集上启用超级磁盘
可以通过将新的节点池添加到支持超级磁盘的群集上,在现有群集上启用超级磁盘。 使用 --enable-ultra-ssd
参数和 az aks nodepool add
命令将新的节点池配置为使用超级磁盘。
如果要创建不支持超级磁盘的新节点池,可以排除 --enable-ultra-ssd
参数。
通过存储类动态使用超级磁盘
若要在部署或 StatefulSet 中使用超级磁盘,可以使用存储类进行动态预配。
创建存储类
存储类用于定义使用永久性卷动态创建存储单位的方式。 有关 Kubernetes 存储类的详细信息,请参阅 Kubernetes 存储类。 在此示例中,我们将创建一个引用超级磁盘的存储类。
创建名为
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
使用
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 可以使用以前创建的存储类来创建超级磁盘。
创建名为
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 存储类指定为存储类。使用
kubectl apply
命令创建永久性卷声明,并指定azure-ultra-disk-pvc.yaml
文件。kubectl apply -f azure-ultra-disk-pvc.yaml
输出应与下面的示例输出类似:
persistentvolumeclaim/ultra-disk created
使用永久性卷
创建永久性卷声明并成功预配磁盘以后,即可创建可以访问磁盘的 Pod。 以下清单创建的基本 NGINX Pod 使用名为 ultra-disk 的永久性卷声明将 Azure 磁盘装载到 /mnt/azure
路径。
创建名为
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
使用
kubectl apply
命令创建 Pod 并指定nginx-ultra.yaml
文件。kubectl apply -f nginx-ultra.yaml
输出应与下面的示例输出类似:
pod/nginx-ultra created
现在你有一个正在运行的 Pod,其中 Azure 磁盘被装载到
/mnt/azure
目录中。使用
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" [...]
后续步骤
- 有关超级磁盘的详细信息,请参阅使用 Azure 超级磁盘。
- 有关存储最佳做法的详细信息,请参阅有关 AKS 中存储和备份的最佳做法。