通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Kubernetes 服务(AKS)上使用容器存储接口 (CSI) 驱动程序

容器存储接口 (CSI) 是用于在 Kubernetes 中为容器化工作负载提供任意块和文件存储系统的标准。 使用 CSI 时,Azure Kubernetes 服务(AKS)可以编写、部署和循环访问插件,以在 Kubernetes 中公开新的或改进现有存储系统,而无需触摸核心 Kubernetes 代码并等待其发布周期。

借助 AKS 上的 CSI 存储驱动程序支持,可以原生使用 Azure 磁盘Azure 文件Azure Blob 存储 作为在 AKS 上运行的应用程序的持久性存储。

提示

如果需要完全托管的解决方案来对数据进行块级访问,请考虑使用 Azure 容器存储,而不是 CSI 驱动程序。 Azure 容器存储与 Kubernetes 集成,支持动态和自动预配永久性卷。 Azure 容器存储支持将 Azure 磁盘、临时磁盘和 Azure 弹性 SAN(预览版)作为备份存储,为 Kubernetes 群集上运行的有状态应用程序提供了灵活性和可伸缩性。

重要

从 Kubernetes 版本 1.26 开始,内置的永久性卷类型 kubernetes.io/azure-diskkubernetes.io/azure-file 被弃用,将不再受支持。 树内驱动程序 是指存储驱动程序,这些驱动程序是与 CSI 驱动程序(即插件)相反的核心 Kubernetes 代码的一部分。

不计划在弃用后删除这些驱动程序,但应迁移到相应的 CSI 驱动程序 disk.csi.azure.comfile.csi.azure.com。 若要查看你的存储类的迁移选项,并升级群集以使用 Azure 磁盘和 Azure 文件存储 CSI 驱动程序,请参阅从树内驱动程序迁移到 CSI 驱动程序

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

关于 Azure 磁盘 CSI 驱动程序

Azure 磁盘 CSI 驱动程序是 AKS 用来管理 Azure 磁盘资源的生命周期的 符合 CSI 规范的驱动程序。 使用 Azure 磁盘 CSI 驱动程序,可以创建 Kubernetes DataDisk 资源。 Azure 磁盘可以使用由高性能 SSD 支持的 Azure 高级存储,也可以使用由普通 HDD 或标准 SSD 支持的 Azure 标准存储。 对于大部分生产和开发工作负载,请使用高级存储。 Azure 磁盘以 ReadWriteOnce 的形式装载,因此仅可用于 AKS 中的一个节点。 对于可以同时由多个节点访问的存储卷,请使用 Azure 文件。

Azure 磁盘的 CSI 驱动程序功能

除了树状驱动程序功能外,Azure 磁盘 CSI 驱动程序还支持以下功能:

  • 对并发磁盘附加和分离操作期间的性能进行了改进。
    • 树中驱动程序以串行方式附加或分离磁盘,而 CSI 驱动程序分批附加或分离磁盘。 当多个磁盘连接到一个节点时,性能会显著改善。
  • 高级 SSD v1 和 v2。
    • PremiumV2_LRS 仅支持 None 缓存模式。
  • 区域冗余存储(ZRS)磁盘支持。
    • Premium_ZRSStandardSSD_ZRS 支持磁盘类型。 ZRS 磁盘可以调度到可用区节点或非可用区节点,而不受磁盘卷必须与给定节点位于同一可用区的限制。 有关详细信息,包括支持哪些区域,请参阅 托管磁盘的区域冗余存储
  • 创建 永久性卷的快照
  • 创建 卷克隆
  • 在不停机的情况下调整永久性卷的大小

注意

根据所使用的虚拟机(VM)SKU,Azure Disk CSI 驱动程序可能存在每节点的卷数量限制。 对于一些功能强大的 VM(例如 16 个核心),每个节点的限制为 64 个卷。 若要确定每个 VM SKU 的限制,请查看所提供的每个 VM SKU 的“最大数据磁盘数”列。 有关提供的 VM SKU 及其相应的详细容量限制的列表,请参阅常规用途虚拟机大小

关于 Azure 文件 CSI 驱动程序

Azure 文件 CSI 驱动程序是 AKS 用来管理 Azure 文件共享生命周期的 符合 CSI 规范的驱动程序。 使用 Azure Files CSI 驱动程序时,可以将由 Azure 存储帐户支持的 SMB 3.0/3.1 共享挂载到 Pod。 使用 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 驱动程序的特性

  • 两个内置存储类: azureblob-fuse-premium_ 和 azureblob-nfs-premium
  • BlobFuse 和网络文件系统 (NFS) 版本 3.0 协议。

先决条件

  • 需要安装和配置 Azure CLI 2.42 或更高版本。 使用 az --version 命令查找版本。 若要安装或升级,请参阅安装 Azure CLI
  • 如果你的集群上安装了开源 CSI 存储驱动程序,请在启用 Azure 存储 CSI 驱动程序之前将其卸载。
  • 如果安装了 CSI Blob 存储开源驱动程序,以便从群集访问 Azure Blob 存储,请按照此处的步骤操作。

    注意

    如果在安装开源驱动程序期间未启用 blobfuse-proxy,则开源驱动程序的卸载会中断现有的 blobfuse 装载。 但是,NFS 装载仍然不受影响。

  • 要强制执行 AKS 的 Azure Policy 策略定义Kubernetes 群集应使用容器存储接口(CSI)驱动程序StorageClass,需要在群集中启用 Azure Policy 加载项。 若要在现有群集上启用,请参阅 Learn Azure Policy for Kubernetes

磁盘加密支持的场景

CSI 存储驱动程序支持以下方案:

在现有 AKS 群集上启用 Azure 磁盘 CSI 存储驱动程序

  • 在现有群集上,使用 [az aks update][az-aks-update] 命令和 --enable-disk-driver 参数启用 Azure 磁盘 CSI 驱动程序。 以下示例在资源组 myResourceGroup 中名为 myAKSCluster 的现有群集上启用 Azure 磁盘 CSI 驱动程序:

    注意

    可以在启用 Azure 磁盘 CSI 驱动程序的同时,启用 快照控制器 ,以便创建持久卷的快照。 若要启用快照控制器,请在 --enable-snapshot-controller 命令中包含参数。

    az aks update --name myAKSCluster --resource-group myResourceGroup --enable-disk-driver
    

    启用 Azure 磁盘 CSI 驱动程序需要几分钟时间。 命令完成后,可以通过检查输出中 blobCsiDriver 是否设置为 true 来验证驱动程序是否已启用。 例如:

    "storageProfile": {
        "blobCsiDriver": {
          "enabled": true
        },
    

在现有 AKS 群集上启用 Azure 文件 CSI 存储驱动程序

  • 使用 --enable-file-driver 参数,通过 [az aks update][az-aks-update] 命令在现有群集上启用 Azure Files CSI 驱动程序。 以下示例在资源组 myResourceGroup 中名为 myAKSCluster 的现有群集上启用 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 存储驱动程序

  • 使用参数 --enable-blob-driver,通过 [az aks update][az-aks-update] 命令在现有集群上启用 Azure Blob 存储 CSI 驱动。 以下示例在资源组 myResourceGroup 中名为 myAKSCluster 的现有群集上启用 Azure Blob 存储 CSI 驱动程序:

    注意

    可以在启用 Azure Blob 存储 CSI 驱动程序的同时启用 快照控制器,从而为您的持久卷创建快照。 若要启用快照控制器,请在 --enable-snapshot-controller 命令中包含参数。

    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][az-aks-update] 命令和 --disable-disk-driver 参数在已有群集上禁用 Azure 磁盘 CSI 驱动程序。 以下示例在资源组 myResourceGroup 中名为 myAKSCluster 的现有群集上禁用 Azure 磁盘 CSI 驱动程序:

    注意

    可以通过在命令中包含参数来禁用快照控制器--disable-snapshot-controller

    az aks update --name myAKSCluster --resource-group myResourceGroup --disable-disk-driver
    

在现有 AKS 群集上禁用 Azure 文件 CSI 存储驱动程序

  • 使用 --disable-file-driver 参数,通过 [az aks update][az-aks-update] 命令在现有群集上禁用 Azure Files CSI 驱动程序。 以下示例在资源组 myResourceGroup 中名为 myAKSCluster 的现有群集上禁用 Azure 文件 CSI 驱动程序:

    注意

    可以通过在命令中包含参数来禁用快照控制器--disable-snapshot-controller

    az aks update --name myAKSCluster --resource-group myResourceGroup --disable-file-driver
    

在现有 AKS 群集上禁用 Azure Blob 存储 CSI 存储驱动程序

  • 在现有群集上,使用 [az aks update][az-aks-update] 命令并加上 --disable-blob-driver 参数,禁用 Azure Blob 存储 CSI 驱动程序。 以下示例在资源组 myResourceGroup 中名为 myAKSCluster 的现有群集上禁用 Azure Blob 存储 CSI 驱动程序:

    注意

    可以通过在命令中包含参数来禁用快照控制器--disable-snapshot-controller

    az aks update --name myAKSCluster --resource-group myResourceGroup --disable-blob-driver
    

注意

删除 CSI 卷时,建议删除对应的 PersistentVolumeClaim 对象,而不是 PersistentVolume 对象。 CSI 驱动程序中的外部预配程序对删除 PersistentVolumeClaim 做出反应。 根据 PVC 的回收策略,预配程序会针对 CSI 卷驱动程序发出 DeleteVolume 调用以删除该卷。 然后删除 PersistentVolume 对象。

后续步骤