×

概述

OpenShift Container Platform 能够使用 Microsoft Azure 磁盘存储的容器存储接口 (CSI) 驱动程序来预配持久卷 (PV)。

在使用 CSI 运算符和驱动程序时,建议您熟悉持久性存储配置 CSI 卷

为了创建挂载到 Azure 磁盘存储资产的 CSI 预配的 PV,OpenShift Container Platform 默认情况下在openshift-cluster-csi-drivers命名空间中安装 Azure 磁盘 CSI 驱动程序运算符和 Azure 磁盘 CSI 驱动程序。

  • Azure 磁盘 CSI 驱动程序运算符提供了一个名为managed-csi的存储类,您可以使用它来创建持久卷声明 (PVC)。Azure 磁盘 CSI 驱动程序运算符支持动态卷预配,允许按需创建存储卷,从而无需集群管理员预先预配存储。如果需要,您可以禁用此默认存储类(请参阅管理默认存储类)。

  • Azure 磁盘 CSI 驱动程序使您可以创建和挂载 Azure 磁盘 PV。

关于 CSI

存储供应商传统上将存储驱动程序作为 Kubernetes 的一部分提供。随着容器存储接口 (CSI) 的实现,第三方提供商可以改为使用标准接口交付存储插件,而无需更改核心 Kubernetes 代码。

CSI 运算符为 OpenShift Container Platform 用户提供了诸如卷快照之类的存储选项,而这些选项在树内卷插件中是不可能的。

OpenShift Container Platform 为 Azure 树内卷插件提供自动迁移到其等效的 CSI 驱动程序。有关更多信息,请参阅CSI 自动迁移

创建具有存储帐户类型的存储类

存储类用于区分和界定存储级别和用途。通过定义存储类,您可以获得动态预配的持久卷。

创建存储类时,您可以指定存储帐户类型。这对应于您的 Azure 存储帐户 SKU 层次。有效选项为Standard_LRSPremium_LRSStandardSSD_LRSUltraSSD_LRSPremium_ZRSStandardSSD_ZRSPremiumV2_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_LRSPremium_LRSStandardSSD_LRSUltraSSD_LRSPremium_ZRSStandardSSD_ZRSPremiumV2_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 具有存储帐户类型的新存储类。

用户管理的加密

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

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

  • Amazon Web Services (AWS) Elastic Block Storage (EBS)

  • Microsoft Azure 磁盘存储

  • Google Cloud Platform (GCP) 持久性磁盘 (PD) 存储

  • IBM Virtual Private Cloud (VPC) 块存储

如果操作系统(根)磁盘已加密,并且存储类中未定义加密密钥,则 Azure 磁盘 CSI 驱动程序默认情况下使用操作系统磁盘加密密钥来加密预配的存储卷。

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

使用 PVC 部署具有超大磁盘的机器的机器集

您可以创建一个在 Azure 上运行的机器集,该机器集部署具有超大磁盘的机器。超大磁盘是高性能存储,旨在用于最苛刻的数据工作负载。

树内插件和 CSI 驱动程序都支持使用 PVC 启用超大磁盘。您还可以将具有超大磁盘的机器作为数据磁盘部署,而无需创建 PVC。

使用机器集创建具有超大磁盘的机器

您可以通过编辑机器集 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.ultrassd作为此值。
    2 这些行启用超高速磁盘的使用。
  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.ultrassd作为此值。
    2 此 Pod 引用ultra-disk PVC。
验证
  1. 运行以下命令验证机器是否已创建

    $ oc get machines

    机器状态应为运行中

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

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

    在此命令中,oc debug node/<node-name> 在节点<node-name>上启动一个调试 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

启用超高速磁盘的机器集的故障排除资源

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

无法挂载由超高速磁盘支持的持久卷声明

如果挂载由超高速磁盘支持的持久卷声明时出现问题,则 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>