Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文介绍如何使用 Azure 磁盘动态和静态创建永久性卷(PV),以供 Azure Kubernetes 服务 (AKS) 群集中的单个 Pod 使用。
先决条件
已安装并配置 Azure CLI 2.0.59 或更高版本。 使用
az --version命令查找版本。 若要安装或升级,请参阅安装 Azure CLI。在 AKS 群集上启用了 Azure 磁盘 CSI 驱动程序。
Azure 磁盘 CSI 驱动程序具有每个节点的卷限制。 卷计数因节点/节点池的大小而异。 可以使用
kubectl get命令来确定每个节点可分配的卷数。 例如:kubectl get CSINode <node-name> -o yaml如果每个节点的卷限制是工作负载的问题,请考虑使用 Azure 容器存储来代替 CSI 驱动程序来管理持久卷。
使用 Azure 磁盘的动态 PV 的内置存储类
存储类用于定义使用永久性卷动态创建存储单位的方式。
每个 AKS 群集都包含四个内置存储类,其中两个类配置为使用 Azure 磁盘:
-
默认存储类预配标准 SSD Azure 磁盘。
- 标准 SSD 可备份标准存储并提供经济高效的存储,同时仍提供可靠的性能。
- managed-csi-premium 存储类用于预配高级 Azure 磁盘。
- 基于 SSD 的高性能、低延迟磁盘支持高级磁盘。 它们非常适合运行生产工作负荷的虚拟机(VM)。 在 AKS 上使用 Azure 磁盘 CSI 驱动程序时,还可以使用
managed-csi存储类,该类由标准 SSD 本地冗余存储 (LRS) 提供支持。
- 基于 SSD 的高性能、低延迟磁盘支持高级磁盘。 它们非常适合运行生产工作负荷的虚拟机(VM)。 在 AKS 上使用 Azure 磁盘 CSI 驱动程序时,还可以使用
- 从 Kubernetes 版本 1.29 开始有效:跨多个可用性区域部署 AKS 群集时,AKS 现在使用区域冗余存储(ZRS)在内置存储类中创建托管磁盘。
- ZRS 可确保在所选区域中的多个 Azure 可用性区域中同步复制 Azure 托管磁盘。 此冗余策略可增强应用程序的复原能力,并保护数据免受数据中心故障的影响。
- 但是,请务必注意,与本地冗余存储(LRS)相比,ZRS 的成本更高。 如果成本优化是优先级,则可以使用 LRS SKU 名称参数创建新的存储类,并将其用于 PVC。
- ZRS 可确保在所选区域中的多个 Azure 可用性区域中同步复制 Azure 托管磁盘。 此冗余策略可增强应用程序的复原能力,并保护数据免受数据中心故障的影响。
由于存在数据丢失风险,不支持缩小 PVC 的大小。 可以使用命令编辑现有存储类 kubectl edit sc ,也可以 创建自己的自定义存储类。
注释
持久卷声明以 GiB 为单位定义,但 Azure 托管磁盘根据 SKU 按特定大小计费。 这些 SKU 的范围从 S4 或 P4 磁盘的 32 GiB 到 S80 或 P80 磁盘的 32 TiB(预览版)。 高级 SSD 的吞吐量和 IOPS 性能取决于 AKS 群集中节点的 SKU 和实例大小。 有关详细信息,请参阅 托管磁盘的定价和性能。
使用 kubectl get sc 命令查看预先创建的存储类。 以下示例演示 AKS 群集中可用的预创建storage类:
kubectl get sc
输出应类似于以下示例输出,其中包括预为 Azure 磁盘创建的 default 和 managed-csi 存储类:
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
使用 Azure 磁盘为动态 PV 创建自定义存储类
默认存储类适用于大多数方案。 在某些情况下,你可能想要使用自己的参数自定义自己的存储类。 例如,你可能想要更改 volumeBindingMode 类。
可以使用一个 volumeBindingMode: Immediate 类,该类保证一旦创建 PVC 就立即生效。 当节点池受到拓扑约束时,例如使用可用区时,PV 会被绑定或提供,而无法知晓 Pod 的调度要求。
若要解决这种情况,可以使用 volumeBindingMode: WaitForFirstConsumer,这会在创建一个使用 PVC 的 Pod 之前延迟 PV 的绑定和预配。 通过这种方式,PV 符合 Pod 调度约束,并被配置在指定的可用性区域(或其他拓扑)中。 默认存储类使用 volumeBindingMode: WaitForFirstConsumer 类。
创建一个名为
sc-azuredisk-csi-waitforfirstconsumer.yaml的文件,并将以下 YAML 清单粘贴进去。 存储类与我们的managed-csi存储类相同,但具有不同的volumeBindingMode存储类。kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: azuredisk-csi-waitforfirstconsumer provisioner: disk.csi.azure.com parameters: skuname: StandardSSD_LRS allowVolumeExpansion: true reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer使用
kubectl apply命令创建存储类并指定sc-azuredisk-csi-waitforfirstconsumer.yaml文件:kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml输出应类似于以下示例输出:
storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
使用 Azure 磁盘的动态 PV 的存储类参数
下表包含的参数可用于使用 Azure 磁盘为您的动态持久性卷声明(PVC)定义自定义存储类:
| 名称 | 含义 | 可用值 | 必需 | 默认值 |
|---|---|---|---|---|
skuName |
Azure 磁盘存储帐户类型(别名: storageAccountType) 。
PremiumV2_LRS 和 UltraSSD_LRS 支持对增量快照还原的即时访问。 |
Standard_LRS、Premium_LRS、StandardSSD_LRS、PremiumV2_LRS、UltraSSD_LRS、Premium_ZRS、StandardSSD_ZRS |
否 | StandardSSD_LRS |
fsType |
文件系统类型 |
ext4、ext3、ext2、xfs和btrfs适用于 Linuxntfs 适用于 Windows |
否 |
ext4 适用于 Linux ntfs 适用于 Windows |
cachingMode |
Azure 数据磁盘主机缓存设置 (PremiumV2_LRS和UltraSSD_LRS仅支持 None 缓存模式) |
None、ReadOnly、ReadWrite |
否 | ReadOnly |
resourceGroup |
指定Azure磁盘的资源组 | 现有资源组名称 | 否 | 如果为空,驱动程序将使用与当前 AKS 群集相同的资源组名称 |
DiskIOPSReadWrite |
超级磁盘 或 高级 SSD v2 IOPS 功能(最小值:2 IOPS/GiB) | 100~160000 | 否 | 500 |
DiskMBpsReadWrite |
超级磁盘 或 高级 SSD v2 吞吐量功能(最低:0.032/GiB) | 1~2000 | 否 | 100 |
LogicalSectorSize |
超级磁盘的逻辑扇区大小(以字节为单位)。 |
512、4096 |
否 | 4096 |
tags |
Azure 磁盘标记 | 标记格式:key1=val1,key2=val2 |
否 | "" |
diskEncryptionSetID |
用于启用静态加密的磁盘加密集的资源 ID | 格式:/subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} |
否 | "" |
diskEncryptionType |
磁盘加密集的加密类型。 |
EncryptionAtRestWithCustomerKey (默认情况下), EncryptionAtRestWithPlatformAndCustomerKeys |
否 | "" |
writeAcceleratorEnabled |
Azure 磁盘上的写入加速器 |
true、false |
否 | "" |
networkAccessPolicy |
NetworkAccessPolicy 属性用于防止生成磁盘或快照的 SAS URI。 |
AllowAll、DenyAll、AllowPrivate |
否 | AllowAll |
diskAccessID |
用于在磁盘上配置专用终结点的 DiskAccess 资源的 Azure 资源 ID | 否 | `` | |
enableBursting |
启用按需突发超过磁盘预定的性能目标。 按需突发应仅应用于高级版磁盘,同时磁盘大小 > 512 GB。 不支持超级磁盘和共享磁盘。 默认情况下禁用突发功能。 |
true、false |
否 | false |
useragent |
用于客户使用情况归因的用户代理 | 否 | 生成的用户代理格式: driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID |
指定创建 Azure 磁盘的 Azure 订阅 ID。 | Azure 订阅 ID | 否 | 如果不为空,则必须提供 resourceGroup。 |
| --- | 以下参数仅适用于 v2 | --- | --- | --- |
maxShares |
磁盘允许的共享磁盘装载总数。 将该值设置为 2 或 2 以上可启用附件副本。 | 支持的值取决于磁盘大小。 有关支持的值,请参阅 “共享 Azure 托管磁盘 ”。 | 否 | 1 |
maxMountReplicaCount |
要维护的副本附件数。 | 该值必须在 [0..(maxShares - 1)] 范围内 |
否 | 如果 accessMode 为 ReadWriteMany,则默认值为 0。 否则默认值为 maxShares - 1 |
使用 Azure 磁盘创建 PVC
PVC 根据存储类自动分配存储。 在这种情况下,PVC 可以使用预先创建的存储类之一来创建标准或高级 Azure 托管磁盘。
创建一个名为
azure-pvc.yaml的文件,并在其中粘贴以下清单。 该声明请求名为azure-managed-disk、大小为 5 GB、具有 ReadWriteOnce 访问权限的磁盘。 managed-csi 被指定为存储类。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk spec: accessModes: - ReadWriteOnce storageClassName: managed-csi resources: requests: storage: 5Gi小窍门
若要创建使用 premium storage 的磁盘,请使用
storageClassName: managed-csi-premium,而不是 managed-csi。使用
kubectl apply命令创建 PVC,并指定 azure-pvc.yaml 文件:kubectl apply -f azure-pvc.yaml输出应类似于以下示例输出:
persistentvolumeclaim/azure-managed-disk created使用
kubectl describe pvc命令验证 PV 是否已准备好供 Pod 使用。kubectl describe pvc azure-managed-disk输出应类似于以下示例输出,其中显示 PV 处于 挂起 状态:
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]
创建将 PVC 与 Azure 磁盘配合使用的 Pod
创建一个名为
azure-pvc-disk.yaml的文件,并在其中粘贴以下清单。 此清单创建了一个基本的 NGINX Pod,它使用名为 azure-managed-disk 的持久卷声明,将 Azure 磁盘装载到路径/mnt/azure。 (对于 Windows Server 容器,请使用 Windows 路径约定指定mountPath,如 “D:”)。kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod 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 readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: azure-managed-disk使用
kubectl apply命令创建 pod。kubectl apply -f azure-pvc-disk.yaml输出应类似于以下示例输出:
pod/mypod created您现在有一个正在运行的 pod,Azure 磁盘已挂载在
/mnt/azure目录中。 使用kubectl describe命令检查 Pod 配置。kubectl describe pod mypod您的输出应该类似于以下示例输出,该输出显示名为 卷 的 volume 正在使用名为 azure-managed-disk 的 PVC。
[...] 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-12345678-9 Normal SuccessfulMountVolume 2m kubelet, aks-nodepool1-12345678-9 MountVolume.SetUp succeeded for volume "default-token-smm2n" Normal SuccessfulMountVolume 1m kubelet, aks-nodepool1-12345678-9 MountVolume.SetUp succeeded for volume "pvc-abc0d123-4e5f-67g8-901h-ijk23l45m678" [...]
Azure 磁盘的卷快照类参数
Azure 磁盘 CSI 驱动程序支持创建 持久卷的快照。 作为此功能的一部分,驱动程序可以根据参数中设置的值执行完整快照或快照。
下表提供了可用于使用 Azure 磁盘为卷快照定义自定义卷快照类的参数的详细信息:
| 名称 | 含义 | 可用值 | 必需 | 默认值 |
|---|---|---|---|---|
resourceGroup |
用于存储快照的资源组 | 现有资源组 | 否 | 如果未指定,快照将存储在源 Azure 磁盘相同的资源组中。 |
incremental |
创建 完整快照或增量快照 |
true、false |
否 | true |
tags |
Azure 磁盘 标记 | 标记格式:“key1=val1,key2=val2” | 否 | "" |
userAgent |
用于客户使用情况归因的用户代理 | 否 | 生成的用户代理格式为 driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID |
指定用于创建 Azure 磁盘的 Azure 订阅 ID | Azure 订阅 ID | 否 | 如果未为空, resourceGroup 则必须提供, incremental 必须设置为 false |
使用 Azure 磁盘从 PVC 创建卷快照
注释
在继续之前,请确保应用程序不会将数据写入源磁盘。
使用以下命令创建卷快照类:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml输出应类似于以下示例输出:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created使用以下命令从之前在本教程中创建的动态 PVC 创建
kubectl apply:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml输出应类似于以下示例输出:
volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created使用
kubectl describe以下命令验证是否已成功创建卷快照:kubectl describe volumesnapshot azuredisk-volume-snapshot输出应与下列示例输出相似,表明卷快照已准备好使用:
Name: azuredisk-volume-snapshot Namespace: default Labels: <none> Annotations: API Version: snapshot.storage.k8s.io/v1 Kind: VolumeSnapshot Metadata: Creation Timestamp: 2020-08-27T05:27:58Z Finalizers: snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection snapshot.storage.kubernetes.io/volumesnapshot-bound-protection Generation: 1 Resource Version: 714582 Self Link: /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot UID: 00aa00aa-bb11-cc22-dd33-44ee44ee44ee Spec: Source: Persistent Volume Claim Name: pvc-azuredisk Volume Snapshot Class Name: csi-azuredisk-vsc Status: Bound Volume Snapshot Content Name: snapcontent-00aa00aa-bb11-cc22-dd33-44ee44ee44ee Creation Time: 2020-08-31T05:27:59Z Ready To Use: true Restore Size: 10Gi Events: <none>
使用 Azure 磁盘,基于卷快照创建新的 PVC
可以基于卷快照创建新的 PVC。 在本部分中,我们使用从 “使用 Azure 磁盘创建 PVC 卷快照”部分 中的快照,并创建新的 PVC 和新的 Pod 进行消费。
使用以下命令
kubectl apply创建 PVC 和 Pod:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml输出应类似于以下示例输出:
persistentvolumeclaim/pvc-azuredisk-snapshot-restored created pod/nginx-restored created要验证它是否是之前创建的同一 PVC,需使用
kubectl exec命令检查卷的内容,并在 Pod 中通过ls命令执行。kubectl exec nginx-restored -- ls /mnt/azuredisk输出应该类似于以下示例输出,它显示了与原始 PVC 相同的内容,并包括在原始 PVC 中创建的
test.txt文件:lost+found outfile test.txt
使用 Azure 磁盘克隆卷
克隆的卷定义为现有 Kubernetes 卷的副本。 有关在 Kubernetes 中克隆卷的详细信息,请参阅 卷克隆的概念文档。
Azure 磁盘的 CSI 驱动程序支持卷克隆。 若要演示,请创建在本教程前面创建的动态 PVC 的 克隆卷 ,并创建 一个新的 Pod 来使用它。
使用以下命令
kubectl apply创建克隆的 PVC 和 Pod:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yaml输出应类似于以下示例输出:
persistentvolumeclaim/pvc-azuredisk-cloning created pod/nginx-restored-cloning created使用
kubectl exec命令检查卷的内容以在 Pod 中执行ls命令,验证克隆卷的内容是否与原始卷相同:kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk输出应该类似于以下示例输出,它显示了与原始 PVC 相同的内容,并包括在原始 PVC 中创建的
test.txt文件:lost+found outfile test.txt
使用 Azure 磁盘在不中断的情况下调整持久性卷的大小
注释
目前不支持收缩永久性卷。 尝试修改尺寸比当前大小更小的现有 PVC 会出现以下错误消息:
The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.
可以通过编辑 PVC 对象来请求更大的卷,指定更大的大小。 此项更改会触发为 PV 提供支持的基础卷的扩展。 永远不会创建新的 PV 来满足声明, 而是会调整现有卷的大小。
在 AKS 中,内置 managed-csi 存储类已经支持扩展,因此可以使用本教程前面创建的动态 PVC。 PVC 请求 10 GiB 永久性存储卷。
使用
kubectl exec命令检查卷的当前大小,然后在 Pod 中执行df -h命令:kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk输出应类似于以下示例输出,其中显示卷的当前大小为 10 Gi:
Filesystem Size Used Avail Use% Mounted on /dev/sdc 9.8G 42M 9.8G 1% /mnt/azuredisk使用
spec.resources.requests.storage命令增加kubectl patch字段,展开PVC。 在此示例中,我们将 PVC 的大小增加到 15 Gi:kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'输出应类似于以下示例输出:
persistentvolumeclaim/pvc-azuredisk patched使用
kubectl get pv命令检查 PV,以确认新大小是否已在 PV 中反映。kubectl get pv输出应类似于以下示例输出,其中显示 PV 的大小已调整为 15 Gi:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 15Gi RWO Delete Bound default/pvc-azuredisk managed-csi 2d2h (...)几分钟后,使用命令
kubectl get pvc检查 PVC,确认新大小已反映在 PVC 中。kubectl get pvc pvc-azuredisk输出应类似于以下示例输出,显示 PVC 的大小已调整为 15 Gi:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pvc-a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 15Gi RWO managed-csi 2d2h在 Pod 中执行
kubectl exec命令来运行df -h命令,确认磁盘大小已更新为新大小。kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk输出应类似于以下示例输出,其中显示卷的大小已更新为 15 Gi:
Filesystem Size Used Avail Use% Mounted on /dev/sdc 15G 46M 15G 1% /mnt/azuredisk
使用 Azure 高级 SSD 的按需扩展功能
按需磁盘突发模型允许在磁盘需求超过当前容量时进行突发。 每当磁盘突发时,此模型会产生额外的费用。 按需突发仅适用于大于 512 GiB 的高级 SSD。 有关每个磁盘预配的高级 SSD IOPS 和吞吐量的详细信息,请参阅 高级 SSD 大小。 或者,基于信用额度的突发是指磁盘只有在其信用桶中累积了突发信用时才会突发。 磁盘突发时,基于信用的突发机制不会产生额外的费用。 基于信用的突发仅适用于高级的 SSD,512 GiB 及更小,以及标准的 SSD,1024 GiB 及更小。 有关按需突发的详细信息,请参阅 按需突发。
重要
默认的 managed-csi-premium storage class 已禁用按需突发功能,并使用基于信用的突发模式。 基于默认 managed-csi-premium 存储类的持久性卷声明所动态创建的任何高级 SSD 也会禁用按需突发功能。
若要创建启用了 按需突发 的高级别 SSD 持久性卷,可以按照以下 YAML 模板创建一个新的存储类,并设置 enableBursting 参数为 true。 有关启用按需突发的更多信息,请参阅 按需突发。 有关构建支持按需突发的自定义存储类的详细信息,请参阅 创建可突发托管 CSI Premium 存储类。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
skuname: Premium_LRS
enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
将 Azure 磁盘与 Windows 容器配合使用
Azure 磁盘 CSI 驱动程序支持 Windows 节点和容器。 若要使用 Windows 容器,请按照 Windows 容器快速入门 添加 Windows 节点池。 拥有 Windows 节点池后,可以使用内置的存储类,例如 managed-csi。
使用以下命令部署一个基于 Windows 的有状态集,将时间戳保存到文件
data.txt中:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml输出应类似于以下示例输出:
statefulset.apps/busybox-azuredisk created请使用
data.txt命令在 pod 中执行kubectl exec命令以验证文件type的内容:kubectl exec -it statefulset-azuredisk-win-0 -- powershell -c "type c:/mnt/azuredisk/data.txt"输出应类似于以下示例输出,其中显示了正在保存到文件中
data.txt的时间戳:2020-08-27 08:13:41Z 2020-08-27 08:13:42Z 2020-08-27 08:13:44Z (...)
使用 Azure 磁盘创建静态 PV
以下部分提供了有关使用 Azure 磁盘创建静态 PV 的说明。 静态 PV 是管理员手动创建的持久卷。 此 PV 可供集群中的 Pods 使用。 若要使用静态 PV,请创建引用 PV 的 PVC,然后创建引用 PVC 的 Pod。
使用 Azure 磁盘的静态 PV 的存储类参数
下表包含可用于使用 Azure 磁盘为静态 PVC 定义自定义存储类的参数:
| 名称 | 含义 | 可用值 | 必需 | 默认值 |
|---|---|---|---|---|
volumeHandle |
Azure 磁盘 URI | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
是的 | 不适用 |
volumeAttributes.fsType |
文件系统类型 |
ext4、ext3、ext2、xfs和btrfs适用于 Linuxntfs 适用于 Windows |
否 |
ext4 适用于 Linux ntfs 适用于 Windows |
volumeAttributes.partition |
现有磁盘的分区号(仅在 Linux 上受支持) |
1、2、3 |
否 | 空(无分区)确保分区格式为: -part1 |
volumeAttributes.cachingMode |
磁盘主机缓存设置 |
None、ReadOnly、ReadWrite |
否 | ReadOnly |
创建 Azure 磁盘
创建用于 AKS 的 Azure 磁盘时,可以在节点资源组中创建磁盘资源。 此方法允许 AKS 集群访问和管理磁盘资源。 如果您改为在单独的资源组中创建磁盘,则必须为群集的 AKS 托管标识授予该磁盘资源组的 Contributor 角色。
使用
az aks show命令和参数--query nodeResourceGroup来标识节点资源组名称。az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv输出应类似于以下示例输出,其中显示了 AKS 群集的节点资源组名称:
MC_myResourceGroup_myAKSCluster_eastus使用
az disk create命令创建磁盘。 指定节点资源组名称和磁盘资源名称,例如 myAKSDisk。 以下示例创建 20 GiB 磁盘,并在创建磁盘后输出磁盘的 ID。 如果需要创建与 Windows Server 容器一起使用的磁盘,请添加--os-type windows参数以正确格式化该磁盘。az disk create \ --resource-group MC_myResourceGroup_myAKSCluster_eastus \ --name myAKSDisk \ --size-gb 20 \ --query id --output tsv注释
Azure 磁盘依据特定大小的 SKU 收取费用。 这些 SKU 的范围从 S4 或 P4 磁盘的 32 GiB 到 S80 或 P80 磁盘的 32 TiB(预览版)。 高级托管磁盘的吞吐量和 IOPS 性能取决于 SKU 和 AKS 群集中节点的实例大小。 请参阅 托管磁盘的定价和性能。
输出应类似于以下示例输出,其中显示了已创建的磁盘的资源 ID:
/subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
创建引用 Azure 磁盘的 PV 和 PVC
使用以下示例清单创建一个包含 PV 的 pv-azuredisk.yaml 文件。 使用上一步骤中的磁盘资源 ID 更新
volumeHandle。 对于 Windows Server 容器,请为参数指定fsType。apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: disk.csi.azure.com name: pv-azuredisk spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: managed-csi csi: driver: disk.csi.azure.com volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk volumeAttributes: fsType: ext4如“ 创建 Azure 磁盘”中所述,如果在单独的资源组中创建了该
volumeHandle磁盘,则需要向 AKS 群集的托管标识Contributor授予磁盘资源组的角色。使用以下示例清单创建一个包含使用 PV 的 PVC 的 pvc-azuredisk.yaml 文件:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi volumeName: pv-azuredisk storageClassName: managed-csi使用
kubectl apply以下命令创建 PV 和 PVC:kubectl apply -f pv-azuredisk.yaml kubectl apply -f pvc-azuredisk.yaml通过
kubectl get pvc命令验证 PVC 是否已成功创建并绑定到 PV。kubectl get pvc pvc-azuredisk输出应类似于以下示例输出,其中显示了 PVC 处于 绑定 状态:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
创建将 PVC 与 Azure 磁盘配合使用的 Pod
使用以下示例清单创建 azure-disk-pod.yaml 文件来引用您的 PVC。 (对于 Windows Server 容器,请使用 Windows 路径约定指定
mountPath,如 “D:”)。apiVersion: v1 kind: Pod metadata: name: mypod spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.azk8s.cn/oss/nginx/nginx:1.15.5-alpine name: mypod resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: azure mountPath: /mnt/azure volumes: - name: azure persistentVolumeClaim: claimName: pvc-azuredisk使用
kubectl apply命令应用配置并装载卷。kubectl apply -f azure-disk-pod.yaml
清理资源
使用以下 [
kubectl delete][kubectl-delete] 命令删除在本教程中创建的资源:# Remove the pod kubectl delete -f azure-pvc-disk.yaml # Remove the persistent volume claim kubectl delete -f azure-pvc.yaml