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

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

本文介绍如何使用容器存储接口(CSI)内置存储类在 Arc 启用的 AKS 中动态创建磁盘永久性卷和创建自定义存储类。

Arc 启用的 AKS 中的 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 模式装载

使用内置存储类动态创建磁盘永久性卷

存储类用于定义使用永久性卷动态创建存储单位的方式。 有关如何使用存储类的详细信息,请参阅 Kubernetes 存储类

在 AKS Arc 中 ,默认 存储类默认创建,并使用 CSI 创建 VHDX 支持的卷。 回收策略可确保在删除使用该基础 VHDX 的永久性卷时删除基础 VHDX。 存储类还会将永久卷配置为可扩展的卷,你只需使用新的大小编辑永久卷声明即可。

若要利用此存储类,请创建一个 PVC 以及引用和使用它的相应 Pod。 PVC 用于基于存储类自动预配存储。 PVC 可以使用预先创建的存储类之一或用户定义的存储类来创建所需大小的 VHDX。 创建 Pod 定义时,将指定 PVC 来请求所需的存储。

为磁盘创建自定义存储类

默认存储类适用于最常见的方案。 但在某些情况下,你可能希望创建自己的存储类,以用于在映射到特定性能层的特殊位置存储 PV。

如果你有 Linux 工作负载 (Pod),则必须使用参数 fsType: ext4 创建自定义存储类。 此要求适用于 Kubernetes 版本 1.19 和 1.20 或更高版本。 以下示例显示了一个自定义存储类定义,其中 fsType 定义了参数:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aks-hci-disk-custom
parameters:
  blocksize: "33554432"
  container: SqlStorageContainer
  dynamic: "true"
  group: clustergroup-summertime
  hostname: TESTPATCHING-91.sys-sqlsvr.local
  logicalsectorsize: "4096"
  physicalsectorsize: "4096"
  port: "55000"
  fsType: ext4
provisioner: disk.csi.akshci.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true  

如果创建自定义存储类,可以指定要存储 PV 的位置。 如果底层基础结构是 Azure Local,则此新位置可能是由高性能 SSD/NVMe 支持的卷或 HDD 支持的成本优化卷。

创建自定义存储类的过程分为两步:

  1. 使用 stack-hci-vm storagepath cmdlet 创建新的存储路径,以创建、显示和列出 Azure 本地群集上的存储路径。 有关创建存储路径的详细信息,请参阅 存储路径

    对于 $path,请创建一个名为 $storagepathname;例如 C:\ClusterStorage\test-storagepath

    az stack-hci-vm storagepath create --resource-group $resource_group --custom-location $customLocationID --name $storagepathname --path $path
    

    获取存储路径资源 ID:

    $storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv 
    
  2. 使用新的存储路径创建新的自定义存储类。

    1. 创建名为 sc-aks-hci-disk-custom.yaml 的文件,然后从以下 YAML 文件复制清单。 存储类与默认存储类相同,但新的存储类除外 containerstorage path ID使用在上一步中创建的 。container 对于 grouphostname,请运行 kubectl get storageclass default -o yaml并查询默认存储类,然后使用指定的值:

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
       name: aks-hci-disk-custom
      provisioner: disk.csi.akshci.com
      parameters:
       blocksize: "33554432"
       container: <storage path ID>
       dynamic: "true"
       group: <e.g clustergroup-akshci> # same as the default storageclass
       hostname: <e.g. ca-a858c18c.ntprod.contoso.com> # same as the default storageclass
       logicalsectorsize: "4096"
       physicalsectorsize: "4096"
       port: "55000"
       fsType: ext4 # refer to the note above to determine when to include this parameter
      allowVolumeExpansion: true
      reclaimPolicy: Delete
      volumeBindingMode: Immediate
      
    2. 使用 kubectl apply 命令创建存储类,并指定 sc-aks-hci-disk-custom.yaml 文件:

       $ kubectl apply -f sc-aks-hci-disk-custom.yaml
       storageclass.storage.k8s.io/aks-hci-disk-custom created
      

后续步骤