在 Azure Kubernetes 服务 (AKS) 中启用容器存储接口 (CSI) 驱动程序
容器存储接口 (CSI) 是有关在 Kubernetes 上的容器化工作负载中公开任意块和文件存储系统的一套标准。 Azure Kubernetes 服务 (AKS) 可以采用 CSI 来编写、部署和迭代插件,以在 Kubernetes 中公开新的或改进现有的存储系统,而无需改动核心 Kubernetes 代码并等待经历代码发布周期。
借助 AKS 中的 CSI 存储驱动程序支持,可在本地使用以下功能:
- Azure 磁盘可用来创建 Kubernetes DataDisk 资源。 Azure 磁盘可以使用由高性能 SSD 支持的 Azure 高级存储,也可以使用由普通 HDD 或标准 SSD 支持的 Azure 标准存储。 对于大部分生产和开发工作负载,请使用高级存储。 Azure 磁盘以 ReadWriteOnce 的形式装载,因此仅可用于 AKS 中的一个节点。 对于可以同时由多个节点访问的存储卷,请使用 Azure 文件。
- Azure 文件存储可用于将 Microsoft Azure 存储账户支持的 SMB 3.0/3.1 共享装载到 Pod。 使用 Azure 文件存储可在多个节点和 Pod 之间共享数据。 Azure 文件存储可以使用由普通 HDD 支持的 Azure 标准存储,也可以使用由高性能 SSD 支持的 Azure 高级存储。
- Azure Blob 存储可用于将 Blob 存储(或对象存储)作为文件系统装载到容器或 Pod 中。 借助 Blob 存储,群集可支持使用大型非结构化数据集(例如日志文件数据、图像或文档、HPC 等)的应用程序。 此外,如果将数据引入 Azure Data Lake 存储,则可以直接在 AKS 中装载并使用它,而无需配置另一个临时文件系统。
先决条件
- 需要安装和配置 Azure CLI 2.42 或更高版本。 运行
az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 - 如果你的集群上安装了开源 CSI 存储驱动程序,请在启用 Azure 存储 CSI 驱动程序之前将其卸载。
- 若要针对 AKS 策略定义强制实施 Azure Policy,Kubernetes 群集应使用容器存储接口 (CSI) 驱动程序 StorageClass,需要在新的群集和现有群集上启用 Azure Policy 加载项。 对于现有群集,请参阅了解适用于 Kubernetes 的 Azure Policy 以启用它。
磁盘加密支持的方案
CSI 存储驱动程序支持以下方案:
- 使用存储在不同 Microsoft Entra 租户中的 Azure Key Vault [使用客户管理的密钥对托管磁盘进行加密][encrypt-managed-disks-customer-managed-keys]。
- 使用客户管理的密钥加密托管 AKS OS 和应用程序数据的 Azure 存储磁盘。
在已有群集上启用 CSI 存储驱动程序
若要在新群集上启用 CSI 存储驱动程序,请根据存储系统包括以下参数之一:
- 使用
--enable-disk-driver
,你可以启用 Azure 磁盘 CSI 驱动程序。 - 借助
--enable-file-driver
,你可以启用 Azure 文件存储 CSI 驱动程序。 - 使用
--enable-blob-driver
,你可以启用 Azure Blob 存储 CSI 驱动程序。 --enable-snapshot-controller
允许启用 snapshot controller。
az aks update --name myAKSCluster --resource-group myResourceGroup --enable-disk-driver --enable-file-driver --enable-blob-driver --enable-snapshot-controller
可能需要几分钟时间才能完成此操作。 完成后,你应会在输出中看到在群集上所启用驱动程序的状态。 以下示例呈现了启用 Blob 存储 CSI 驱动程序时用于指明结果的部分:
"storageProfile": {
"blobCsiDriver": {
"enabled": true
},
在新群集或现有群集上禁用 CSI 存储驱动程序
若要在新群集上禁用 CSI 存储驱动程序,请根据存储系统包括以下参数之一:
- 借助
--disable-disk-driver
,你可以禁用 Azure 磁盘 CSI 驱动程序。 - 借助
--disable-file-driver
,你可以禁用 Azure 文件存储 CSI 驱动程序。 - 使用
--disable-blob-driver
,你可以禁用 Azure Blob 存储 CSI 驱动程序。 --disable-snapshot-controller
允许禁用 snapshot controller。
az aks create \
--name myAKSCluster \
--resource-group myResourceGroup \
--disable-disk-driver \
--disable-file-driver \
--disable-blob-driver \
--disable-snapshot-controller \
--generate-ssh-keys
若要在现有群集上禁用 CSI 存储驱动程序,请使用前面列出的参数之一,具体取决于存储系统:
az aks update \
--name myAKSCluster \
--resource-group myResourceGroup \
--disable-disk-driver \
--disable-file-driver \
--disable-blob-driver \
--disable-snapshot-controller
注意
删除 CSI 卷时,建议删除相应的 PersistentVolumeClaim 对象,而不是 PersistentVolume 对象。 CSI 驱动程序中的外部预配程序将对删除 PersistentVolumeClaim 做出响应,并根据其回收策略,针对 CSI 卷驱动程序命令发出 DeleteVolume 调用来删除卷。 然后删除 PersistentVolume 对象。
将自定义的树内存储类迁移到 CSI
从 Kubernetes 版本 1.26 开始,树内永久性卷类型 kubernetes.io/azure-disk 和 kubernetes.io/azure-file 被弃用,不再受支持。 “树中驱动程序”是指包含在核心 Kubernetes 代码中的存储驱动程序,而不是 CSI 驱动程序(插件)。
虽然尚未计划在弃用这些驱动程序后移除它们,但你应迁移到相应的 CSI 驱动程序 disk.csi.azure.cn 和 file.csi.azure.com。 若要查看你的存储类的迁移选项,并升级群集以使用 Azure 磁盘和 Azure 文件存储 CSI 驱动程序,请参阅从树内驱动程序迁移到 CSI 驱动程序。
如果已创建树内驱动程序存储类,则这些存储类将继续工作,因为 CSI 迁移是在将群集升级到 1.21.x 后启用的。 如果要使用 CSI 功能,则需要执行迁移。
后续步骤
- 若要将 CSI 驱动器用于 Azure 磁盘,请参阅通过 CSI 驱动程序使用 Azure 磁盘。
- 若要将 CSI 驱动器用于 Azure 文件存储,请参阅通过 CSI 驱动程序使用 Azure 文件存储。
- 若要将 CSI 驱动程序用于 Azure Blob 存储,请参阅将 Azure Blob 存储与 CSI 驱动程序配合使用
- 有关存储最佳做法的详细信息,请参阅有关 Azure Kubernetes 服务中存储和备份的最佳做法。
- 有关 CSI 迁移的详细信息,请参阅从 Kubernetes 树内卷迁移到 CSI 卷。