在 Azure Arc 启用的 AKS 中使用容器存储接口 (CSI) 文件驱动程序

> 适用于:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS、Azure 本地 AKS 版本 23H2

本文介绍如何使用容器存储接口(CSI)驱动程序来装载服务器消息块(SMB)或 NFS 共享,当多个节点需要并发访问由 Azure Arc 启用的 AKS 中相同的存储卷时。

AKS Arc 中的 CSI 概述

容器存储接口 (CSI) 是有关在 Kubernetes 上的容器化工作负载中公开任意块和文件存储系统的一套标准。 通过使用 CSI,Arc 启用的 AKS 可以编写、部署和迭代插件来公开新的存储系统。 使用 CSI 还可以改进 Kubernetes 中的现有存储系统,而无需修改核心 Kubernetes 代码并等待其发布周期。

AKS Arc 使用的磁盘和文件 CSI 驱动程序符合 CSI 规范

使用 AKS Arc 上的 CSI 存储驱动程序支持,可以使用:

  • 可用于创建 Kubernetes DataDisk 资源的 AKS Arc 磁盘。 这些装载为 ReadWriteOnce,因此它们一次只能用于单个 Pod。 对于可同时由多个 Pod 访问的存储卷,请使用 AKS Arc 文件

  • AKS Arc 文件,可用于将 SMB 或 NFS 共享装载到 Pod。 这些装载为 ReadWriteMany,因此可以在多个节点和 Pod 之间共享数据。 它们还可以根据 PVC(永久性卷声明)规范以 ReadWriteOnce 模式装载

使用 ReadWriteMany CSI 驱动程序的文件永久性卷

如果多个节点需要并发访问 AKS Arc 中的同一存储卷,则可以使用 CSI 驱动程序将 SMB 或 NFS 共享装载为 ReadWriteMany。 必须提前预配 SMB 或 NFS 共享。

使用 SMB 驱动程序

  1. 确保已部署 SMB 驱动程序。 使用 Azure 门户 或az aksarc create命令创建 Kubernetes 群集时,默认情况下会安装 SMB CSI 驱动程序。 如果使用 <a0/> 创建 Kubernetes 群集,则必须使用az aksarc update以下命令在此群集上启用 SMB 驱动程序:

    az aksarc update -n $aksclustername -g $resource_group --enable-smb-driver
    
  1. 运行以下命令,创建 Kubernetes 机密以存储访问 SMB 共享所需的凭据:

    kubectl create secret generic smbcreds --from-literal username=$username --from-literal password=$password --from-literal domain=$domain
    
  2. 使用以下清单创建存储类 kubectl ,以创建新的 SMB 存储类:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: smb-csi
    provisioner: smb.csi.akshci.com
    parameters:
       source: \\smb-server\share
       csi.storage.k8s.io/node-stage-secret-name: "smbcreds"
       csi.storage.k8s.io/node-stage-secret-namespace: "default"
    reclaimPolicy: Retain  # only Retain is supported
    volumeBindingMode: Immediate
    mountOptions:
      - dir_mode=0777
      - file_mode=0777
      - uid=1001
      - gid=1001
    

使用 NFS 驱动程序

  1. 确保已部署 NFS 驱动程序。 使用 Azure 门户 或az aksarc create命令创建 Kubernetes 群集时,默认安装 NFS CSI 驱动程序。 如果使用 创建 Kubernetes 群集 --disable-nfs-driver,则必须使用 az aksarc update 以下命令在此群集上启用 NFS 驱动程序:

    az aksarc update -n $aksclustername -g $resource_group --enable-nfs-driver
    
  1. 使用以下清单创建 NFS 存储类:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nfs-csi
    provisioner: nfs.csi.akshci.com
    parameters:
      server: nfs-server.default.svc.cluster.local # NFS server endpoint
      share: / # NFS share path
    reclaimPolicy: Retain
    volumeBindingMode: Immediate
    mountOptions:
      - hard
      - nfsvers=4.1
    

卸载 SMB 或 NFS 驱动程序

使用以下 Azure CLI 命令卸载 SMB 或 NFS 驱动程序:

az aksarc update -n $aksclustername -g $resource_group --disable-smb-driver
az aksarc update -n $aksclustername -g $resource_group --disable-nfs-driver

后续步骤