×

逻辑卷管理器 (LVM) 存储通过 TopoLVM CSI 驱动程序使用 LVM2,可在资源有限的集群上动态配置本地存储。

您可以使用 LVM 存储创建卷组、持久卷声明 (PVC)、卷快照和卷克隆。

逻辑卷管理器存储安装

您可以在 OpenShift Container Platform 集群上安装逻辑卷管理器 (LVM) 存储,并将其配置为动态配置工作负载的存储。

您可以使用 OpenShift Container Platform CLI (oc)、OpenShift Container Platform Web 控制台或 Red Hat Advanced Cluster Management (RHACM) 安装 LVM 存储。

在多节点集群上使用 LVM 存储时,LVM 存储仅支持配置本地存储。LVM 存储不支持跨节点的存储数据复制机制。您必须确保通过主动或被动复制机制进行存储数据复制,以避免单点故障。

安装 LVM 存储的先决条件

安装 LVM 存储的先决条件如下:

  • 确保您至少拥有 10 milliCPU 和 100 MiB 的 RAM。

  • 确保每个托管集群都有专用的磁盘用于配置存储。LVM 存储仅使用那些为空且不包含文件系统签名的磁盘。为确保磁盘为空且不包含文件系统签名,请在使用前擦除磁盘。

  • 在您可以重用在之前的 LVM 存储安装中配置的存储设备的私有 CI 环境中安装 LVM 存储之前,请确保已擦除未使用的磁盘。如果您在安装 LVM 存储之前没有擦除磁盘,则无法在无需手动干预的情况下重用这些磁盘。

    您无法擦除正在使用的磁盘。

  • 如果您想使用 Red Hat Advanced Cluster Management (RHACM) 安装 LVM 存储,请确保已在 OpenShift Container Platform 集群上安装 RHACM。请参阅“使用 RHACM 安装 LVM 存储”部分。

使用 CLI 安装 LVM 存储

作为集群管理员,您可以使用 OpenShift CLI 安装 LVM 存储。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已以具有 cluster-admin 和操作符安装权限的用户身份登录到 OpenShift Container Platform。

步骤
  1. 创建一个包含创建命名空间配置的 YAML 文件

    创建命名空间的示例 YAML 配置
    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        openshift.io/cluster-monitoring: "true"
        pod-security.kubernetes.io/enforce: privileged
        pod-security.kubernetes.io/audit: privileged
        pod-security.kubernetes.io/warn: privileged
      name: openshift-storage
  2. 运行以下命令创建命名空间:

    $ oc create -f <file_name>
  3. 创建一个 OperatorGroup CR YAML 文件

    OperatorGroup CR 示例
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: openshift-storage-operatorgroup
      namespace: openshift-storage
    spec:
      targetNamespaces:
      - openshift-storage
  4. 运行以下命令创建 OperatorGroup CR:

    $ oc create -f <file_name>
  5. 创建一个 Subscription CR YAML 文件

    Subscription CR 示例
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: lvms
      namespace: openshift-storage
    spec:
      installPlanApproval: Automatic
      name: lvms-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
  6. 运行以下命令创建 Subscription CR:

    $ oc create -f <file_name>
验证
  1. 要验证是否已安装 LVM 存储,请运行以下命令:

    $ oc get csv -n openshift-storage -o custom-columns=Name:.metadata.name,Phase:.status.phase
    示例输出
    Name                         Phase
    4.13.0-202301261535          Succeeded

使用 Web 控制台安装 LVM 存储

您可以使用 OpenShift Container Platform Web 控制台安装 LVM 存储。

先决条件
  • 您可以访问集群。

  • 您可以访问具有 cluster-admin 和操作符安装权限的 OpenShift Container Platform。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 点击操作符 → OperatorHub

  3. OperatorHub 页面上点击LVM 存储

  4. 操作符安装页面上设置以下选项:

    1. 更新渠道stable-4.17

    2. 安装模式集群上的特定命名空间

    3. 安装命名空间Operator 建议的命名空间 openshift-storage。如果 openshift-storage 命名空间不存在,它将在操作符安装期间创建。

    4. 更新批准自动手动

      如果您选择自动更新,操作符生命周期管理器 (OLM) 将自动更新正在运行的 LVM 存储实例,无需任何干预。

      如果您选择手动更新,OLM 将创建一个更新请求。作为集群管理员,您必须手动批准更新请求才能将 LVM 存储更新到较新版本。

  5. 可选:选中在此命名空间上启用 Operator 建议的集群监控复选框。

  6. 点击安装

验证步骤
  • 验证 LVM 存储是否显示绿色勾号,表示安装成功。

在断开连接的环境中安装 LVM 存储

您可以在断开连接的环境中在 OpenShift Container Platform 上安装 LVM 存储。此过程中引用的所有部分都链接在“其他资源”部分中。

先决条件
  • 您已阅读“关于断开连接的安装镜像”部分。

  • 您可以访问 OpenShift Container Platform 镜像仓库。

  • 您已创建镜像注册表。

步骤
  1. 按照“创建镜像集配置”过程中的步骤操作。要为 LVM 存储创建 ImageSetConfiguration 自定义资源 (CR),您可以使用以下示例 ImageSetConfiguration CR 配置:

    LVM 存储的示例 ImageSetConfiguration CR
    kind: ImageSetConfiguration
    apiVersion: mirror.openshift.io/v1alpha2
    archiveSize: 4 (1)
    storageConfig: (2)
      registry:
        imageURL: example.com/mirror/oc-mirror-metadata (3)
        skipTLS: false
    mirror:
      platform:
        channels:
        - name: stable-4.17 (4)
          type: ocp
        graph: true (5)
      operators:
      - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.17 (6)
        packages:
        - name: lvms-operator (7)
          channels:
          - name: stable (8)
      additionalImages:
      - name: registry.redhat.io/ubi9/ubi:latest (9)
      helm: {}
    1 设置镜像集内每个文件的最大大小(以 GiB 为单位)。
    2 指定要保存镜像集的位置。此位置可以是注册表或本地目录。除非您使用 Technology Preview OCI 功能,否则必须配置 storageConfig 字段。
    3 使用注册表时,指定镜像流的存储 URL。有关更多信息,请参阅 *为什么使用 imagestreams*。
    4 指定要从中检索 OpenShift Container Platform 镜像的渠道。
    5 将此字段设置为 true 以生成 OpenShift 更新服务 (OSUS) 图像。有关更多信息,请参阅 *关于 OpenShift 更新服务*。
    6 指定要从中检索 OpenShift Container Platform 镜像的操作符目录。
    7 指定要包含在镜像集中的操作符包。如果此字段为空,则将检索目录中的所有包。
    8 指定要包含在镜像集中的 Operator 包的通道。即使您不使用该通道中的捆绑包,也必须包含 Operator 包的默认通道。您可以运行以下命令查找默认通道:$ oc mirror list operators --catalog=<catalog_name> --package=<package_name>
    9 指定要包含在镜像集中的任何其他镜像。
  2. 按照“将镜像集镜像到镜像注册表”部分中的步骤操作。

  3. 按照“配置镜像注册表仓库镜像”部分中的步骤操作。

使用 RHACM 安装 LVM 存储

要使用 Red Hat Advanced Cluster Management (RHACM) 在集群上安装 LVM 存储,必须创建一个Policy自定义资源 (CR)。您还可以配置条件来选择要在其上安装 LVM 存储的集群。

创建用于安装 LVM 存储的Policy CR 也将应用于在创建Policy CR 后导入或创建的集群。

先决条件
  • 您可以使用具有cluster-admin和 Operator 安装权限的帐户访问 RHACM 集群。

  • 您在每个集群上都有 LVM 存储可以使用的专用磁盘。

  • 集群必须由 RHACM 管理。

步骤
  1. 使用您的 OpenShift Container Platform 凭据登录到 RHACM CLI。

  2. 创建一个命名空间。

    $ oc create ns <namespace>
  3. 创建一个Policy CR YAML 文件

    安装和配置 LVM 存储的示例Policy CR
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-install-lvms
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector: (1)
        matchExpressions:
        - key: mykey
          operator: In
          values:
          - myvalue
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-install-lvms
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-install-lvms
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: install-lvms
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
      name: install-lvms
    spec:
      disabled: false
      remediationAction: enforce
      policy-templates:
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: install-lvms
          spec:
            object-templates:
            - complianceType: musthave
              objectDefinition: (2)
                apiVersion: v1
                kind: Namespace
                metadata:
                  labels:
                    openshift.io/cluster-monitoring: "true"
                    pod-security.kubernetes.io/enforce: privileged
                    pod-security.kubernetes.io/audit: privileged
                    pod-security.kubernetes.io/warn: privileged
                  name: openshift-storage
            - complianceType: musthave
              objectDefinition: (3)
                apiVersion: operators.coreos.com/v1
                kind: OperatorGroup
                metadata:
                  name: openshift-storage-operatorgroup
                  namespace: openshift-storage
                spec:
                  targetNamespaces:
                  - openshift-storage
            - complianceType: musthave
              objectDefinition: (4)
                apiVersion: operators.coreos.com/v1alpha1
                kind: Subscription
                metadata:
                  name: lvms
                  namespace: openshift-storage
                spec:
                  installPlanApproval: Automatic
                  name: lvms-operator
                  source: redhat-operators
                  sourceNamespace: openshift-marketplace
            remediationAction: enforce
            severity: low
    1 设置PlacementRule.spec.clusterSelector中的key字段和values字段,以匹配在要安装 LVM 存储的集群中配置的标签。
    2 命名空间配置。
    3 OperatorGroup CR 配置。
    4 Subscription CR 配置。
  4. 运行以下命令创建Policy CR

    $ oc create -f <file_name> -n <namespace>

    创建Policy CR 后,将在与PlacementRule CR 中配置的选择条件匹配的集群上创建以下自定义资源

    • 命名空间

    • OperatorGroup

    • Subscription

关于 LVMCluster 自定义资源

您可以配置LVMCluster CR 来执行以下操作

  • 创建可用于配置持久卷声明 (PVC) 的 LVM 卷组。

  • 配置要添加到 LVM 卷组的设备列表。

  • 配置要求以选择要在其上创建 LVM 卷组的节点,以及卷组的精简池配置。

  • 强制擦除选定的设备。

安装 LVM 存储后,必须创建一个LVMCluster自定义资源 (CR)。

示例LVMCluster CR YAML 文件
apiVersion: lvm.topolvm.io/v1alpha1
kind: LVMCluster
metadata:
  name: my-lvmcluster
spec:
  tolerations:
  - effect: NoSchedule
    key: xyz
    operator: Equal
    value: "true"
  storage:
    deviceClasses:
    - name: vg1
      fstype: ext4 (1)
      default: true
      nodeSelector: (1)
        nodeSelectorTerms:
        - matchExpressions:
          - key: mykey
            operator: In
            values:
            - ssd
      deviceSelector: (1)
        paths:
        - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
        - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
        optionalPaths:
        - /dev/disk/by-path/pci-0000:89:00.0-nvme-1
        - /dev/disk/by-path/pci-0000:90:00.0-nvme-1
        forceWipeDevicesAndDestroyAllData: true
      thinPoolConfig:
        name: thin-pool-1
        sizePercent: 90 (1)
        overprovisionRatio: 10
        chunkSize: 128Ki (1)
        chunkSizeCalculationPolicy: Static (1)
1 可选字段

LVMCluster CR 中字段的解释

LVMCluster CR 字段在以下表格中描述

表 1. LVMCluster CR 字段
字段 类型 描述

spec.storage.deviceClasses

数组

包含将本地存储设备分配给 LVM 卷组的配置。

对于您创建的每个设备类,LVM 存储都会创建一个存储类和卷快照类。

deviceClasses.name

字符串

为 LVM 卷组 (VG) 指定一个名称。

您还可以将此字段配置为重用您在上一次安装中创建的卷组。有关更多信息,请参见“重用上一次 LVM 存储安装中的卷组”。

deviceClasses.fstype

字符串

将此字段设置为ext4xfs。默认情况下,此字段设置为xfs

deviceClasses.default

布尔值

将此字段设置为true表示设备类是默认的。否则,您可以将其设置为false。您只能配置单个默认设备类。

deviceClasses.nodeSelector

对象

包含选择要在其上创建 LVM 卷组的节点的配置。如果此字段为空,则会考虑所有没有 no-schedule taints 的节点。

在控制平面节点上,当新节点在集群中变为活动状态时,LVM 存储会检测并使用附加的工作节点。

nodeSelector.nodeSelectorTerms

数组

配置用于选择节点的要求。

deviceClasses.deviceSelector

对象

包含执行以下操作的配置

  • 指定要添加到 LVM 卷组的设备的路径。

  • 强制擦除添加到 LVM 卷组的设备。

有关更多信息,请参见“关于将设备添加到卷组”。

deviceSelector.paths

数组

指定设备路径。

如果此字段中指定的设备路径不存在,或者 LVM 存储不支持该设备,则LVMCluster CR 将变为Failed状态。

deviceSelector.optionalPaths

数组

指定可选设备路径。

如果此字段中指定的设备路径不存在,或者 LVM 存储不支持该设备,则 LVM 存储会忽略该设备,而不会导致错误。

deviceSelector.forceWipeDevicesAndDestroyAllData

布尔值

LVM 存储仅使用那些为空且不包含文件系统签名的磁盘。要确保磁盘为空且不包含文件系统签名,请在使用磁盘之前擦除它们。

要强制擦除选定的设备,请将此字段设置为true。默认情况下,此字段设置为false

如果此字段设置为true,LVM 存储将擦除设备上的所有先前数据。谨慎使用此功能。

如果满足以下任何条件,擦除设备可能会导致数据完整性不一致

  • 该设备用作交换空间。

  • 该设备是 RAID 阵列的一部分。

  • 该设备已挂载。

如果这些条件中的任何一个为真,请不要强制擦除磁盘。相反,您必须手动擦除磁盘。

deviceClasses.thinPoolConfig

对象

包含在 LVM 卷组中创建精简池的配置。

如果您排除此字段,则逻辑卷将是厚置备的。

使用厚置备存储包括以下限制

  • 卷克隆没有写时复制支持。

  • 不支持快照类。

  • 不支持过度配置。因此,PersistentVolumeClaims (PVC) 的已配置容量会立即从卷组中减少。

  • 不支持精简指标。厚置备设备仅支持卷组指标。

thinPoolConfig.name

字符串

为精简池指定一个名称。

thinPoolConfig.sizePercent

整数

指定在 LVM 卷组中用于创建精简池的空间百分比。

默认情况下,此字段设置为 90。您可以设置的最小值为 10,最大值为 90。

thinPoolConfig.overprovisionRatio

整数

指定一个因子,您可以根据精简池中的可用存储来配置其他存储。

例如,如果此字段设置为 10,则您可以配置精简池中可用存储量的多达 10 倍的存储。

要禁用过度配置,请将此字段设置为 1。

thinPoolConfig.chunkSize

整数

指定精简池的静态计算的块大小。仅当ChunkSizeCalculationPolicy字段设置为Static时,才使用此字段。由于lvm2的底层限制,此字段的值必须配置在 64 KiB 到 1 GiB 的范围内。

如果您未配置此字段且ChunkSizeCalculationPolicy字段设置为Static,则默认块大小设置为128 KiB。

更多信息,请参见“块大小概述”。

thinPoolConfig.chunkSizeCalculationPolicy

字符串

指定用于计算底层卷组块大小的策略。您可以将此字段设置为StaticHost。默认情况下,此字段设置为Static

如果此字段设置为Static,则块大小设置为chunkSize字段的值。如果未配置chunkSize字段,则块大小设置为128 KiB。

如果此字段设置为Host,则块大小将根据lvm.conf文件中的配置计算。

更多信息,请参见“配置LVM存储中使用的设备大小的限制”。

配置LVM存储中使用的设备大小的限制

使用LVM存储配置存储时,可使用设备大小的限制如下:

  • 您可以配置的总存储大小受底层逻辑卷管理器 (LVM) 稀疏池和超额配置因子的限制。

  • 逻辑卷的大小取决于物理扩展 (PE) 和逻辑扩展 (LE) 的大小。

    • 您可以在创建物理和逻辑设备时定义 PE 和 LE 的大小。

    • 默认的 PE 和 LE 大小为 4 MB。

    • 如果增加 PE 的大小,则 LVM 的最大大小由内核限制和磁盘空间决定。

下表描述了静态和主机配置的块大小和卷大小限制。

表 2. 测试配置
参数

块大小

128 KiB

最大卷大小

32 TiB

表 3. 静态配置的理论大小限制
参数 最小值 最大值

块大小

64 KiB

1 GiB

卷大小

底层 Red Hat Enterprise Linux CoreOS (RHCOS) 系统的最小大小。

底层 RHCOS 系统的最大大小。

表 4. 主机配置的理论大小限制
参数

块大小

此值基于lvm.conf文件中的配置。默认情况下,此值设置为 128 KiB。

最大卷大小

等于底层 RHCOS 系统的最大卷大小。

最小卷大小

等于底层 RHCOS 系统的最小卷大小。

关于向卷组添加设备

LVMCluster CR 中的deviceSelector字段包含用于指定要添加到逻辑卷管理器 (LVM) 卷组的设备路径的配置。

您可以在deviceSelector.paths字段、deviceSelector.optionalPaths字段或两者中指定设备路径。如果您未在deviceSelector.paths字段和deviceSelector.optionalPaths字段中都指定设备路径,则LVM存储会将受支持的未使用设备添加到卷组 (VG)。

建议避免使用符号命名(例如/dev/sdX)引用磁盘,因为这些名称在 RHCOS 重启后可能会发生变化。相反,您必须使用稳定的命名方案,例如/dev/disk/by-path//dev/disk/by-id/,以确保一致的磁盘识别。

此更改后,您可能需要调整现有自动化工作流,因为在这些工作流中,监控会收集每个节点的安装设备信息。

更多信息,请参见RHEL 文档

您可以在deviceSelector字段中添加冗余独立磁盘阵列 (RAID) 阵列的路径,以将 RAID 阵列与 LVM 存储集成。您可以使用mdadm实用程序创建 RAID 阵列。LVM 存储不支持创建软件 RAID。

您只能在 OpenShift Container Platform 安装期间创建 RAID 阵列。有关创建 RAID 阵列的信息,请参见以下部分:

您还可以将加密设备添加到卷组。您可以在 OpenShift Container Platform 安装期间在集群节点上启用磁盘加密。加密设备后,您可以在deviceSelector字段中指定 LUKS 加密设备的路径。有关磁盘加密的信息,请参见“关于磁盘加密”和“配置磁盘加密和镜像”。

要添加到 VG 的设备必须受 LVM 存储支持。有关不受支持的设备的信息,请参见“LVM 存储不支持的设备”。

只有满足以下条件,LVM 存储才会将设备添加到 VG:

  • 设备路径存在。

  • 设备受 LVM 存储支持。

设备添加到 VG 后,无法将其移除。

LVM 存储支持动态设备发现。如果您未在LVMCluster CR 中添加deviceSelector字段,则当设备可用时,LVM 存储会自动将新设备添加到 VG。

不建议通过动态设备发现将设备添加到 VG,原因如下:

  • 当您添加一个您不打算添加到 VG 的新设备时,LVM 存储会通过动态设备发现自动将此设备添加到 VG。

  • 如果 LVM 存储通过动态设备发现将设备添加到 VG,则 LVM 存储不会限制您从节点中移除该设备。移除或更新已添加到 VG 的设备可能会中断 VG。这也可能导致数据丢失,并需要手动修复节点。

LVM 存储不支持的设备

LVMCluster自定义资源 (CR) 的deviceSelector字段中添加设备路径时,请确保这些设备受 LVM 存储支持。如果您添加了不受支持的设备的路径,则 LVM 存储会排除这些设备,以避免管理逻辑卷的复杂性。

如果您未在deviceSelector字段中指定任何设备路径,则 LVM 存储只会添加其支持的未使用设备。

要获取有关设备的信息,请运行以下命令:

$ lsblk --paths --json -o \
NAME,ROTA,TYPE,SIZE,MODEL,VENDOR,RO,STATE,KNAME,SERIAL,PARTLABEL,FSTYPE

LVM 存储不支持以下设备:

只读设备

ro参数设置为true的设备。

挂起设备

state参数设置为suspended的设备。

ROM 设备

type参数设置为rom的设备。

LVM 分区设备

type参数设置为lvm的设备。

分区标签无效的设备

partlabel参数设置为biosbootreserved的设备。

文件系统无效的设备

fstype参数设置为nullLVM2_member以外的任何值的设备。

只有当设备不包含子设备时,LVM 存储才支持将fstype参数设置为LVM2_member的设备。

属于其他卷组的设备

要获取设备卷组信息,请运行以下命令:

$ pvs <device-name> (1)
1 <device-name>替换为设备名称。
具有绑定挂载点的设备

要获取设备的挂载点,请运行以下命令:

$ cat /proc/1/mountinfo | grep <device-name> (1)
1 <device-name>替换为设备名称。
包含子设备的设备

建议在 LVM 存储中使用设备之前将其擦除,以防止出现意外行为。

创建 LVMCluster 自定义资源的方法

您可以使用 OpenShift CLI (oc) 或 OpenShift Container Platform Web 控制台创建LVMCluster自定义资源 (CR)。如果您已使用 Red Hat Advanced Cluster Management (RHACM) 安装了 LVM 存储,则也可以使用 RHACM 创建LVMCluster CR。

创建LVMCluster CR 后,LVM 存储会创建以下系统管理的 CR:

  • 每个设备类一个storageClassvolumeSnapshotClass

    LVM 存储以lvms-<device_class_name>的格式配置存储类和卷快照类的名称,其中<device_class_name>LVMCluster CR 中deviceClasses.name字段的值。例如,如果deviceClasses.name字段设置为 vg1,则存储类和卷快照类的名称为lvms-vg1

  • LVMVolumeGroup:此 CR 是一种特殊的持久卷 (PV),它由 LVM 卷组支持。它跟踪多个节点上的各个卷组。

  • LVMVolumeGroupNodeStatus:此 CR 跟踪节点上卷组的状态。

重用先前 LVM 存储安装中的卷组

您可以重用先前 LVM 存储安装中现有的卷组 (VG),而不是创建新的 VG。

您只能重用 VG,而不能重用与 VG 关联的逻辑卷。

您只能在创建LVMCluster自定义资源 (CR) 时执行此过程。

先决条件
  • 您要重用的 VG 必须没有损坏。

  • 您要重用的 VG 必须具有lvms标签。有关向 LVM 对象添加标签的更多信息,请参见使用标签分组 LVM 对象

步骤
  1. 打开LVMCluster CR YAML 文件。

  2. 按照以下示例中的说明配置LVMCluster CR 参数

    示例LVMCluster CR YAML 文件
    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
    spec:
    # ...
      storage:
        deviceClasses:
        - name: vg1  (1)
          fstype: ext4 (2)
          default: true
          deviceSelector: (3)
    # ...
            forceWipeDevicesAndDestroyAllData: false (4)
          thinPoolConfig: (5)
    # ...
          nodeSelector: (6)
    # ...
    1 将此字段设置为先前 LVM 存储安装中 VG 的名称。
    2 将此字段设置为ext4xfs。默认情况下,此字段设置为xfs
    3 您可以通过在deviceSelector字段中指定新的设备路径来向要重用的 VG 添加新设备。如果您不想向 VG 添加新设备,请确保当前 LVM 存储安装中的deviceSelector配置与先前 LVM 存储安装中的配置相同。
    4 如果此字段设置为true,则 LVM 存储会擦除添加到 VG 的设备上的所有数据。
    5 要保留要重用的 VG 的thinPoolConfig配置,请确保当前 LVM 存储安装中的thinPoolConfig配置与先前 LVM 存储安装中的配置相同。否则,您可以根据需要配置thinPoolConfig字段。
    6 配置选择要在其上创建 LVM 卷组的节点的要求。如果此字段为空,则会考虑所有没有 no-schedule taint 的节点。
  3. 保存LVMCluster CR YAML 文件。

要查看属于卷组的设备,请运行以下命令:

$ pvs -S vgname=<vg_name> (1)
1 <vg_name>替换为卷组的名称。

使用 CLI 创建 LVMCluster CR

您可以使用 OpenShift CLI (oc) 在工作节点上创建LVMCluster自定义资源 (CR)。

您只能在一个 OpenShift Container Platform 集群上创建单个LVMCluster自定义资源 (CR) 实例。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已以具有cluster-admin权限的用户身份登录到 OpenShift Container Platform。

  • 您已安装 LVM 存储。

  • 您已在集群中安装了工作节点。

  • 您已阅读“关于 LVMCluster 自定义资源”部分。

步骤
  1. 创建LVMCluster自定义资源 (CR) YAML 文件

    示例LVMCluster CR YAML 文件
    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
    spec:
    # ...
      storage:
        deviceClasses: (1)
    # ...
          nodeSelector: (2)
    # ...
          deviceSelector: (3)
    # ...
          thinPoolConfig: (4)
    # ...
    1 包含将本地存储设备分配给 LVM 卷组的配置。
    2 包含选择要在其上创建 LVM 卷组的节点的配置。如果此字段为空,则会考虑所有没有 no-schedule taints 的节点。
    3 包含配置,用于指定要添加到 LVM 卷组的设备的路径,并强制擦除添加到 LVM 卷组的设备。
    4 包含在 LVM 卷组中创建精简池的配置。如果您排除此字段,则逻辑卷将是粗略置备的。
  2. 运行以下命令创建LVMCluster CR:

    $ oc create -f <file_name>
    示例输出
    lvmcluster/lvmcluster created
验证
  1. 检查LVMCluster CR 是否处于Ready状态

    $ oc get lvmclusters.lvm.topolvm.io -o jsonpath='{.items[*].status}' -n <namespace>
    示例输出
    {"deviceClassStatuses": (1)
    [
      {
        "name": "vg1",
        "nodeStatus": [ (2)
            {
                "devices": [ (3)
                    "/dev/nvme0n1",
                    "/dev/nvme1n1",
                    "/dev/nvme2n1"
                ],
                "node": "kube-node", (4)
                "status": "Ready" (5)
            }
        ]
      }
    ]
    "state":"Ready"} (6)
    
    1 设备类的状态。
    2 每个节点上 LVM 卷组的状态。
    3 用于创建 LVM 卷组的设备列表。
    4 创建设备类的节点。
    5 节点上 LVM 卷组的状态。
    6 LVMCluster CR 的状态。

    如果LVMCluster CR 处于Failed状态,则可以在status字段中查看失败原因。

    包含失败原因的status字段示例

    status:
      deviceClassStatuses:
        - name: vg1
          nodeStatus:
            - node: my-node-1.example.com
              reason: no available devices found for volume group
              status: Failed
      state: Failed
  2. 可选:要查看 LVM 存储为每个设备类创建的存储类,请运行以下命令:

    $ oc get storageclass
    示例输出
    NAME          PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    lvms-vg1      topolvm.io           Delete          WaitForFirstConsumer   true                   31m
  3. 可选:要查看 LVM 存储为每个设备类创建的卷快照类,请运行以下命令:

    $ oc get volumesnapshotclass
    示例输出
    NAME          DRIVER               DELETIONPOLICY   AGE
    lvms-vg1      topolvm.io           Delete           24h

使用 Web 控制台创建 LVMCluster CR

您可以使用 OpenShift Container Platform Web 控制台在工作节点上创建LVMCluster CR。

您只能在一个 OpenShift Container Platform 集群上创建单个LVMCluster自定义资源 (CR) 实例。

先决条件
  • 您可以使用具有cluster-admin权限的帐户访问 OpenShift Container Platform 集群。

  • 您已安装 LVM 存储。

  • 您已在集群中安装了工作节点。

  • 您已阅读“关于 LVMCluster 自定义资源”部分。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 单击操作员已安装的操作员

  3. openshift-storage命名空间中,单击LVM 存储

  4. 单击创建 LVMCluster并选择表单视图YAML 视图

  5. 配置所需的LVMCluster CR 参数。

  6. 单击创建

  7. 可选:如果要编辑LVMCLuster CR,请执行以下操作:

    1. 单击LVMCluster选项卡。

    2. 操作菜单中,选择编辑 LVMCluster

    3. 单击YAML并编辑所需的LVMCLuster CR 参数。

    4. 单击保存

验证
  1. LVMCLuster页面上,检查LVMCluster CR 是否处于Ready状态。

  2. 可选:要查看 LVM 存储为每个设备类创建的可用存储类,请单击存储StorageClasses

  3. 可选:要查看 LVM 存储为每个设备类创建的可用卷快照类,请单击存储VolumeSnapshotClasses

使用 RHACM 创建 LVMCluster CR

使用 RHACM 安装 LVM 存储后,必须创建一个LVMCluster自定义资源 (CR)。

先决条件
  • 您已使用 RHACM 安装了 LVM 存储。

  • 您可以使用具有cluster-admin权限的帐户访问 RHACM 集群。

  • 您已阅读“关于 LVMCluster 自定义资源”部分。

步骤
  1. 使用您的 OpenShift Container Platform 凭据登录到 RHACM CLI。

  2. 创建包含创建LVMCluster CR 配置的ConfigurationPolicy CR YAML 文件

    创建LVMCluster CR 的示例ConfigurationPolicy CR YAML 文件
    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: lvms
    spec:
      object-templates:
      - complianceType: musthave
        objectDefinition:
          apiVersion: lvm.topolvm.io/v1alpha1
          kind: LVMCluster
          metadata:
            name: my-lvmcluster
            namespace: openshift-storage
          spec:
            storage:
              deviceClasses: (1)
    # ...
                deviceSelector: (2)
    # ...
                thinPoolConfig: (3)
    # ...
                nodeSelector: (4)
    # ...
      remediationAction: enforce
      severity: low
    1 包含将本地存储设备分配给 LVM 卷组的配置。
    2 包含配置,用于指定要添加到 LVM 卷组的设备的路径,并强制擦除添加到 LVM 卷组的设备。
    3 包含在 LVM 卷组中创建精简池的配置。如果您排除此字段,则逻辑卷将是粗略置备的。
    4 包含配置,用于选择要在其上创建 LVM 卷组的节点。如果此字段为空,则会考虑所有没有 no-schedule taint 的节点。
  3. 运行以下命令创建ConfigurationPolicy CR:

    $ oc create -f <file_name> -n <cluster_namespace> (1)
    1 安装 LVM 存储的 OpenShift Container Platform 集群的命名空间。

删除 LVMCluster 自定义资源的方法

您可以使用 OpenShift 命令行界面 (oc) 或 OpenShift Container Platform Web 控制台删除 LVMCluster 自定义资源 (CR)。如果您使用 Red Hat Advanced Cluster Management (RHACM) 安装了 LVM 存储,则也可以使用 RHACM 删除 LVMCluster CR。

删除 LVMCluster CR 后,LVM 存储将删除以下 CR:

  • storageClass

  • volumeSnapshotClass

  • LVMVolumeGroup

  • LVMVolumeGroupNodeStatus

使用 CLI 删除 LVMCluster CR

您可以使用 OpenShift 命令行界面 (oc) 删除 LVMCluster 自定义资源 (CR)。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 OpenShift Container Platform。

  • 您已删除由 LVM 存储配置的持久卷声明 (PVC)、卷快照和卷克隆。您还已删除正在使用这些资源的应用程序。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 运行以下命令删除 LVMCluster CR:

    $ oc delete lvmcluster <lvmclustername> -n openshift-storage
验证
  • 要验证 LVMCluster CR 是否已删除,请运行以下命令:

    $ oc get lvmcluster -n <namespace>
    示例输出
    No resources found in openshift-storage namespace.

使用 Web 控制台删除 LVMCluster CR

您可以使用 OpenShift Container Platform Web 控制台删除 LVMCluster 自定义资源 (CR)。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 OpenShift Container Platform。

  • 您已删除由 LVM 存储配置的持久卷声明 (PVC)、卷快照和卷克隆。您还已删除正在使用这些资源的应用程序。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 单击**Operators** → **Installed Operators** 查看所有已安装的 Operators。

  3. 单击 openshift-storage 命名空间中的**LVM Storage**。

  4. 单击LVMCluster选项卡。

  5. 从**Actions** 中选择**Delete LVMCluster**。

  6. 单击**Delete**。

验证
  • LVMCLuster 页面上,检查 LVMCluster CR 是否已删除。

使用 RHACM 删除 LVMCluster CR

如果您使用 Red Hat Advanced Cluster Management (RHACM) 安装了 LVM 存储,则可以使用 RHACM 删除 LVMCluster CR。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 RHACM 集群。

  • 您已删除由 LVM 存储配置的持久卷声明 (PVC)、卷快照和卷克隆。您还已删除正在使用这些资源的应用程序。

步骤
  1. 使用您的 OpenShift Container Platform 凭据登录到 RHACM CLI。

  2. 删除为 LVMCluster CR 创建的 ConfigurationPolicy CR YAML 文件。

    $ oc delete -f <file_name> -n <cluster_namespace> (1)
    1 安装 LVM 存储的 OpenShift Container Platform 集群的命名空间。
  3. 创建一个 Policy CR YAML 文件以删除 LVMCluster CR。

    删除 LVMCluster CR 的示例 Policy CR:
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-lvmcluster-delete
      annotations:
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    spec:
      remediationAction: enforce
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-lvmcluster-removal
            spec:
              remediationAction: enforce (1)
              severity: low
              object-templates:
                - complianceType: mustnothave
                  objectDefinition:
                    kind: LVMCluster
                    apiVersion: lvm.topolvm.io/v1alpha1
                    metadata:
                      name: my-lvmcluster
                      namespace: openshift-storage (2)
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-lvmcluster-delete
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-policy-lvmcluster-delete
    subjects:
      - apiGroup: policy.open-cluster-management.io
        kind: Policy
        name: policy-lvmcluster-delete
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-lvmcluster-delete
    spec:
      clusterConditions:
        - status: "True"
          type: ManagedClusterConditionAvailable
      clusterSelector: (3)
        matchExpressions:
          - key: mykey
            operator: In
            values:
              - myvalue
    1 policy-template 中的 spec.remediationAction 将被前面 spec.remediationAction 参数值覆盖。
    2 namespace 字段必须具有 openshift-storage 值。
    3 配置选择集群的要求。将卸载与选择条件匹配的集群上的 LVM 存储。
  4. 运行以下命令创建Policy CR

    $ oc create -f <file_name> -n <namespace>
  5. 创建一个 Policy CR YAML 文件以检查 LVMCluster CR 是否已删除。

    检查 LVMCluster CR 是否已删除的示例 Policy CR:
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-lvmcluster-inform
      annotations:
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    spec:
      remediationAction: inform
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-lvmcluster-removal-inform
            spec:
              remediationAction: inform (1)
              severity: low
              object-templates:
                - complianceType: mustnothave
                  objectDefinition:
                    kind: LVMCluster
                    apiVersion: lvm.topolvm.io/v1alpha1
                    metadata:
                      name: my-lvmcluster
                      namespace: openshift-storage (2)
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-lvmcluster-check
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-policy-lvmcluster-check
    subjects:
      - apiGroup: policy.open-cluster-management.io
        kind: Policy
        name: policy-lvmcluster-inform
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-lvmcluster-check
    spec:
      clusterConditions:
        - status: "True"
          type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          - key: mykey
            operator: In
            values:
              - myvalue
    1 policy-templatespec.remediationAction 将被前面 spec.remediationAction 参数值覆盖。
    2 namespace 字段必须具有 openshift-storage 值。
  6. 运行以下命令创建Policy CR

    $ oc create -f <file_name> -n <namespace>
验证
  • 运行以下命令检查 Policy CR 的状态:

    $ oc get policy -n <namespace>
    示例输出
    NAME                       REMEDIATION ACTION   COMPLIANCE STATE   AGE
    policy-lvmcluster-delete   enforce              Compliant          15m
    policy-lvmcluster-inform   inform               Compliant          15m

    Policy CR 必须处于 Compliant 状态。

配置存储

使用 LVMCluster 自定义资源 (CR) 创建 LVM 卷组后,您可以通过创建持久卷声明 (PVC) 来配置存储。

以下是您可以为每种文件系统类型请求的最小存储大小:

  • block:8 MiB

  • xfs:300 MiB

  • ext4:32 MiB

要创建 PVC,您必须创建一个 PersistentVolumeClaim 对象。

先决条件
  • 您已创建 LVMCluster CR。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 创建一个 PersistentVolumeClaim 对象:

    示例 PersistentVolumeClaim 对象:
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: lvm-block-1 (1)
      namespace: default
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Block (2)
      resources:
        requests:
          storage: 10Gi (3)
        limits:
          storage: 20Gi (4)
      storageClassName: lvms-vg1 (5)
    1 指定 PVC 的名称。
    2 要创建块 PVC,请将此字段设置为 Block。要创建文件 PVC,请将此字段设置为 Filesystem
    3 指定存储大小。如果该值小于最小存储大小,则请求的存储大小将四舍五入到最小存储大小。您可以配置的总存储大小受逻辑卷管理器 (LVM) 稀疏池的大小和超额配置因子的限制。
    4 可选:指定存储限制。将此字段设置为大于或等于最小存储大小的值。否则,PVC 创建将失败并出现错误。
    5 storageClassName 字段的值必须采用 lvms-<device_class_name> 的格式,其中 <device_class_name>LVMCluster CR 中 deviceClasses.name 字段的值。例如,如果 deviceClasses.name 字段设置为 vg1,则必须将 storageClassName 字段设置为 lvms-vg1

    存储类的 volumeBindingMode 字段设置为 WaitForFirstConsumer

  3. 运行以下命令创建 PVC:

    # oc create -f <file_name> -n <application_namespace>

    在您部署使用它们的 Pod 之前,已创建的 PVC 将保持 Pending 状态。

验证
  • 要验证 PVC 是否已创建,请运行以下命令:

    $ oc get pvc -n <namespace>
    示例输出
    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    lvm-block-1   Bound    pvc-e90169a8-fd71-4eea-93b8-817155f60e47   1Gi        RWO            lvms-vg1       5s

扩展集群存储的方法

OpenShift Container Platform 支持裸机用户预配基础架构上集群的附加工作节点。您可以通过添加具有可用存储的新工作节点或向现有工作节点添加新设备来扩展集群的存储。

逻辑卷管理器 (LVM) 存储在节点变为活动状态时检测并使用附加工作节点。

要向集群上的现有工作节点添加新设备,您必须将新设备的路径添加到 LVMCluster 自定义资源 (CR) 的 deviceSelector 字段中。

只有在创建 LVMCluster CR 时才能在 LVMCluster CR 中添加 deviceSelector 字段。如果您在创建 LVMCluster CR 时未添加 deviceSelector 字段,则必须删除 LVMCluster CR 并创建一个包含 deviceSelector 字段的新 LVMCluster CR。

如果您未在 LVMCluster CR 中添加 deviceSelector 字段,则 LVM 存储将在设备可用时自动添加新设备。

LVM 存储仅添加受支持的设备。有关不受支持的设备的信息,请参阅“LVM 存储不支持的设备”。

使用 CLI 扩展集群存储

您可以使用 OpenShift 命令行界面 (oc) 扩展集群上工作节点的存储容量。

先决条件
  • 每个集群都有其他未使用的设备可供逻辑卷管理器 (LVM) 存储使用。

  • 您已安装 OpenShift CLI (oc)。

  • 您已创建 LVMCluster 自定义资源 (CR)。

步骤
  1. 运行以下命令编辑 LVMCluster CR:

    $ oc edit <lvmcluster_file_name> -n <namespace>
  2. 将新设备的路径添加到 deviceSelector 字段中。

    示例 LVMCluster CR:
    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
    spec:
      storage:
        deviceClasses:
    # ...
          deviceSelector: (1)
            paths: (2)
            - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
            - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
            optionalPaths: (3)
            - /dev/disk/by-path/pci-0000:89:00.0-nvme-1
            - /dev/disk/by-path/pci-0000:90:00.0-nvme-1
    # ...
    1 包含用于指定要添加到 LVM 卷组的设备路径的配置。您可以在paths字段、optionalPaths字段或两者中指定设备路径。如果您未在pathsoptionalPaths中指定设备路径,逻辑卷管理器 (LVM) 存储会将受支持的未使用设备添加到 LVM 卷组。只有满足以下条件,LVM 存储才会将设备添加到 LVM 卷组。
    • 设备路径存在。

    • 该设备受 LVM 存储支持。有关不受支持的设备的信息,请参阅“LVM 存储不支持的设备”。

    2 指定设备路径。如果此字段中指定的设备路径不存在,或者 LVM 存储不支持该设备,则LVMCluster CR 将变为Failed状态。
    3 指定可选设备路径。如果此字段中指定的设备路径不存在,或者 LVM 存储不支持该设备,则 LVM 存储会忽略该设备,而不会导致错误。

    设备添加到 LVM 卷组后,将无法将其删除。

  3. 保存LVMCluster CR。

使用 Web 控制台扩展集群的存储容量

您可以使用 OpenShift Container Platform Web 控制台扩展集群上工作节点的存储容量。

先决条件
  • 每个集群都有其他未使用的设备可供逻辑卷管理器 (LVM) 存储使用。

  • 您已创建 LVMCluster 自定义资源 (CR)。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 单击操作员已安装的操作员

  3. 单击 openshift-storage 命名空间中的**LVM Storage**。

  4. 单击**LVMCluster**选项卡以查看在集群上创建的LVMCluster CR。

  5. 操作菜单中,选择编辑 LVMCluster

  6. 单击**YAML**选项卡。

  7. 编辑LVMCluster CR 以在deviceSelector字段中添加新的设备路径。

    示例 LVMCluster CR:
    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
    spec:
      storage:
        deviceClasses:
    # ...
          deviceSelector: (1)
            paths: (2)
            - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
            - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
            optionalPaths: (3)
            - /dev/disk/by-path/pci-0000:89:00.0-nvme-1
            - /dev/disk/by-path/pci-0000:90:00.0-nvme-1
    # ...
    1 包含用于指定要添加到 LVM 卷组的设备路径的配置。您可以在paths字段、optionalPaths字段或两者中指定设备路径。如果您未在pathsoptionalPaths中指定设备路径,逻辑卷管理器 (LVM) 存储会将受支持的未使用设备添加到 LVM 卷组。只有满足以下条件,LVM 存储才会将设备添加到 LVM 卷组。
    • 设备路径存在。

    • 该设备受 LVM 存储支持。有关不受支持的设备的信息,请参阅“LVM 存储不支持的设备”。

    2 指定设备路径。如果此字段中指定的设备路径不存在,或者 LVM 存储不支持该设备,则LVMCluster CR 将变为Failed状态。
    3 指定可选设备路径。如果此字段中指定的设备路径不存在,或者 LVM 存储不支持该设备,则 LVM 存储会忽略该设备,而不会导致错误。

    设备添加到 LVM 卷组后,将无法将其删除。

  8. 单击保存

使用 RHACM 扩展集群的存储容量

您可以使用 RHACM 扩展集群上工作节点的存储容量。

先决条件
  • 您可以使用具有cluster-admin权限的帐户访问 RHACM 集群。

  • 您已使用 RHACM 创建了LVMCluster自定义资源 (CR)。

  • 每个集群都有其他未使用的设备可供逻辑卷管理器 (LVM) 存储使用。

步骤
  1. 使用您的 OpenShift Container Platform 凭据登录到 RHACM CLI。

  2. 通过运行以下命令来编辑您使用 RHACM 创建的LVMCluster CR:

    $ oc edit -f <file_name> -ns <namespace> (1)
    1 <file_name>替换为LVMCluster CR 的名称。
  3. LVMCluster CR 中,在deviceSelector字段中添加新设备的路径。

    示例 LVMCluster CR:
    apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: lvms
          spec:
            object-templates:
               - complianceType: musthave
                 objectDefinition:
                   apiVersion: lvm.topolvm.io/v1alpha1
                   kind: LVMCluster
                   metadata:
                     name: my-lvmcluster
                     namespace: openshift-storage
                   spec:
                     storage:
                       deviceClasses:
    # ...
                         deviceSelector: (1)
                           paths: (2)
                           - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
                           optionalPaths: (3)
                           - /dev/disk/by-path/pci-0000:89:00.0-nvme-1
    # ...
    1 包含用于指定要添加到 LVM 卷组的设备路径的配置。您可以在paths字段、optionalPaths字段或两者中指定设备路径。如果您未在pathsoptionalPaths中指定设备路径,逻辑卷管理器 (LVM) 存储会将受支持的未使用设备添加到 LVM 卷组。只有满足以下条件,LVM 存储才会将设备添加到 LVM 卷组。
    • 设备路径存在。

    • 该设备受 LVM 存储支持。有关不受支持的设备的信息,请参阅“LVM 存储不支持的设备”。

    2 指定设备路径。如果此字段中指定的设备路径不存在,或者 LVM 存储不支持该设备,则LVMCluster CR 将变为Failed状态。
    3 指定可选设备路径。如果此字段中指定的设备路径不存在,或者 LVM 存储不支持该设备,则 LVM 存储会忽略该设备,而不会导致错误。

    设备添加到 LVM 卷组后,将无法将其删除。

  4. 保存LVMCluster CR。

扩展持久卷声明

扩展集群的存储容量后,您可以扩展现有的持久卷声明 (PVC)。

要扩展 PVC,必须更新 PVC 中的storage字段。

先决条件
  • 使用动态供应。

  • 与 PVC 关联的StorageClass对象具有设置为trueallowVolumeExpansion字段。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 通过运行以下命令将spec.resources.requests.storage字段的值更新为大于当前值的值:

    $ oc patch <pvc_name> -n <application_namespace> -p \ (1)
    '{ "spec": { "resources": { "requests": { "storage": "<desired_size>" }}}} --type=merge' (2)
    
    1 <pvc_name>替换为您要扩展的 PVC 的名称。
    2 <desired_size>替换为扩展 PVC 的新大小。
验证
  • 要验证调整大小是否已完成,请运行以下命令:

    $ oc get pvc <pvc_name> -n <application_namespace> -o=jsonpath={.status.capacity.storage}

    在扩展期间,LVM 存储会向 PVC 添加Resizing条件。它会在 PVC 扩展后删除Resizing条件。

删除持久卷声明

您可以使用 OpenShift CLI (oc) 删除持久卷声明 (PVC)。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 OpenShift Container Platform。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 通过运行以下命令删除 PVC:

    $ oc delete pvc <pvc_name> -n <namespace>
验证
  • 要验证 PVC 是否已删除,请运行以下命令:

    $ oc get pvc -n <namespace>

    此命令的输出中不应存在已删除的 PVC。

关于卷快照

您可以创建由 LVM 存储供应的持久卷声明 (PVC) 的快照。

您可以使用卷快照执行以下操作:

  • 备份您的应用程序数据。

    卷快照位于与原始数据相同的设备上。要将卷快照用作备份,必须将其移动到安全位置。您可以使用 OpenShift API for Data Protection (OADP) 备份和还原解决方案。有关 OADP 的信息,请参阅“OADP 功能”。

  • 恢复到拍摄卷快照的状态。

您还可以创建卷克隆的卷快照。

在多节点拓扑中创建卷快照的限制

LVM 存储在多节点拓扑中创建卷快照时存在以下限制:

  • 创建卷快照基于 LVM 稀疏池功能。

  • 创建卷快照后,节点必须有额外的存储空间才能进一步更新原始数据源。

  • 您只能在部署原始数据源的节点上创建卷快照。

  • 依赖于使用快照数据的 PVC 的 Pod 只能在部署原始数据源的节点上调度。

其他资源

创建卷快照

您可以根据稀疏池的可用容量和过度配置限制创建卷快照。要创建卷快照,必须创建VolumeSnapshotClass对象。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 OpenShift Container Platform。

  • 您已确保持久卷声明 (PVC) 处于Bound状态。这是获得一致快照所必需的。

  • 您已停止对 PVC 的所有 I/O 操作。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 创建一个VolumeSnapshot对象。

    VolumeSnapshot对象的示例:
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: lvm-block-1-snap (1)
    spec:
      source:
        persistentVolumeClaimName: lvm-block-1 (2)
      volumeSnapshotClassName: lvms-vg1 (3)
    1 指定卷快照的名称。
    2 指定源 PVC 的名称。LVM 存储会创建此 PVC 的快照。
    3 将此字段设置为卷快照类的名称。

    要获取可用卷快照类的列表,请运行以下命令:

    $ oc get volumesnapshotclass
  3. 在创建源 PVC 的命名空间中创建卷快照,请运行以下命令:

    $ oc create -f <file_name> -n <namespace>

    LVM 存储会创建 PVC 的只读副本作为卷快照。

验证
  • 要验证卷快照是否已创建,请运行以下命令:

    $ oc get volumesnapshot -n <namespace>
    示例输出
    NAME               READYTOUSE   SOURCEPVC     SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS   SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    lvm-block-1-snap   true         lvms-test-1                           1Gi           lvms-vg1        snapcontent-af409f97-55fc-40cf-975f-71e44fa2ca91   19s            19s

    您创建的卷快照的READYTOUSE字段的值必须为true

恢复卷快照

要恢复卷快照,必须创建一个持久卷声明 (PVC),并将dataSource.name字段设置为卷快照的名称。

恢复的 PVC 与卷快照和源 PVC 相互独立。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 OpenShift Container Platform。

  • 您已创建了一个卷快照。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 创建一个具有用于恢复卷快照的配置的PersistentVolumeClaim对象。

    用于恢复卷快照的PersistentVolumeClaim对象的示例:
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: lvm-block-1-restore
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Block
      Resources:
        Requests:
          storage: 2Gi (1)
      storageClassName: lvms-vg1 (2)
      dataSource:
        name: lvm-block-1-snap (3)
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
    1 指定恢复的 PVC 的存储大小。请求的 PVC 的存储大小必须大于或等于要恢复的卷快照的存储大小。如果需要更大的 PVC,您也可以在恢复卷快照后调整 PVC 的大小。
    2 将此字段设置为要恢复的卷快照的源 PVC 中的storageClassName字段的值。
    3 将此字段设置为要恢复的卷快照的名称。
  3. 在创建卷快照的命名空间中创建 PVC,请运行以下命令:

    $ oc create -f <file_name> -n <namespace>
验证
  • 要验证卷快照是否已恢复,请运行以下命令:

    $ oc get pvc -n <namespace>
    示例输出
    NAME                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    lvm-block-1-restore   Bound    pvc-e90169a8-fd71-4eea-93b8-817155f60e47   1Gi        RWO            lvms-vg1       5s

删除卷快照

您可以删除持久卷声明 (PVC) 的卷快照。

删除持久卷声明 (PVC) 时,LVM 存储只会删除 PVC 本身,而不会删除 PVC 的快照。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 OpenShift Container Platform。

  • 您已确保要删除的卷快照未被使用。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 运行以下命令删除卷快照:

    $ oc delete volumesnapshot <volume_snapshot_name> -n <namespace>
验证
  • 要验证卷快照是否已删除,请运行以下命令:

    $ oc get volumesnapshot -n <namespace>

    此命令的输出中不应包含已删除的卷快照。

关于卷克隆

卷克隆是现有持久卷声明 (PVC) 的副本。您可以创建卷克隆来创建数据的某个时间点的副本。

在多节点拓扑中创建卷克隆的限制

LVM 存储在多节点拓扑中创建卷克隆时具有以下限制:

  • 创建卷克隆基于 LVM 稀疏池功能。

  • 创建卷克隆后,节点必须有额外的存储空间才能进一步更新原始数据源。

  • 您只能在部署了原始数据源的节点上创建卷克隆。

  • 依赖于使用克隆数据的 PVC 的 Pod 只能调度到部署了原始数据源的节点上。

创建卷克隆

要克隆持久卷声明 (PVC),您必须在创建源 PVC 的命名空间中创建 PersistentVolumeClaim 对象。

克隆的 PVC 具有写入访问权限。

先决条件
  • 您已确保源 PVC 处于 Bound 状态。这对于一致的克隆是必需的。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 创建一个 PersistentVolumeClaim 对象:

    创建卷克隆的示例 PersistentVolumeClaim 对象:
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: lvm-pvc-clone
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: lvms-vg1 (1)
      volumeMode: Filesystem (2)
      dataSource:
        kind: PersistentVolumeClaim
        name: lvm-pvc (3)
      resources:
        requests:
          storage: 1Gi (4)
    1 将此字段设置为源 PVC 中 storageClassName 字段的值。
    2 将此字段设置为源 PVC 中的 volumeMode 字段。
    3 指定源 PVC 的名称。
    4 指定克隆 PVC 的存储大小。克隆 PVC 的存储大小必须大于或等于源 PVC 的存储大小。
  3. 在创建源 PVC 的命名空间中运行以下命令创建 PVC:

    $ oc create -f <file_name> -n <namespace>
验证
  • 要验证卷克隆是否已创建,请运行以下命令:

    $ oc get pvc -n <namespace>
    示例输出
    NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    lvm-block-1-clone   Bound    pvc-e90169a8-fd71-4eea-93b8-817155f60e47   1Gi        RWO            lvms-vg1       5s

删除卷克隆

您可以删除卷克隆。

删除持久卷声明 (PVC) 时,LVM 存储只会删除源持久卷声明 (PVC),而不会删除 PVC 的克隆。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 OpenShift Container Platform。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 运行以下命令删除克隆的 PVC:

    # oc delete pvc <clone_pvc_name> -n <namespace>
验证
  • 要验证卷克隆是否已删除,请运行以下命令:

    $ oc get pvc -n <namespace>

    此命令的输出中不应包含已删除的卷克隆。

更新 LVM 存储

您可以更新 LVM 存储以确保与 OpenShift Container Platform 版本兼容。

先决条件
  • 您已更新 OpenShift Container Platform 集群。

  • 您已安装了早期版本的 LVM 存储。

  • 您已安装 OpenShift CLI (oc)。

  • 您可以使用具有 cluster-admin 权限的帐户访问集群。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 运行以下命令更新安装 LVM 存储时创建的 Subscription 自定义资源 (CR):

    $ oc patch subscription lvms-operator -n openshift-storage --type merge --patch '{"spec":{"channel":"<update_channel>"}}' (1)
    1 <update_channel> 替换为您要安装的 LVM 存储版本。例如,stable-4.17
  3. 查看更新事件以检查安装是否完成,请运行以下命令:

    $ oc get events -n openshift-storage
    示例输出
    ...
    8m13s       Normal    RequirementsUnknown   clusterserviceversion/lvms-operator.v4.17   requirements not yet checked
    8m11s       Normal    RequirementsNotMet    clusterserviceversion/lvms-operator.v4.17   one or more requirements couldn't be found
    7m50s       Normal    AllRequirementsMet    clusterserviceversion/lvms-operator.v4.17   all requirements found, attempting install
    7m50s       Normal    InstallSucceeded      clusterserviceversion/lvms-operator.v4.17   waiting for install components to report healthy
    7m49s       Normal    InstallWaiting        clusterserviceversion/lvms-operator.v4.17   installing: waiting for deployment lvms-operator to become ready: deployment "lvms-operator" waiting for 1 outdated replica(s) to be terminated
    7m39s       Normal    InstallSucceeded      clusterserviceversion/lvms-operator.v4.17   install strategy completed with no errors
    ...
验证
  • 运行以下命令验证 LVM 存储版本:

    $ oc get subscription lvms-operator -n openshift-storage -o jsonpath='{.status.installedCSV}'
    示例输出
    lvms-operator.v4.17

监控 LVM 存储

要启用集群监控,您必须在安装 LVM 存储的命名空间中添加以下标签:

openshift.io/cluster-monitoring=true

有关在 RHACM 中启用集群监控的信息,请参阅 可观察性添加自定义指标

指标

您可以通过查看指标来监控 LVM 存储。

下表描述了 topolvm 指标:

表 5. topolvm 指标
告警 描述

topolvm_thinpool_data_percent

指示 LVM 稀疏池中已使用的数据空间百分比。

topolvm_thinpool_metadata_percent

指示 LVM 稀疏池中已使用的元数据空间百分比。

topolvm_thinpool_size_bytes

指示 LVM 稀疏池的大小(以字节为单位)。

topolvm_volumegroup_available_bytes

指示 LVM 卷组中可用的空间(以字节为单位)。

topolvm_volumegroup_size_bytes

指示 LVM 卷组的大小(以字节为单位)。

topolvm_thinpool_overprovisioned_available

指示 LVM 稀疏池中可用的超额配置大小(以字节为单位)。

指标每 10 分钟更新一次,或者在发生更改(例如创建新的逻辑卷)时更新。

告警

当稀疏池和卷组达到最大存储容量时,进一步的操作将失败。这可能导致数据丢失。

当稀疏池和卷组的使用率超过某个值时,LVM 存储会发送以下警报:

表 6. LVM 存储警报
告警 描述

VolumeGroupUsageAtThresholdNearFull

当卷组和稀疏池的使用率在节点上都超过 75% 时,将触发此警报。需要删除数据或扩展卷组。

VolumeGroupUsageAtThresholdCritical

当卷组和稀疏池的使用率在节点上都超过 85% 时,将触发此警报。在这种情况下,卷组已严重满。需要删除数据或扩展卷组。

ThinPoolDataUsageAtThresholdNearFull

当卷组中稀疏池数据的使用率在节点上超过 75% 时,将触发此警报。需要删除数据或扩展稀疏池。

ThinPoolDataUsageAtThresholdCritical

当卷组中稀疏池数据的使用率在节点上超过 85% 时,将触发此警报。需要删除数据或扩展稀疏池。

ThinPoolMetaDataUsageAtThresholdNearFull

当卷组中稀疏池元数据的使用率在节点上超过 75% 时,将触发此警报。需要删除数据或扩展稀疏池。

ThinPoolMetaDataUsageAtThresholdCritical

当卷组中稀疏池元数据的使用率在节点上超过 85% 时,将触发此警报。需要删除数据或扩展稀疏池。

使用 CLI 卸载 LVM 存储

您可以使用 OpenShift CLI (oc) 卸载 LVM 存储。

先决条件
  • 您已以具有 cluster-admin 权限的用户身份登录到 oc

  • 您已删除由 LVM 存储配置的持久卷声明 (PVC)、卷快照和卷克隆。您还已删除正在使用这些资源的应用程序。

  • 您已删除 LVMCluster 自定义资源 (CR)。

步骤
  1. 运行以下命令获取 LVM 存储操作员的 currentCSV 值:

    $ oc get subscription.operators.coreos.com lvms-operator -n <namespace> -o yaml | grep currentCSV
    示例输出
    currentCSV: lvms-operator.v4.15.3
  2. 运行以下命令删除订阅:

    $ oc delete subscription.operators.coreos.com lvms-operator -n <namespace>
    示例输出
    subscription.operators.coreos.com "lvms-operator" deleted
  3. 运行以下命令删除目标命名空间中 LVM 存储操作员的 CSV:

    $ oc delete clusterserviceversion <currentCSV> -n <namespace> (1)
    1 <currentCSV> 替换为 LVM 存储操作员的 currentCSV 值。
    示例输出
    clusterserviceversion.operators.coreos.com "lvms-operator.v4.15.3" deleted
验证
  • 要验证 LVM 存储操作员是否已卸载,请运行以下命令:

    $ oc get csv -n <namespace>

    如果 LVM 存储操作员已成功卸载,则它不会出现在此命令的输出中。

使用 Web 控制台卸载 LVM 存储

您可以使用 OpenShift Container Platform Web 控制台卸载 LVM 存储。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 OpenShift Container Platform。

  • 您已删除由 LVM 存储配置的持久卷声明 (PVC)、卷快照和卷克隆。您还已删除正在使用这些资源的应用程序。

  • 您已删除 LVMCluster 自定义资源 (CR)。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 单击操作员已安装的操作员

  3. 单击 openshift-storage 命名空间中的**LVM Storage**。

  4. 点击“详细信息”选项卡。

  5. 从“操作”菜单中,选择“卸载操作员”。

  6. 可选:出现提示时,选中**删除此操作符的所有操作数实例**复选框以删除 LVM 存储的操作数实例。

  7. 点击**卸载**。

卸载使用 RHACM 安装的 LVM 存储

要卸载使用 RHACM 安装的 LVM 存储,必须删除为安装和配置 LVM 存储而创建的 RHACM Policy 自定义资源 (CR)。

先决条件
  • 您作为具有 cluster-admin 权限的用户可以访问 RHACM 集群。

  • 您已删除由 LVM 存储配置的持久卷声明 (PVC)、卷快照和卷克隆。您还已删除正在使用这些资源的应用程序。

  • 您已删除使用 RHACM 创建的LVMCluster CR。

步骤
  1. 登录到 OpenShift 命令行界面 (oc)。

  2. 使用以下命令删除为安装和配置 LVM 存储而创建的 RHACM Policy CR

    $ oc delete -f <policy> -n <namespace> (1)
    1 <policy>替换为Policy CR YAML 文件的名称。
  3. 创建一个包含卸载 LVM 存储配置的Policy CR YAML 文件

    卸载 LVM 存储的示例Policy CR
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-uninstall-lvms
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
        - key: mykey
          operator: In
          values:
          - myvalue
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-uninstall-lvms
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-uninstall-lvms
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: uninstall-lvms
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
      name: uninstall-lvms
    spec:
      disabled: false
      policy-templates:
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: uninstall-lvms
          spec:
            object-templates:
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: v1
                kind: Namespace
                metadata:
                  name: openshift-storage
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: operators.coreos.com/v1
                kind: OperatorGroup
                metadata:
                  name: openshift-storage-operatorgroup
                  namespace: openshift-storage
                spec:
                  targetNamespaces:
                  - openshift-storage
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: operators.coreos.com/v1alpha1
                kind: Subscription
                metadata:
                  name: lvms-operator
                  namespace: openshift-storage
            remediationAction: enforce
            severity: low
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: policy-remove-lvms-crds
          spec:
            object-templates:
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: logicalvolumes.topolvm.io
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: lvmclusters.lvm.topolvm.io
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: lvmvolumegroupnodestatuses.lvm.topolvm.io
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: lvmvolumegroups.lvm.topolvm.io
            remediationAction: enforce
            severity: high
  4. 运行以下命令创建Policy CR

    $ oc create -f <policy> -ns <namespace>

使用 must-gather 下载日志文件和诊断信息

当 LVM 存储无法自动解决问题时,请使用 must-gather 工具收集日志文件和诊断信息,以便您或 Red Hat 支持人员审查问题并确定解决方案。

步骤
  • 从连接到 LVM 存储集群的客户端运行must-gather命令

    $ oc adm must-gather --image=registry.redhat.io/lvms4/lvms-must-gather-rhel9:v4.17 --dest-dir=<directory_name>

持久性存储故障排除

在使用逻辑卷管理器 (LVM) 存储配置持久性存储时,您可能会遇到一些需要故障排除的问题。

调查卡在 Pending 状态的 PVC

持久卷声明 (PVC) 可能会因以下原因卡在Pending状态

  • 计算资源不足。

  • 网络问题。

  • 存储类或节点选择器不匹配。

  • 没有可用的持久卷 (PV)。

  • 具有 PV 的节点处于Not Ready状态。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已以具有cluster-admin权限的用户身份登录到 OpenShift CLI (oc)。

步骤
  1. 通过运行以下命令检索 PVC 列表

    $ oc get pvc
    示例输出
    NAME        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    lvms-test   Pending                                      lvms-vg1       11s
  2. 通过运行以下命令检查与卡在Pending状态的 PVC 关联的事件

    $ oc describe pvc <pvc_name> (1)
    1 <pvc_name>替换为 PVC 的名称。例如,lvms-vg1
    示例输出
    Type     Reason              Age               From                         Message
    ----     ------              ----              ----                         -------
    Warning  ProvisioningFailed  4s (x2 over 17s)  persistentvolume-controller  storageclass.storage.k8s.io "lvms-vg1" not found

从丢失的存储类中恢复

如果遇到存储类未找到错误,请检查LVMCluster自定义资源 (CR),并确保所有逻辑卷管理器 (LVM) 存储 pod 都处于Running状态。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已以具有cluster-admin权限的用户身份登录到 OpenShift CLI (oc)。

步骤
  1. 通过运行以下命令验证LVMCluster CR 是否存在

    $ oc get lvmcluster -n openshift-storage
    示例输出
    NAME            AGE
    my-lvmcluster   65m
  2. 如果LVMCluster CR 不存在,请创建LVMCluster CR。有关更多信息,请参阅“创建 LVMCluster 自定义资源的方法”。

  3. openshift-storage命名空间中,通过运行以下命令检查所有 LVM 存储 pod 是否都处于Running状态

    $ oc get pods -n openshift-storage
    示例输出
    NAME                                  READY   STATUS    RESTARTS      AGE
    lvms-operator-7b9fb858cb-6nsml        3/3     Running   0             70m
    topolvm-controller-5dd9cf78b5-7wwr2   5/5     Running   0             66m
    topolvm-node-dr26h                    4/4     Running   0             66m
    vg-manager-r6zdv                      1/1     Running   0             66m

    此命令的输出必须包含以下 pod 的运行实例

    • lvms-operator

    • vg-manager

      如果vg-manager pod 在加载配置文件时卡住,则是因为无法找到可供 LVM 存储使用的可用磁盘。要检索解决此问题所需的信息,请通过运行以下命令查看vg-manager pod 的日志

      $ oc logs -l app.kubernetes.io/component=vg-manager -n openshift-storage

从节点故障中恢复

由于集群中的节点故障,持久卷声明 (PVC) 可能会卡在Pending状态。

要识别故障节点,您可以检查topolvm-node pod 的重启次数。重启次数增加表明底层节点可能存在问题,这可能需要进一步调查和故障排除。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已以具有cluster-admin权限的用户身份登录到 OpenShift CLI (oc)。

步骤
  • 通过运行以下命令检查topolvm-node pod 实例的重启次数

    $ oc get pods -n openshift-storage
    示例输出
    NAME                                  READY   STATUS    RESTARTS      AGE
    lvms-operator-7b9fb858cb-6nsml        3/3     Running   0             70m
    topolvm-controller-5dd9cf78b5-7wwr2   5/5     Running   0             66m
    topolvm-node-dr26h                    4/4     Running   0             66m
    topolvm-node-54as8                    4/4     Running   0             66m
    topolvm-node-78fft                    4/4     Running   17 (8s ago)   66m
    vg-manager-r6zdv                      1/1     Running   0             66m
    vg-manager-990ut                      1/1     Running   0             66m
    vg-manager-an118                      1/1     Running   0             66m
后续步骤
  • 如果即使在解决节点的任何问题后 PVC 仍然卡在Pending状态,则必须执行强制清理。有关更多信息,请参阅“执行强制清理”。

其他资源

从磁盘故障中恢复

如果在检查与持久卷声明 (PVC) 关联的事件时看到错误消息,则底层卷或磁盘可能存在问题。

磁盘和卷配置问题会导致一般的错误消息,例如无法使用存储类 <storage_class_name> 配置卷。此一般错误消息后跟有具体的卷故障错误消息。

下表描述了卷故障错误消息

表 7. 卷故障错误消息
错误消息 描述

无法检查卷是否存在

表示在验证卷是否已存在时出现问题。卷验证失败可能是由网络连接问题或其他故障引起的。

无法绑定卷

如果可用的持久卷 (PV) 不符合 PVC 的要求,则可能会发生无法绑定卷的情况。

FailedMountFailedAttachVolume

此错误表示尝试将卷挂载到节点时出现问题。如果磁盘已损坏,则当 pod 尝试使用 PVC 时,可能会出现此错误。

FailedUnMount

此错误表示尝试从节点卸载卷时出现问题。如果磁盘已损坏,则当 pod 尝试使用 PVC 时,可能会出现此错误。

卷已独占地附加到一个节点,无法附加到另一个节点

此错误可能出现在不支持ReadWriteMany访问模式的存储解决方案中。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已以具有cluster-admin权限的用户身份登录到 OpenShift CLI (oc)。

步骤
  1. 通过运行以下命令检查与 PVC 关联的事件

    $ oc describe pvc <pvc_name> (1)
    1 <pvc_name>替换为 PVC 的名称。
  2. 建立与发生问题的宿主机直接连接。

  3. 解决磁盘问题。

后续步骤
  • 如果即使在解决磁盘问题后卷故障消息仍然存在或再次出现,则必须执行强制清理。有关更多信息,请参阅“执行强制清理”。

其他资源

执行强制清理

如果即使在完成故障排除程序后磁盘或节点相关问题仍然存在,则必须执行强制清理。强制清理用于解决持久性问题并确保逻辑卷管理器 (LVM) 存储的正常运行。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已以具有cluster-admin权限的用户身份登录到 OpenShift CLI (oc)。

  • 您已删除使用 LVM 存储创建的所有持久卷声明 (PVC)。

  • 您已停止使用使用 LVM 存储创建的 PVC 的 pod。

步骤
  1. 通过运行以下命令切换到openshift-storage命名空间

    $ oc project openshift-storage
  2. 通过运行以下命令检查LogicalVolume自定义资源 (CR) 是否存在

    $ oc get logicalvolume
    1. 如果存在LogicalVolume CR,请运行以下命令将其删除

      $ oc delete logicalvolume <name> (1)
      1 <name>替换为LogicalVolume CR 的名称。
    2. 删除LogicalVolume CR 后,请运行以下命令移除其最终器 (finalizers)

      $ oc patch logicalvolume <name> -p '{"metadata":{"finalizers":[]}}' --type=merge (1)
      1 <name>替换为LogicalVolume CR 的名称。
  3. 运行以下命令检查是否存在LVMVolumeGroup CR

    $ oc get lvmvolumegroup
    1. 如果存在LVMVolumeGroup CR,请运行以下命令将其删除

      $ oc delete lvmvolumegroup <name> (1)
      1 <name>替换为LVMVolumeGroup CR 的名称。
    2. 删除LVMVolumeGroup CR 后,请运行以下命令移除其最终器 (finalizers)

      $ oc patch lvmvolumegroup <name> -p '{"metadata":{"finalizers":[]}}' --type=merge (1)
      1 <name>替换为LVMVolumeGroup CR 的名称。
  4. 运行以下命令删除任何LVMVolumeGroupNodeStatus CR

    $ oc delete lvmvolumegroupnodestatus --all
  5. 运行以下命令删除 LVMCluster CR:

    $ oc delete lvmcluster --all
    1. 删除LVMCluster CR 后,请运行以下命令移除其最终器 (finalizers)

      $ oc patch lvmcluster <name> -p '{"metadata":{"finalizers":[]}}' --type=merge (1)
      1 <name>替换为LVMCluster CR 的名称。