> 适用于:Windows Server 上的 AKS、Azure Local 上的 AKS
本文介绍如何使用容器存储接口 (CSI) 内置存储类来动态创建磁盘持久卷,以及如何在 Arc 启用的 AKS 中创建自定义存储类。
由 Arc 启用的 AKS 中的 CSI 概述
容器存储接口 (CSI) 是有关在 Kubernetes 上的容器化工作负载中公开任意块和文件存储系统的一套标准。 通过使用 CSI,Arc 启用的 AKS 可以编写、部署和迭代插件,以公开新的存储系统。 使用 CSI 还可以改进 Kubernetes 中的现有功能,而无需处理 Kubernetes 核心代码,然后等待其发布周期即可。
AKS Arc 使用的磁盘和文件 CSI 驱动程序是符合 CSI 规范的驱动程序。
AKS Arc 上的 CSI 存储驱动程序支持允许使用:
AKS Arc 磁盘,可用于创建 Kubernetes DataDisk 资源。 这些已装载为 ReadWriteOnce,因此它们一次只能用于单个 Pod。 对于可同时由多个 Pod 访问的存储卷,请使用 AKS Arc 文件。
可以使用 AKS Arc 文件将 SMB 或 NFS 共享挂载到 Pod。 这些已装载为 ReadWriteMany,因此你可以在多个节点和 Pod 之间共享数据。 它们还可以根据 PVC(永久性卷声明)规范装载为 ReadWriteOnce。
使用内置存储类动态创建磁盘持久卷
存储类用于定义使用永久性卷动态创建存储单位的方式。 有关如何使用存储类的详细信息,请参阅 Kubernetes 存储类。
在 AKS Arc 中,会默认创建一个默认的存储类,并使用 CSI 创建基于 VHDX 的卷。 回收策略确保在删除使用基础 VHDX 的持久卷时会删除该磁盘。 存储类还会将永久卷配置为可扩展的卷;你只需使用新的大小编辑永久卷声明即可。
要利用这个存储类,请创建一个 PVC 和一个引用并使用它的 Pod。 PVC 用于基于存储类自动预配存储。 PVC 可以使用预先创建的存储类或用户定义的存储类来创建所需大小的 VHDX。 创建 Pod 定义时,将指定 PVC 来请求所需的存储。
为磁盘创建自定义存储类
默认存储类适用于大多数常见情况。 但在某些情况下,你可能希望创建自己的存储类,以便在映射到特定性能层的特定位置存储 PV。
如果有 Linux 工作负荷 (Pod),则必须使用参数 fsType: ext4
来创建自定义存储类。 此要求适用于 Kubernetes 1.19 和 1.20 或更高版本。 以下示例显示了已定义 fsType
参数的自定义存储类定义:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: aks-hci-disk-custom
parameters:
blocksize: "33554432"
container: SqlStorageContainer
dynamic: "true"
group: clustergroup-summertime
hostname: TESTPATCHING-91.sys-sqlsvr.local
logicalsectorsize: "4096"
physicalsectorsize: "4096"
port: "55000"
fsType: ext4
provisioner: disk.csi.akshci.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
如果创建了自定义存储类,则可以指定要存储 PV 的位置。 如果基础基础结构是 Azure Local,那么此新位置可以是由高性能 SSD/NVMe 支持的卷,也可以是由 HDD 支持的成本优化卷。
创建自定义存储类需要两个步骤:
使用
stack-hci-vm storagepath
cmdlets 在 Azure Local 群集上创建、显示和列出存储路径。 有关创建存储路径的详细信息,请参阅存储路径。对于
$path
,创建名为$storagepathname
的存储路径;例如,C:\ClusterStorage\test-storagepath:az stack-hci-vm storagepath create --resource-group $resource_group --custom-___location $customLocationID --name $storagepathname --path $path
获取存储路径资源 ID:
$storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv
使用新的存储路径创建一个新的自定义存储类。
创建名为 sc-aks-hci-disk-custom.yaml 的文件,然后从以下 YAML 文件中复制清单。 除了新的
container
外,存储类与默认存储类相同。 将上一步创建的storage path ID
用于container
。 对于group
和hostname
,通过运行kubectl get storageclass default -o yaml
来查询默认存储类,然后使用指定的值:kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: aks-hci-disk-custom provisioner: disk.csi.akshci.com parameters: blocksize: "33554432" container: <storage path ID> dynamic: "true" group: <e.g clustergroup-akshci> # same as the default storageclass hostname: <e.g. ca-a858c18c.ntprod.contoso.com> # same as the default storageclass logicalsectorsize: "4096" physicalsectorsize: "4096" port: "55000" fsType: ext4 # refer to the note above to determine when to include this parameter allowVolumeExpansion: true reclaimPolicy: Delete volumeBindingMode: Immediate
使用 kubectl apply 命令创建存储类,并指定 sc-aks-hci-disk-custom.yaml 文件:
$ kubectl apply -f sc-aks-hci-disk-custom.yaml storageclass.storage.k8s.io/aks-hci-disk-custom created