> 适用于:Windows Server 上的 AKS、Azure Local 上的 AKS
本文介绍如何使用容器存储接口(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 驱动程序
确保已部署 SMB 驱动程序。 使用
az aksarc create
命令创建 Kubernetes 群集时,默认情况下会安装 SMB CSI 驱动程序。 如果使用 Azure 门户、Azure 资源管理器(ARM)模板或 Terraform 创建 AKS 群集,则默认情况下不会安装 SMB CSI 驱动程序。 必须在 AKS 群集上启用 SMB 驱动程序。 用于更新现有 AKS 群集并启用 SMB 的等效 Azure CLI 命令为:az aksarc update -n $aksclustername -g $resource_group --enable-smb-driver
运行以下命令,创建 Kubernetes 机密以存储访问 SMB 共享所需的凭据:
kubectl create secret generic smbcreds --from-literal username=$username --from-literal password=$password --from-literal domain=$domain
使用以下清单创建存储类
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 驱动程序
确保已部署 SMB 驱动程序。 使用
az aksarc create
命令创建 Kubernetes 群集时,默认情况下会安装 SMB CSI 驱动程序。 如果使用 Azure 门户、Azure 资源管理器(ARM)模板或 Terraform 创建 AKS 群集,则默认情况下不会安装 SMB CSI 驱动程序。 必须在 AKS 群集上启用 SMB 驱动程序。 用于更新现有 AKS 群集并启用 SMB 的等效 Azure CLI 命令为:az aksarc update -n $aksclustername -g $resource_group --enable-nfs-driver
使用以下清单创建 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