在 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 存储驱动程序,请根据存储系统包括以下参数之一:

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 存储驱动程序,请根据存储系统包括以下参数之一:

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.cnfile.csi.azure.com。 若要查看你的存储类的迁移选项,并升级群集以使用 Azure 磁盘和 Azure 文件存储 CSI 驱动程序,请参阅从树内驱动程序迁移到 CSI 驱动程序

如果已创建树内驱动程序存储类,则这些存储类将继续工作,因为 CSI 迁移是在将群集升级到 1.21.x 后启用的。 如果要使用 CSI 功能,则需要执行迁移。

后续步骤