×

OpenShift Container Platform 支持 Microsoft Azure 磁盘卷。您可以使用 Azure 为 OpenShift Container Platform 集群配置持久性存储。假设您已经熟悉 Kubernetes 和 Azure。Kubernetes 持久卷框架允许管理员为集群配置持久性存储,并为用户提供一种无需了解底层基础架构即可请求这些资源的方法。Azure 磁盘卷可以动态配置。持久卷不绑定到单个项目或命名空间;它们可以在 OpenShift Container Platform 集群中共享。持久卷声明特定于项目或命名空间,用户可以请求它们。

OpenShift Container Platform 4.11 及更高版本为 Azure 磁盘内置卷插件到其等效 CSI 驱动程序提供了自动迁移。

CSI 自动迁移应该无缝进行。迁移不会更改您如何使用所有现有 API 对象,例如持久卷、持久卷声明和存储类。有关迁移的更多信息,请参阅 CSI 自动迁移

基础架构中存储的高可用性留给底层存储提供商。

其他资源

创建 Azure 存储类

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

步骤
  1. 在 OpenShift Container Platform 控制台中,单击**存储** → **存储类**。

  2. 在存储类概述中,单击**创建存储类**。

  3. 在出现的页面上定义所需的选项。

    1. 输入一个名称来引用存储类。

    2. 输入可选说明。

    3. 选择回收策略。

    4. 从下拉列表中选择kubernetes.io/azure-disk

      1. 输入存储帐户类型。这对应于您的 Azure 存储帐户 SKU 层级。有效选项为Premium_LRSPremiumV2_LRSStandard_LRSStandardSSD_LRSUltraSSD_LRS

        skuname PremiumV2_LRS 在并非所有区域都受支持,并且在某些受支持区域中,并非所有可用性区域都受支持。有关更多信息,请参阅 Azure 文档

      2. 输入帐户的类型。有效选项为shareddedicatedmanaged

        Red Hat 仅支持在存储类中使用kind: Managed

        对于SharedDedicated,Azure 会创建非托管磁盘,而 OpenShift Container Platform 会为机器操作系统(根)磁盘创建托管磁盘。但是,由于 Azure 磁盘不允许在一个节点上同时使用托管磁盘和非托管磁盘,因此使用SharedDedicated 创建的非托管磁盘无法附加到 OpenShift Container Platform 节点。

    5. 根据需要输入存储类的其他参数。

  4. 单击**创建**以创建存储类。

其他资源

创建持久卷声明

先决条件

在底层基础架构中必须存在存储,然后才能将其作为卷安装到 OpenShift Container Platform 中。

步骤
  1. 在 OpenShift Container Platform 控制台中,单击**存储** → **持久卷声明**。

  2. 在持久卷声明概述中,单击**创建持久卷声明**。

  3. 在出现的页面上定义所需的选项。

    1. 从下拉菜单中选择先前创建的存储类。

    2. 输入存储卷声明的唯一名称。

    3. 选择访问模式。此选择决定存储卷声明的读写访问权限。

    4. 定义存储卷声明的大小。

  4. 点击**创建**以创建持久卷声明并生成持久卷。

卷格式

在OpenShift Container Platform挂载卷并将其传递给容器之前,它会检查卷是否包含持久卷定义中fsType参数指定的 文件系统。如果设备未格式化为该文件系统,则设备中的所有数据将被擦除,并且设备将自动格式化为给定的文件系统。

这允许使用未格式化的Azure卷作为持久卷,因为OpenShift Container Platform会在首次使用前对其进行格式化。

使用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提供对底层主机OS二进制文件的访问权限,而lsblk显示附加到主机OS机器的块设备。

后续步骤
  • 要在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>