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

> 适用于:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS、Azure Stack HCI 上的 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 存储驱动程序支持允许你使用:

  • AKS Arc 磁盘,可用于创建 Kubernetes DataDisk 资源。 这些磁盘以 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 门户 或 命令创建 Kubernetes 群集时,az aksarc create会安装 SMB CSI 驱动程序。 如果使用 创建 Kubernetes 群集 --disable-smb-driver,则必须使用 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

后续步骤