5.4. 使用逻辑卷管理器存储的持久性存储


逻辑卷管理器存储 (LVM) 存储使用 TopoLVM CSI 驱动程序在单节点 OpenShift 集群中动态置备本地存储。

LVM Storage 使用逻辑卷管理器创建精简配置的卷,并在有限的资源单节点 OpenShift 集群中提供块存储的动态置备。

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

5.4.1. 逻辑卷管理器存储安装

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

您可以使用 OpenShift Container Platform CLI (oc)、OpenShift Container Platform Web 控制台或 Red Hat Advanced Cluster Management (RHACM)将 LVM 存储部署到单节点 OpenShift 集群上。

5.4.1.1. 安装 LVM 存储的先决条件

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

  • 确保至少有 10 milliCPU 和 100 MiB RAM。
  • 确保每个受管集群都有用于置备存储的专用磁盘。LVM 存储只使用那些为空且不包含文件系统签名的磁盘。为确保磁盘为空,且不包含文件系统签名,请在使用磁盘前擦除磁盘。
  • 在私有 CI 环境中安装 LVM 存储前,您可以重复使用您在之前的 LVM 存储安装中配置的存储设备,请确保您已擦除未使用的磁盘。如果您在安装 LVM 存储前没有擦除磁盘,则无法重复使用磁盘,而无需人工干预。

    注意

    您不能擦除正在使用的磁盘。

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

您可以使用 Red Hat OpenShift Container Platform OperatorHub 安装 LVM Storage。

先决条件

  • 您可以访问单节点 OpenShift 集群。
  • 您可以使用具有 cluster-admin 和 Operator 安装权限的帐户。

流程

  1. 登录 OpenShift Container Platform Web 控制台。
  2. Operators OperatorHub
  3. Filter by keyword 框中滚动或键入 LVM Storage 来查找 LVM Storage。
  4. Install
  5. Install Operator 页面中设置以下选项:

    1. Update Channelstable-4.12
    2. Installation ModeA specific namespace on the cluster
    3. Installed NamespaceOperator recommended namespace openshift-storage。如果 openshift-storage 命名空间不存在,它会在 Operator 安装过程中创建。
    4. 批准策略AutomaticManual

      如果选择 Automatic 更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。

      如果选择 手动 更新,则 OLM 会创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,才能将 Operator 更新至更新的版本。

  6. Install

验证步骤

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

5.4.1.3. 使用 RHACM 安装 LVM 存储

LVM Storage 使用 Red Hat Advanced Cluster Management (RHACM) 部署在单节点 OpenShift 集群上。当 Operator 应用到与 PlacementRule 资源中指定的选择器匹配的受管集群时,您可以在 RHACM 上创建 Policy 对象。该策略也应用于稍后导入并满足放置规则的集群。

先决条件

  • 使用具有 cluster-admin 和 Operator 安装权限的账户访问 RHACM 集群。
  • LVM 存储要使用在每个单节点 OpenShift 集群上的专用磁盘。
  • 单节点 OpenShift 集群需要由 RHACM 管理,无论是导入或创建的。

流程

  1. 使用 OpenShift Container Platform 凭证登录到 RHACM CLI。
  2. 创建要在其中创建策略的命名空间。

    # oc create ns lvms-policy-ns
    Copy to Clipboard Toggle word wrap
  3. 要创建策略,请使用名称(如 policy-lvms-operator.yaml )将以下 YAML 保存到文件中:

    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:
                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:
                apiVersion: operators.coreos.com/v1
                kind: OperatorGroup
                metadata:
                  name: openshift-storage-operatorgroup
                  namespace: openshift-storage
                spec:
                  targetNamespaces:
                  - openshift-storage
            - complianceType: musthave
              objectDefinition:
                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
      - objectDefinition:
          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:
                       - name: vg1
                         deviceSelector: 
    2
    
                           paths:
                           - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
                           - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
                         thinPoolConfig:
                           name: thin-pool-1
                           sizePercent: 90
                           overprovisionRatio: 10
                         nodeSelector: 
    3
    
                           nodeSelectorTerms:
                           - matchExpressions:
                               - key: app
                                 operator: In
                                 values:
                                 - test1
            remediationAction: enforce
            severity: low
    Copy to Clipboard Toggle word wrap
    1
    替换 PlacementRule.spec.clusterSelector 中的键和值,以匹配要在其上安装 LVM Storage 的单节点 OpenShift 集群上设置的标签。
    2
    要控制或限制卷组到首选磁盘,您可以在 LVMCluster YAML 的 deviceSelector 部分中手动指定磁盘的本地路径。
    3
    要添加节点过滤器(这是附加 worker 节点的子集),请在 nodeSelector 部分指定所需的过滤器。当新节点显示时,LVM Storage 会检测并使用额外的 worker 节点。
    重要

    这个 nodeSelector 节点过滤器匹配与 pod 标签匹配不同。

  4. 运行以下命令在命名空间中创建策略:

    # oc create -f policy-lvms-operator.yaml -n lvms-policy-ns 
    1
    Copy to Clipboard Toggle word wrap
    1
    policy-lvms-operator.yaml 是保存策略的文件的名称。

    这会在 lvms-policy-ns 命名空间中创建 PolicyPlacementRulePlacementBinding 对象。该策略会在与放置规则匹配的集群中创建一个 NamespaceOperatorGroupSubscriptionLVMCluster 资源。这会在与选择条件匹配的单节点 OpenShift 集群上部署 Operator,并将其配置为设置所需资源以置备存储。Operator 使用 LVMCluster CR 中指定的所有磁盘。如果没有指定磁盘,Operator 将使用单节点 OpenShift 节点上的所有未使用的磁盘。

    重要

    将设备添加到 LVMCluster 后,无法删除它。

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

  • 您可以置备的总存储大小受底层逻辑卷管理器(LVM)精简池的大小以及过度置备因素的限制。
  • 逻辑卷的大小取决于物理扩展(PE)和逻辑扩展(LE)的大小。

    • 您可以在创建物理和虚拟设备的过程中定义 PE 和 LE 的大小。
    • 默认的 PE 和 LE 大小为 4 MB。
    • 如果增加 PE 的大小,LVM 的最大大小由内核限值和您的磁盘空间决定。
Expand
表 5.1. 使用默认 PE 和 LE 大小的不同架构的大小限制
架构RHEL 6RHEL 7RHEL 8RHEL 9

32 位

16 TB

-

-

-

64 位

8 EB [1]

100 TB [2]

8 EB [1]

500 TB [2]

8 EB

8 EB

  1. 理论大小。
  2. 测试大小。

5.4.2. 使用 LVM 存储置备存储

您可以使用 Operator 安装过程中创建的存储类置备持久性卷声明 (PVC)。您可以置备块和文件 PVC,当只在创建使用 PVC 的 pod 时才会分配存储。

注意

LVM 存储以 1 GiB 单位置备 PVC。请求的存储将向上舍进到最接近的 GiB。

流程

  1. 识别部署 LVM 存储时创建的 StorageClass

    StorageClass 名称格式为 lvms-<device-class-name>device-class-name 是您在 Policy YAML 的 LVMCluster 中提供的设备名称。例如,如果 deviceClass 名为 vg1,则 storageClass 名称为 lvms-vg1

    存储类的 volumeBindingMode 设置为 WaitForFirstConsumer

  2. 要创建需要存储的 PVC,请使用名称(如 pvc.yaml )将以下 YAML 保存到文件中。

    创建 PVC 的 YAML 示例

    # block pvc
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: lvm-block-1
      namespace: default
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Block
      resources:
        requests:
          storage: 10Gi
      storageClassName: lvms-vg1
    ---
    # file pvc
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: lvm-file-1
      namespace: default
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 10Gi
      storageClassName: lvms-vg1
    Copy to Clipboard Toggle word wrap

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

    # oc create -f pvc.yaml -ns <application_namespace>
    Copy to Clipboard Toggle word wrap

    在部署使用它的 pod 之前,创建的 PVC 处于待处理状态。

5.4.3. 扩展 PVC

要在添加额外的容量后利用新的存储,您可以使用 LVM 存储扩展现有持久性卷声明 (PVC)。

先决条件

  • 使用动态置备。
  • 控制 StorageClass 对象的 allowVolumeExpansion 被设置为 true

流程

  1. 运行以下命令,将所需 PVC 资源中的 .spec.resources.requests.storage 字段改为新大小:

    oc patch <pvc_name> -n <application_namespace> -p '{ "spec": { "resources": { "requests": { "storage": "<desired_size>" }}}}'
    Copy to Clipboard Toggle word wrap
  2. 观察 PVC 的 status.conditions 字段来查看调整大小是否完成。OpenShift Container Platform 在扩展过程中为 PVC 添加 Resizing 条件,该条件会在扩展完成后删除。

5.4.4. 在单节点 OpenShift 集群上升级 LVM 存储

目前,无法从 OpenShift Data Foundation Logical Volume Manager Operator 4.11 升级到单节点 OpenShift 集群上的 LVM Storage 4.12。

重要

这个过程不会保留数据。

流程

  1. 备份您要在持久性卷声明 (PVC) 中保留的任何数据。
  2. 删除 OpenShift Data Foundation Logical Volume Manager Operator 及其 pod 置备的所有 PVC。
  3. 在 OpenShift Container Platform 4.12 上重新安装 LVM Storage。
  4. 重新创建工作负载。
  5. 将升级到 4.12 后将备份数据复制到创建的 PVC。

5.4.5. 单节点 OpenShift 的卷快照

您可以获取由 LVM Storage 置备的持久性卷 (PV) 的卷快照。您还可以为克隆卷创建卷快照。卷快照可帮助您进行以下操作:

  • 备份应用程序数据。

    重要

    卷快照位于与原始数据相同的设备上。要将卷快照用作备份,您需要将快照移到安全位置。您可以使用 OpenShift API 进行数据保护备份和恢复解决方案。

  • 恢复到进行卷快照时的状态。

5.4.5.1. 在单节点 OpenShift 中创建卷快照

您可以根据精简池的可用容量和过度置备限制创建卷快照。LVM Storage 创建一个带有 lvms-<deviceclass-name> 名称的 VolumeSnapshotClass

先决条件

  • 确保持久性卷声明(PVC)处于 Bound 状态。对于快照的一致性,这是必需的。
  • 在进行快照前,您需要停止所有到 PVC 的 I/O。

流程

  1. 登录到需要运行 oc 命令的单节点 OpenShift。
  2. 将以下 YAML 保存到带有名称(如 lvms-vol-snapshot.yaml)的文件。

    创建卷快照的 YAML 示例

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
        name: lvm-block-1-snap
    spec:
        volumeSnapshotClassName: lvms-vg1
        source:
            persistentVolumeClaimName: lvm-block-1
    Copy to Clipboard Toggle word wrap

  3. 在与 PVC 相同的命名空间中运行以下命令来创建快照:

    # oc create -f lvms-vol-snapshot.yaml
    Copy to Clipboard Toggle word wrap

PVC 的只读副本被创建为卷快照。

5.4.5.2. 在单节点 OpenShift 中恢复卷快照

恢复卷快照时,会创建一个新的持久性卷声明 (PVC)。恢复的 PVC 独立于卷快照和源 PVC。

先决条件

  • 存储类必须与源 PVC 相同。
  • 请求的 PVC 的大小必须与快照的源卷的大小相同。

    重要

    快照必须恢复到与快照的源卷相同的 PVC。如果需要较大的 PVC,您可以在成功恢复快照后重新定义 PVC 的大小。

流程

  1. 识别源 PVC 和卷快照名称的存储类名称。
  2. 将以下 YAML 保存到带有名称(如 lvms-vol-restore.yaml )的文件,以恢复快照。

    恢复 PVC 的 YAML 示例。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: lvm-block-1-restore
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Block
      Resources:
        Requests:
          storage: 2Gi
      storageClassName: lvms-vg1
      dataSource:
        name: lvm-block-1-snap
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
    Copy to Clipboard Toggle word wrap

  3. 在与快照相同的命名空间中运行以下命令来创建策略:

    # oc create -f lvms-vol-restore.yaml
    Copy to Clipboard Toggle word wrap

5.4.5.3. 删除单节点 OpenShift 中的卷快照

您可以删除卷快照资源和持久性卷声明 (PVC)。

流程

  1. 运行以下命令来删除卷快照资源:

    # oc delete volumesnapshot <volume_snapshot_name> -n <namespace>
    Copy to Clipboard Toggle word wrap
    注意

    当您删除持久性卷声明(PVC)时,PVC 的快照不会被删除。

  2. 要删除恢复的卷快照,请运行以下命令删除为恢复卷快照而创建的 PVC:

    # oc delete pvc <pvc_name> -n <namespace>
    Copy to Clipboard Toggle word wrap

5.4.6. 单节点 OpenShift 的卷克隆

克隆是现有存储卷的副本,可以像任何标准卷一样使用。

5.4.6.1. 在单节点 OpenShift 中创建卷克隆

您可以创建一个卷克隆,以制作数据的时点副本。持久性卷声明 (PVC) 不能使用不同的大小克隆。

重要

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

先决条件

  • 确保 PVC 处于 Bound 状态。对于快照的一致性,这是必需的。
  • 确保 StorageClass 与源 PVC 相同。

流程

  1. 识别源 PVC 的存储类。
  2. 要创建卷克隆,请将以下 YAML 保存到带有名称的文件,如 lvms-vol-clone.yaml

    克隆卷的 YAML 示例

    apiVersion: v1
    kind: PersistentVolumeClaim
    Metadata:
      name: lvm-block-1-clone
    Spec:
      storageClassName: lvms-vg1
      dataSource:
        name: lvm-block-1
        kind: PersistentVolumeClaim
      accessModes:
       - ReadWriteOnce
      volumeMode: Block
      Resources:
        Requests:
          storage: 2Gi
    Copy to Clipboard Toggle word wrap

  3. 运行以下命令,在与源 PVC 相同的命名空间中创建策略:

    # oc create -f lvms-vol-clone.yaml
    Copy to Clipboard Toggle word wrap

5.4.6.2. 删除单节点 OpenShift 中的克隆卷

您可以删除克隆的卷。

流程

  • 要删除克隆的卷,请运行以下命令来删除克隆的 PVC:

    # oc delete pvc <clone_pvc_name> -n <namespace>
    Copy to Clipboard Toggle word wrap

5.4.7. 监控 LVM 存储

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

openshift.io/cluster-monitoring=true
Copy to Clipboard Toggle word wrap
重要

有关在 RHACM 中启用集群监控的详情,请参考 观察性添加自定义指标

5.4.7.1. 指标

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

下表描述了 topolvm 指标:

Expand
表 5.2. topolvm 指标
警报描述

topolvm_thinpool_data_percent

表示 LVM thinpool 中使用的数据空间百分比。

topolvm_thinpool_metadata_percent

表示 LVM thinpool 中使用的元数据空间百分比。

topolvm_thinpool_size_bytes

表示 LVM 精简池的大小(以字节为单位)。

topolvm_volumegroup_available_bytes

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

topolvm_volumegroup_size_bytes

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

topolvm_thinpool_overprovisioned_available

表示 LVM 精简池的可用过度置备大小(以字节为单位)。

注意

指标每 10 分钟更新一次,或者在精简池中有变化(如创建新逻辑卷)时更新。

5.4.7.2. 警报

当精简池和卷组达到最大存储容量时,进一步的操作会失败。这会导致数据丢失。

当使用精简池和卷组超过特定值时,LVM 存储会发送以下警报:

Expand
表 5.3. LVM 存储警报
警报描述

VolumeGroupUsageAtThresholdNearFull

当卷组和精简池用量超过节点上的 75% 时,会触发此警报。需要删除数据或卷组扩展。

VolumeGroupUsageAtThresholdCritical

当卷组和精简池使用超过节点上的 85% 时,会触发此警报。在这种情况下,卷组几乎已满。需要删除数据或卷组扩展。

ThinPoolDataUsageAtThresholdNearFull

当卷组中的精简池数据 uusage 超过节点上的 75% 时,会触发此警报。需要删除数据或精简池扩展。

ThinPoolDataUsageAtThresholdCritical

当卷组中的精简池数据使用量超过节点上的 85% 时,会触发此警报。需要删除数据或精简池扩展。

ThinPoolMetaDataUsageAtThresholdNearFull

当卷组中的精简池元数据使用量超过节点上的 75% 时,会触发此警报。需要删除数据或精简池扩展。

ThinPoolMetaDataUsageAtThresholdCritical

当卷组中的精简池元数据使用量超过节点上的 85% 时,会触发此警报。需要删除数据或精简池扩展。

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

如果 LVM 存储无法自动解决问题,请使用 must-gather 工具收集日志文件和诊断信息,以便您或红帽支持可以查看问题并确定解决方案。

流程

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

    $ oc adm must-gather --image=registry.redhat.io/lvms4/lvms-must-gather-rhel9:v4.12 --dest-dir=<directory_name>
    Copy to Clipboard Toggle word wrap

5.4.8.1. 检查 PVC 处于 Pending 状态

由于多个原因,持久性卷声明 (PVC) 可能会处于 Pending 状态。例如:

  • 计算资源不足
  • 网络问题
  • 不匹配的存储类或节点选择器
  • 没有可用卷
  • 具有持久性卷 (PV) 的节点处于 Not Ready 状态

使用 oc describe 命令识别原因,以查看有关卡住 PVC 的详细信息。

流程

  1. 运行以下命令来检索 PVC 列表:

    $ oc get pvc
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    lvms-test   Pending                                      lvms-vg1       11s
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,检查与 PVC 关联的事件处于 Pending 状态:

    $ oc describe pvc <pvc_name> 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

5.4.8.2. 恢复缺少的 LVMS 或 Operator 组件

如果您遇到存储类 "not found" 错误,请检查 LVMCluster 资源,并确保所有逻辑卷管理器存储(LVMS) pod 都在运行。如果 LVMCluster 资源不存在,您可以创建它。

流程

  1. 运行以下命令,验证 LVMCluster 资源是否存在:

    $ oc get lvmcluster -n openshift-storage
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME            AGE
    my-lvmcluster   65m
    Copy to Clipboard Toggle word wrap

  2. 如果集群没有 LVMCluster 资源,请运行以下命令创建一个:

    $ oc create -n openshift-storage -f <custom_resource> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <custom_resource> 替换为根据您的要求量身定制的自定义资源 URL 或文件。

    自定义资源示例

    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
    spec:
      storage:
        deviceClasses:
        - name: vg1
          default: true
          thinPoolConfig:
            name: thin-pool-1
            sizePercent: 90
            overprovisionRatio: 10
    Copy to Clipboard Toggle word wrap

  3. 运行以下命令,检查 LVMS 中的所有 pod 是否处于 openshift-storage 命名空间中的 Running 状态:

    $ oc get pods -n openshift-storage
    Copy to Clipboard Toggle word wrap

    输出示例

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

    预期的输出是 lvms-operatorvg-manager 的一个运行实例。每个节点预期有一个 topolvm-controllertopolvm-node 实例。

    如果 topolvm-node 一直处于 Init 状态,则无法找到 LVMS 要使用的可用磁盘。要检索故障排除所需的信息,请运行以下命令来查看 vg-manager pod 的日志:

    $ oc logs -l app.kubernetes.io/component=vg-manager -n openshift-storage
    Copy to Clipboard Toggle word wrap

5.4.8.4. 从磁盘失败中恢复

如果您在检查与持久性卷声明 (PVC) 关联的事件时看到失败信息,则可能代表底层卷或磁盘存在问题。磁盘和卷置备问题通常会首先出现一个通用的错误,如 Failed to provision volume with StorageClass <storage_class_name>。一般随后会跟随一个更加具体的错误消息。

流程

  1. 运行以下命令,检查与 PVC 关联的事件:

    $ oc describe pvc <pvc_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <pvc_name> 替换为 PVC 的名称。以下是磁盘或卷失败错误消息的一些示例及其原因:
    • Failed to check volume existence: 代表在验证卷是否已存在时出现问题。卷验证失败可能是由网络连接问题或其他故障造成的。
    • Failed to bind volume: 如果可用持久性卷 (PV) 与 PVC 的要求不匹配,则无法绑定卷。
    • FailedMount or FailedUnMount: 这个错误表示试图将卷挂载到节点或从节点卸载卷时出现问题。如果磁盘失败,pod 尝试使用 PVC 时可能会出现这个错误。
    • Volume is already exclusively attached to one node and can’t be attached to another: 这个错误可能会出现不支持 ReadWriteMany 访问模式的存储解决方案。
  2. 建立到发生问题的主机的直接连接。
  3. 解决磁盘问题。

在解决了磁盘的问题后,如果失败消息仍然存在或再次出现,则可能需要执行强制清理过程。

5.4.8.5. 执行强制清理

如果在完成故障排除过程后仍然存在磁盘或节点相关的问题,可能需要执行强制清理过程。强制清理用于全面解决持久问题,并确保 LVMS 正常工作。

先决条件

  1. 已删除使用逻辑卷管理器存储 (LVMS) 驱动程序创建的所有持久性卷声明 (PVC)。
  2. 使用这些 PVC 的 pod 已停止。

流程

  1. 运行以下命令切换到 openshift-storage 命名空间:

    $ oc project openshift-storage
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,确保没有剩余的 Logical Volume 自定义资源 (CR):

    $ oc get logicalvolume
    Copy to Clipboard Toggle word wrap

    输出示例

    No resources found
    Copy to Clipboard Toggle word wrap

    1. 如果还有任何 LogicalVolume CR,请运行以下命令删除其终结器:

      $ oc patch logicalvolume <name> -p '{"metadata":{"finalizers":[]}}' --type=merge 
      1
      Copy to Clipboard Toggle word wrap
      1
      <name> 替换为 CR 的名称。
    2. 删除其终结器后,运行以下命令来删除 CR:

      $ oc delete logicalvolume <name> 
      1
      Copy to Clipboard Toggle word wrap
      1
      <name> 替换为 CR 的名称。
  3. 运行以下命令,确保没有 LVMVolumeGroup CR:

    $ oc get lvmvolumegroup
    Copy to Clipboard Toggle word wrap

    输出示例

    No resources found
    Copy to Clipboard Toggle word wrap

    1. 如果才存在任何 LVMVolumeGroup CR ,请运行以下命令删除其终结器:

      $ oc patch lvmvolumegroup <name> -p '{"metadata":{"finalizers":[]}}' --type=merge 
      1
      Copy to Clipboard Toggle word wrap
      1
      <name> 替换为 CR 的名称。
    2. 删除其终结器后,运行以下命令来删除 CR:

      $ oc delete lvmvolumegroup <name> 
      1
      Copy to Clipboard Toggle word wrap
      1
      <name> 替换为 CR 的名称。
  4. 运行以下命令来删除所有 LVMVolumeGroupNodeStatus CR:

    $ oc delete lvmvolumegroupnodestatus --all
    Copy to Clipboard Toggle word wrap
  5. 运行以下命令来删除 LVMCluster CR:

    $ oc delete lvmcluster --all
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat