5.11. Azure Disk CSI Driver Operator


5.11.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.11.2. 关于 CSI

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

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

注意

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

5.11.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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

    输出示例

    $ 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
    Copy to Clipboard Toggle word wrap

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

5.11.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 启用用户管理的加密

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

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

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

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

先决条件

  • 已有 Microsoft Azure 集群。

流程

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

    $ oc edit machineset <machine_set_name>
    Copy to Clipboard Toggle word wrap

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

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

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

    $ oc create -f <machine_set_name>.yaml
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
    1
    指定启用巨型磁盘的机器集标签。此流程使用 disk.ulssd 用于这个值。
    2
    这个 pod 引用了 ultra-disk PVC。

验证

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

    $ oc get machines
    Copy to Clipboard Toggle word wrap

    机器应处于 Running 状态。

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

    $ oc debug node/<node_name> -- chroot /host lsblk
    Copy to Clipboard Toggle word wrap

    在这个命令中,oc debug node/<node_name> 在节点 < node_name&gt; 上启动一个调试 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
    Copy to Clipboard Toggle word wrap

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

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

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

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

    $ oc -n <stuck_pod_namespace> describe pod <stuck_pod_name>
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat