Compartir a través de

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

容器存储接口 (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.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 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_ZRSStandardSSD_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 驱动程序的功能

  • 两个内置存储类: 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

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

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

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

  • 使用带有 az aks update 参数的 [--enable-blob-driver][az-aks-update] 命令在现有群集上启用 Azure Blob 存储 CSI 驱动程序。 以下示例在资源组 myResourceGroup1 中名为 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 参数的 [--disable-disk-driver][az-aks-update] 命令在现有群集上禁用Azure磁盘 CSI 驱动程序。 以下示例在资源组 myResourceGroup1 中禁用名为 myAKSCluster 的现有群集上的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][az-aks-update] 命令在现有群集上禁用 Azure 文件存储 CSI 驱动程序。 以下示例在资源组 myResourceGroup1 中禁用名为 myAKSCluster 的现有群集上的 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][az-aks-update] 命令在现有群集上禁用 Azure Blob 存储 CSI 驱动程序。 以下示例在资源组 myResourceGroup1 中名为 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 对象。

后续步骤

创建并使用 Azure Kubernetes 服务 (AKS) 中的持久性卷 (PV) 和 Azure 磁盘

在 Azure Kubernetes 服务 (AKS) 中使用 Azure 文件存储 创建和使用持久卷 (PV)