5.12. Azure Disk CSI Driver Operator


5.12.1. 概述

OpenShift Container Platform 可以使用 Microsoft Azure Disk Storage 的 Container Storage Interface(CSI)驱动程序置备持久性卷(PV)。

在使用 CSI Operator 和驱动程序时,建议先熟悉 持久性存储配置 CSI 卷

要创建挂载到 Azure Disk 存储资产中的 CSI 置备 PV,OpenShift Container Platform 在 openshift-cluster-csi-drivers 命名空间中默认安装 Azure Disk CSI Driver Operator 和 Azure Disk CSI 驱动程序。

  • Azure Disk CSI Driver Operator 提供了一个名为 managed-csi 的存储类,您可以使用它来创建持久性卷声明(PVC)。Azure Disk CSI Driver Operator 支持动态卷置备,方法是允许按需创建存储卷,使集群管理员无需预置备存储。如果需要,您可以禁用此默认存储类 (请参阅管理默认存储类)。
  • Azure Disk CSI 驱动程序 允许您创建并挂载 Azure Disk PV。

5.12.2. 关于 CSI

在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。

CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。

注意

OpenShift Container Platform 为 Azure Disk in-tree 卷插件提供自动迁移到对应的 CSI 驱动程序。如需更多信息,请参阅 CSI 自动迁移

5.12.3. 创建带有存储帐户类型的存储类

存储类用于区分和划分存储级别和使用。通过定义存储类,用户可以获得动态置备的持久性卷。

在创建存储类时,您可以指定存储帐户类型。这与您的 Azure 存储帐户 SKU 层对应。有效选项包括 Standard_LRS,Premium_LRS,StandardSSD_LRS,UltraSSD_LRS,Premium_ZRS,StandardSSD_ZRS, 和 PremiumV2_LRS。有关查找 Azure SKU 层的详情,请参考 SKU 类型

ZRS 和 PremiumV2_LRS 都有一些区域限制。有关这些限制的详情,请参阅 ZRS 限制Premium_LRS 限制

先决条件

  • 使用管理员权限访问 OpenShift Container Platform 集群

流程

使用以下步骤创建带有存储帐户类型的存储类。

  1. 使用类似如下的 YAML 文件创建设计存储帐户类型的存储类:

    $ oc create -f - << EOF
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage-class> 1
    provisioner: disk.csi.azure.com
    parameters:
      skuName: <storage-class-account-type> 2
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    EOF
    1
    存储类名称。
    2
    存储帐户类型。这与您的 Azure 存储帐户 SKU 层对应:`Standard_LRS`, Premium_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, StandardSSD_ZRS, PremiumV2_LRS
    注意

    对于 PremiumV2_LRS,在 storageclass.parameters 中指定 cachingMode: None

  2. 通过列出存储类来确保创建了存储类:

    $ oc get storageclass

    输出示例

    $ oc get storageclass
    NAME                    PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    azurefile-csi           file.csi.azure.com   Delete          Immediate              true                   68m
    managed-csi (default)   disk.csi.azure.com   Delete          WaitForFirstConsumer   true                   68m
    sc-prem-zrs             disk.csi.azure.com   Delete          WaitForFirstConsumer   true                   4m25s 1

    1
    带有存储帐户类型的新存储类。

5.12.4. 用户管理的加密

用户管理的加密功能允许您在安装过程中提供加密 OpenShift Container Platform 节点根卷的密钥,并允许所有受管存储类使用这些密钥加密置备的存储卷。您必须在 install-config YAML 文件中的 platform.<cloud_type>.defaultMachinePlatform 字段中指定自定义密钥。

此功能支持以下存储类型:

  • Amazon Web Services (AWS) Elastic Block storage (EBS)
  • Microsoft Azure Disk 存储
  • Google Cloud Platform (GCP) 持久磁盘 (PD) 存储
  • IBM Virtual Private Cloud (VPC) Block 存储
注意

如果 OS (root) 磁盘已被加密,且存储类中没有定义加密密钥,Azure Disk CSI 驱动程序默认使用 OS 磁盘加密密钥来加密置备的存储卷。

有关使用 Azure 用户管理的加密安装的详情,请参阅为 Azure 启用用户管理的加密

5.12.5. 用于部署带有使用 PVC 的巨型磁盘的机器的机器集

您可以创建在 Azure 上运行的机器集,该机器集用来部署带有巨型磁盘的机器。ultra 磁盘是高性能存储,用于要求最苛刻的数据工作负载。

in-tree 插件和 CSI 驱动程序都支持使用 PVC 启用巨型 磁盘。您还可以在不创建 PVC 的情况下将巨型磁盘部署为数据磁盘。

5.12.5.1. 使用机器集创建带有巨型磁盘的机器

您可以通过编辑机器集 YAML 文件在 Azure 上部署带有巨型磁盘的机器。

先决条件

  • 已有 Microsoft Azure 集群。

流程

  1. 运行以下命令,复制现有的 Azure MachineSet 自定义资源(CR)并编辑它:

    $ oc edit machineset <machine-set-name>

    其中 <machine-set-name> 是您要使用巨型磁盘置备机器的机器集。

  2. 在指示的位置中添加以下行:

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    spec:
      template:
        spec:
          metadata:
            labels:
              disk: ultrassd 1
          providerSpec:
            value:
              ultraSSDCapability: Enabled 2
    1
    指定标签,用于选择此机器集创建的节点。此流程使用 disk.ulssd 用于这个值。
    2
    这些行支持使用 ultra 磁盘。
  3. 运行以下命令,使用更新的配置创建机器集:

    $ oc create -f <machine-set-name>.yaml
  4. 创建一个包含以下 YAML 定义的存储类:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ultra-disk-sc 1
    parameters:
      cachingMode: None
      diskIopsReadWrite: "2000" 2
      diskMbpsReadWrite: "320" 3
      kind: managed
      skuname: UltraSSD_LRS
    provisioner: disk.csi.azure.com 4
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer 5
    1
    指定存储类的名称。此流程使用 ultra-disk-sc 作为这个值。
    2
    指定存储类的 IOPS 数量。
    3
    指定存储类的吞吐量,单位为 MBps。
    4
    对于 Azure Kubernetes Service(AKS)版本 1.21 或更高版本,请使用 disk.csi.azure.com。对于 AKS 的早期版本,请使用 kubernetes.io/azure-disk
    5
    可选:指定此参数以等待创建使用磁盘的 pod。
  5. 创建一个持久性卷声明(PVC)来引用包含以下 YAML 定义的 ultra-disk-sc 存储类:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ultra-disk 1
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: ultra-disk-sc 2
      resources:
        requests:
          storage: 4Gi 3
    1
    指定 PVC 的名称。此流程使用 ultra-disk 作为这个值。
    2
    此 PVC 引用了 ultra-disk-sc 存储类。
    3
    指定存储类的大小。最小值为 4Gi
  6. 创建包含以下 YAML 定义的 pod:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-ultra
    spec:
      nodeSelector:
        disk: ultrassd 1
      containers:
      - name: nginx-ultra
        image: alpine:latest
        command:
          - "sleep"
          - "infinity"
        volumeMounts:
        - mountPath: "/mnt/azure"
          name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: ultra-disk 2
    1
    指定启用巨型磁盘的机器集标签。此流程使用 disk.ulssd 用于这个值。
    2
    这个 pod 引用了 ultra-disk PVC。

验证

  1. 运行以下命令验证机器是否已创建:

    $ oc get machines

    机器应处于 Running 状态。

  2. 对于正在运行并附加节点的机器,请运行以下命令验证分区:

    $ oc debug node/<node-name> -- chroot /host lsblk

    在这个命令中,oc debug node/<node-name> 会在节点 <node-name> 上启动一个 debugging shell,并传递一个带有 -- 的命令。传递的命令 chroot /host 提供对底层主机操作系统二进制文件的访问,lsblk 显示连接至主机操作系统计算机的块设备。

后续步骤

  • 要在 pod 中使用大量磁盘,请创建使用挂载点的工作负载。创建一个类似以下示例的 YAML 文件:

    apiVersion: v1
    kind: Pod
    metadata:
      name: ssd-benchmark1
    spec:
      containers:
      - name: ssd-benchmark1
        image: nginx
        ports:
          - containerPort: 80
            name: "http-server"
        volumeMounts:
        - name: lun0p1
          mountPath: "/tmp"
      volumes:
        - name: lun0p1
          hostPath:
            path: /var/lib/lun0p1
            type: DirectoryOrCreate
      nodeSelector:
        disktype: ultrassd

5.12.5.2. 启用 ultra 磁盘的机器集的故障排除资源

使用本节中的信息从您可能会遇到的问题了解和恢复。

5.12.5.2.1. 无法挂载由巨型磁盘支持的持久性卷声明

如果挂载了被巨型磁盘支持的持久性卷声明的问题,pod 会一直处于 ContainerCreating 状态,并触发警报。

例如,如果没有在支持托管 pod 的节点的机器上设置 additionalCapabilities.ultraSSDEnabled 参数,则会出现以下出错信息:

StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
  • 要解决这个问题,请运行以下命令来描述 pod:

    $ oc -n <stuck_pod_namespace> describe pod <stuck_pod_name>

5.12.6. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.