你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 超级磁盘为有状态应用程序提供高吞吐量、高 IOPS 和一致且低延迟的磁盘存储。 超级磁盘的一个主要优点是能够动态更改 SSD 的性能和工作负载,而无需重启代理节点。 超级磁盘适用于数据密集型工作负载。
本文介绍如何配置新的或现有的 AKS 群集以使用 Azure 超级磁盘。
开始之前
只能在创建群集或创建节点池时设置此功能。
限制
- Azure 超级磁盘要求在支持这些磁盘的可用性区域和区域中部署节点池,并且仅受特定虚拟机 (VM) 系列支持。 有关详细信息,请查看超级磁盘限制部分下的相应表。
- 超级磁盘不能与某些特性和功能一起使用,例如可用性集或 Azure 磁盘加密。 有关最新信息,请查看超级磁盘限制。
创建可以使用超级磁盘的群集
为群集创建资源组。
az group create --name MyResourceGroup --location westus2
使用以下 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 \
--node-count 2 \
--enable-ultra-ssd \
--generate-ssh-keys
如果要创建不支持超级磁盘的群集,可以省略 --enable-ultra-ssd 参数。
成功部署群集后,运行以下命令,将上下文设置为新群集。
az aks get-credentials --resource-group MyResourceGroup --name myAKSCluster
在现有群集上启用超级磁盘
可以通过向支持超级磁盘的群集添加新节点池,在现有群集上启用超级磁盘。 使用 --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,该 Pod 使用名为 ultra-disk 的持久卷声明在路径 /mnt/azure 处装载 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: ultra-disk ReadOnly: false kube-api-access-sszt8: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 29s default-scheduler Successfully assigned default/nginx-ultra to aks-nodepool1-13380798-vmss000001 Normal SuccessfulAttachVolume 9s attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-a6a6a6a6-bbbb-cccc-dddd-e7e7e7e7e7e7"
后续步骤
- 有关超级磁盘的详细信息,请参阅使用 Azure 超级磁盘。
- 有关存储最佳做法的详细信息,请参阅有关 AKS 中存储和备份的最佳做法。