容器存储接口 (CSI) 是一种用于在 Kubernetes 上的容器化工作负载中公开各种块存储和文件存储系统的标准。 使用 CSI 时,Azure Kubernetes 服务 (AKS)可以编写、部署和循环访问插件,以公开 Kubernetes 中的新存储系统或改进现有存储系统,而无需触摸核心 Kubernetes 代码并等待其发布周期。
在 AKS 上,CSI 存储驱动程序的支持使您能够本地化使用 Azure 磁盘、Azure 文件 或 Azure Blob 存储,作为在 AKS 上运行的应用程序的持久存储。
小窍门
如果需要完全托管的解决方案来对数据进行块级访问,请考虑使用 [Azure 容器存储][azure-container-storage] 而不是 CSI 驱动程序。 Azure容器存储与 Kubernetes 集成,以便可以为 Kubernetes 群集上的有状态应用程序动态预配永久性卷。
重要
从 Kubernetes 版本 1.21 开始,AKS 默认使用 CSI 驱动程序并启用 CSI 迁移。 使用树内 kubernetes.io/azure-disk 和 kubernetes.io/azure-file 驱动程序的现有持久卷在 CSI 迁移期间将继续正常工作。
树内驱动程序 是属于核心 Kubernetes 代码的存储驱动程序,而 CSI 驱动程序是插件。
从 Kubernetes 1.26 版本开始,AKS 不再支持通过 Azure 磁盘和 Azure 文件的树内驱动程序创建卷。 迁移到相应的 disk.csi.azure.com 和 file.csi.azure.com CSI 驱动程序。 若要查看存储类的迁移选项,请参阅 从树中迁移到 CSI 驱动程序。
关于 Azure Disks CSI 驱动程序
Azure磁盘 CSI 驱动程序是 AKS 用来管理Azure磁盘资源的生命周期的 CSI 规范兼容驱动程序。 使用 Azure 磁盘 CSI 驱动程序,可以创建 Kubernetes DataDisk 资源。 磁盘可以使用Azure 高级存储(由高性能 SSD 提供支持)或Azure标准存储(由常规 HDD 或标准 SSD 提供支持)。 对于大多数生产和开发工作负荷,请使用高级存储。 Azure 磁盘被挂载为 ReadWriteOnce,并且只能被 AKS 中的单个节点使用。 对于可同时由多个节点访问的存储卷,请使用Azure 文件存储。
Azure 磁盘 CSI 驱动程序的功能
除了树状驱动程序功能之外,Azure磁盘 CSI 驱动程序还支持以下功能:
- 对并发磁盘附加和分离操作期间的性能进行了改进。
- 树中驱动程序以串行方式附加或分离磁盘,而 CSI 驱动程序分批附加或分离磁盘。 当多个磁盘连接到一个节点时,性能会显著改善。
- 高级 SSD v1 和 v2。
-
PremiumV2_LRS仅支持None缓存模式。
-
- 区域冗余存储(ZRS)磁盘支持。
-
Premium_ZRS,StandardSSD_ZRS支持磁盘类型。 ZRS 磁盘可以调度到区域节点或非区域节点上,没有磁盘卷需要与给定节点在同一区域的限制。 如需获取更多信息,包括支持哪些区域,请参阅 托管磁盘的区域冗余存储。
-
- 创建 永久性卷的快照。
- 创建 卷克隆。
- 在不停机的情况下调整永久性卷的大小。
注意
根据所使用的虚拟机(VM)SKU,Azure 磁盘 CSI 驱动程序可能存在每个节点的卷数限制。 对于一些功能强大的 VM(例如 16 个核心),每个节点的限制为 64 个卷。 若要确定每个 VM SKU 的限制,请查看所提供的每个 VM SKU 的“最大数据磁盘数”列。 有关提供的 VM SKU 及其相应的详细容量限制的列表,请参阅常规用途虚拟机大小。
关于 Azure 文件存储 CSI 驱动程序
Azure 文件存储 CSI 驱动程序是 AKS 用来管理Azure文件共享生命周期的 CSI 规范兼容驱动程序。 使用 Azure 文件存储 CSI 驱动程序,可以将由 Azure 存储帐户支持的 SMB 3.0/3.1 共享挂载到 Pods。 使用Azure 文件存储,可以跨多个节点和 Pod 共享数据。 Azure 文件存储可以使用由常规 HDD 支持的Azure标准存储,也可以使用由高性能 SSD 支持的Azure高级存储。
关于 Azure Blob 存储 CSI 驱动程序
Azure Blob 存储 CSI 驱动程序是 AKS 用来管理 Azure Blob 存储生命周期的 CSI 规范兼容驱动程序。 使用 Azure Blob 存储 CSI 驱动程序,可以将 blob 存储(或对象存储)作为文件系统装载到容器或 Pod 中。 使用 Blob 存储,群集支持使用大型非结构化数据集的应用程序,例如日志文件数据、图像或文档、HPC 等。 此外,如果将数据引入 Azure Data Lake 存储,则可以在 AKS 中直接装载和使用它,而无需配置另一个临时文件系统。
将 Azure Blob 存储作为文件系统装载到容器或 Pod 中时,它使你可以将 Blob 存储用于处理大量非结构化数据的多个应用程序,例如:
- 日志文件数据
- 图像、文档和流式传输视频或音频
- 灾难恢复数据
应用程序可以使用 BlobFuse 或网络文件系统 (NFS) 3.0 协议访问对象存储上的数据。 在引入 Azure Blob 存储 CSI 驱动程序之前,唯一的选择是手动安装不受支持的驱动程序,以便从 AKS 上运行的应用程序访问 Blob 存储。
Azure Blob 存储 CSI 驱动程序的功能
Azure Blob 存储 CSI 驱动程序提供以下功能:
| 功能 / 特点 | Details |
|---|---|
| 内置存储类 |
azureblob-fuse-premium 和 azureblob-nfs-premium |
| 挂载方法 | BlobFuse |
| 网络协议 | 网络文件系统 (NFS) 3.0 |
先决条件
- 需要安装并配置Azure CLI版本 2.42 或更高版本。 使用
az --version命令查找版本。 若要安装或升级,请参阅 Install Azure CLI。 - 如果在群集上安装开源 CSI 存储驱动程序,请在启用Azure存储 CSI 驱动程序之前将其卸载。
如果以前安装了 CSI Blob 存储开源驱动程序,请遵循 此处 的步骤访问 Azure Blob 存储。
注意
如果在安装开源驱动程序期间未启用 blobfuse-proxy,则开源驱动程序的卸载会中断现有的 blobfuse 装载。 但是,NFS 装载仍然不受影响。
- 若要为 AKS 强制执行 Azure Policy 的 策略定义Kubernetes 群集应使用容器存储接口(CSI)驱动程序
StorageClass,需要在群集上启用 Azure Policy 插件。 若要在现有群集上启用,请参阅适用于 Kubernetes 的 Learn Azure Policy。
磁盘加密支持的场景
CSI 存储驱动程序支持以下方案:
- 使用 客户管理的密钥加密托管 AKS作系统(OS)和应用程序数据的 Azure 存储磁盘。
在现有 AKS 群集上启用Azure磁盘 CSI 存储驱动程序
使用az aks update命令和--enable-disk-driver参数在现有群集上启用Azure磁盘CSI驱动程序。 以下示例在资源组
注意
可以与 Azure 磁盘 CSI 驱动程序一起启用 快照控制器,从而创建持久卷的快照。 若要启用快照控制器,请在 --enable-snapshot-controller 命令中包含参数。
az aks update --name myAKSCluster --resource-group myResourceGroup --enable-disk-driver
启用Azure磁盘 CSI 驱动程序需要几分钟时间。 命令执行完毕后,您可以通过检查输出中 diskCSIDriver 是否设置为 true 来确认驱动程序已启用。 例如:
"storageProfile": {
"diskCSIDriver": {
"enabled": true
},
在现有 AKS 群集上启用 Azure 文件存储 CSI 存储驱动程序
在现有群集上使用命令 az aks update 和参数 --enable-file-driver 启用 Azure 文件 CSI 驱动程序。 以下示例在资源组
注意
可以与 Azure 文件存储 CSI 驱动程序同时启用 快照控制器,这样您就可以创建持久卷的快照。 若要启用快照控制器,请在 --enable-snapshot-controller 命令中包含参数。
az aks update --name myAKSCluster --resource-group myResourceGroup --enable-file-driver
启用 Azure 文件存储 CSI 驱动程序需要几分钟时间。 命令完成后,可以通过检查输出中 fileCsiDriver 是否设置为 true 来验证驱动程序是否已启用。 例如:
"storageProfile": {
"fileCsiDriver": {
"enabled": true
},
在现有 AKS 群集上启用 Azure Blob 存储 CSI 存储驱动程序
在现有群集上使用带有参数 az aks update 的 --enable-blob-driver 命令启用 Azure Blob 存储 CSI 驱动程序。 以下示例在资源组
az aks update --name myAKSCluster --resource-group myResourceGroup --enable-blob-driver
启用 Azure Blob 存储 CSI 驱动程序需要几分钟时间。 命令完成后,可以通过检查输出中 blobCsiDriver 是否设置为 true 来验证驱动程序是否已启用。 例如:
"storageProfile": {
"blobCsiDriver": {
"enabled": true
},
在现有 AKS 群集上禁用Azure磁盘 CSI 存储驱动程序
在现有群集中使用 az aks update 命令和 --disable-disk-driver 参数禁用 Azure 磁盘 CSI 驱动程序。 以下示例在资源组
注意
可以通过在命令中包含参数来禁用快照控制器--disable-snapshot-controller。
az aks update --name myAKSCluster --resource-group myResourceGroup --disable-disk-driver
在现有 AKS 群集上禁用 Azure 文件存储 CSI 存储驱动程序
使用 az aks update 命令及参数 --disable-file-driver 在现有群集上禁用 Azure 文件存储 CSI 驱动程序。 以下示例在资源组
注意
可以通过在命令中包含参数来禁用快照控制器--disable-snapshot-controller。
az aks update --name myAKSCluster --resource-group myResourceGroup --disable-file-driver
在现有 AKS 群集上禁用 Azure Blob 存储 CSI 存储驱动程序
使用 az aks update 命令和 --disable-blob-driver 参数在现有群集上禁用 Azure Blob 存储 CSI 驱动程序。 以下示例在资源组
az aks update --name myAKSCluster --resource-group myResourceGroup --disable-blob-driver
注意
删除 CSI 卷时,建议删除相应的 PersistentVolumeClaim 对象,而不是 PersistentVolume 对象。 CSI 驱动程序中的外部预配程序对删除 PersistentVolumeClaim 做出反应。 根据 PVC 回收策略,配置程序对 CSI 卷驱动程序命令发出 DeleteVolume 调用以删除卷。 然后删除 PersistentVolume 对象。
后续步骤
创建并使用 Azure Kubernetes 服务 (AKS) 中的持久性卷 (PV) 和 Azure 磁盘