4.10. 使用本地卷的持久性存储

OpenShift Container Platform 可以使用本地卷来置备持久性存储。本地持久性卷允许您使用标准持久性卷声明接口访问本地存储设备,如磁盘或分区。

无需手动将 pod 调度到节点即可使用本地卷,因为系统了解卷节点的约束。但是,本地卷仍会受到底层节点可用性的影响,而且并不适用于所有应用程序。

注意

本地卷只能用作静态创建的持久性卷。

4.10.1. 安装 Local Storage Operator

默认情况下,OpenShift Container Platform 中不会安装 Local Storage Operator。使用以下流程来安装和配置这个 Operator,从而在集群中启用本地卷。

先决条件

  • 访问 OpenShift Container Platform web 控制台或命令行 (CLI)。

流程

  1. 创建 openshift-local-storage 项目:

    $ oc adm new-project openshift-local-storage
  2. 可选:允许在基础架构节点上创建本地存储。

    您可能希望使用 Local Storage Operator 在基础架构节点上创建卷来支持一些组件,如日志记录和监控。

    您必须调整默认节点选择器,以便 Local Storage Operator 包含基础架构节点,而不只是 worker 节点。

    要阻止 Local Storage Operator 继承集群范围的默认选择器,请输入以下命令:

    $ oc annotate namespace openshift-local-storage openshift.io/node-selector=''
  3. 可选:允许在单节点部署中的 CPU 管理池中运行本地存储。

    在单节点部署中使用 Local Storage Operator,并允许使用属于 managment 池的 CPU。在使用管理工作负载分区的单节点安装上执行这个步骤。

    要允许 Local Storage Operator 在管理 CPU 池上运行,请运行以下命令:

    $ oc annotate namespace openshift-local-storage workload.openshift.io/allowed='management'

使用 UI

按照以下步骤,通过 web 控制台安装 Local Storage Operator:

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 导航至 OperatorsOperatorHub
  3. 在过滤器框中键入 Local Storage 以查找 Local Storage Operator。
  4. 点击 Install
  5. Install Operator 页面中,选择 A specific namespace on the cluster。从下拉菜单中选择 openshift-local-storage
  6. Update ChannelApproval Strategy 的值调整为所需的值。
  7. 点击 Install

完成后,Web 控制台的 Installed Operators 部分中会列出 Local Storage Operator。

使用 CLI

  1. 通过 CLI 安装 Local Storage Operator。

    1. 运行以下命令以获取 OpenShift Container Platform 的主版本和次版本。下一步中需要 channel 值。

      $ OC_VERSION=$(oc version -o yaml | grep openshiftVersion | \
          grep -o '[0-9]*[.][0-9]*' | head -1)
    2. 创建对象 YAML 文件,以定义 Local Storage Operator 的 Operator 组和订阅,如 openshift-local-storage.yaml:

      openshift-local-storage.yaml 示例

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: local-operator-group
        namespace: openshift-local-storage
      spec:
        targetNamespaces:
          - openshift-local-storage
      ---
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: local-storage-operator
        namespace: openshift-local-storage
      spec:
        channel: "${OC_VERSION}"
        installPlanApproval: Automatic 1
        name: local-storage-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace

      1
      安装计划的用户批准策略。
  2. 输入以下命令来创建 Local Storage Operator 对象:

    $ oc apply -f openshift-local-storage.yaml

    在此阶段,Operator Lifecycle Manager (OLM) 已可以了解 Local Storage Operator。Operator 的 ClusterServiceVersion (CSV) 应出现在目标命名空间中,由 Operator 提供的 API 应可用于创建。

  3. 通过检查是否创建了所有 pod 和 Local Storage Operator 来验证本地存储安装:

    1. 检查是否已创建所有必需的 pod:

      $ oc -n openshift-local-storage get pods

      输出示例

      NAME                                      READY   STATUS    RESTARTS   AGE
      local-storage-operator-746bf599c9-vlt5t   1/1     Running   0          19m

    2. 检查 ClusterServiceVersion (CSV) YAML 清单,查看 openshift-local-storage 项目中是否有 Local Storage Operator:

      $ oc get csvs -n openshift-local-storage

      输出示例

      NAME                                         DISPLAY         VERSION               REPLACES   PHASE
      local-storage-operator.4.2.26-202003230335   Local Storage   4.2.26-202003230335              Succeeded

如果通过了所有检查,则代表 Local Storage Operator 已被成功安装。

4.10.2. 使用 Local Storage Operator 置备本地卷

无法通过动态置备来创建本地卷。相反,持久性卷可由 Local Storage Operator 创建。本地卷置备程序会在定义的资源中指定的路径上查找任意文件系统或块设备。

先决条件

  • 安装了 Local Storage Operator。
  • 您有一个满足以下条件的本地磁盘:

    • 它附加到一个节点。
    • 它尚未挂载。
    • 它不包含分区。

流程

  1. 创建本地卷资源。此资源必须定义本地卷的节点和路径。

    注意

    不要在同一设备中使用不同的存储类名称。这样做可创建多个持久性卷 (PV)。

    例如:Filesystem

    apiVersion: "local.storage.openshift.io/v1"
    kind: "LocalVolume"
    metadata:
      name: "local-disks"
      namespace: "openshift-local-storage" 1
    spec:
      nodeSelector: 2
        nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - ip-10-0-140-183
              - ip-10-0-158-139
              - ip-10-0-164-33
      storageClassDevices:
        - storageClassName: "local-sc" 3
          volumeMode: Filesystem 4
          fsType: xfs 5
          devicePaths: 6
            - /path/to/device 7

    1
    安装了 Local Storage Operator 的命名空间。
    2
    可选:包含附加了本地存储卷的节点列表的节点选择器。本例使用从 oc get node 获取的节点主机名。如果没有定义值,则 Local Storage Operator 会尝试在所有可用节点上查找匹配的磁盘。
    3
    创建持久性卷对象时使用的存储类的名称。如果不存在,Local Storage Operator 会自动创建存储类。确保使用唯一标识此本地卷的存储类。
    4
    定义本地卷类型的卷模式,可以是 FilesystemBlock
    5
    第一次挂载本地卷时所创建的文件系统。
    6
    包含要从中选择的本地存储设备列表的路径。
    7
    使用到 LocalVolume 资源 by-id 的实际本地磁盘文件路径(如 /dev/disk/by-id/wwn)替换这个值。当置备程序已被成功部署时,会为这些本地磁盘创建 PV。
    注意

    原始块卷(volumeMode: block)不能以文件系统格式化。只有在 pod 上运行的任何应用程序都可以使用原始块设备时,才应使用此模式。

    例如:Block

    apiVersion: "local.storage.openshift.io/v1"
    kind: "LocalVolume"
    metadata:
      name: "local-disks"
      namespace: "openshift-local-storage" 1
    spec:
      nodeSelector: 2
        nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - ip-10-0-136-143
              - ip-10-0-140-255
              - ip-10-0-144-180
      storageClassDevices:
        - storageClassName: "localblock-sc" 3
          volumeMode: Block  4
          devicePaths: 5
            - /path/to/device 6

    1
    安装了 Local Storage Operator 的命名空间。
    2
    可选:包含附加了本地存储卷的节点列表的节点选择器。本例使用从 oc get node 获取的节点主机名。如果没有定义值,则 Local Storage Operator 会尝试在所有可用节点上查找匹配的磁盘。
    3
    创建持久性卷对象时使用的存储类的名称。
    4
    定义本地卷类型的卷模式,可以是 FilesystemBlock
    5
    包含要从中选择的本地存储设备列表的路径。
    6
    使用到 LocalVolume 资源 by-id 的实际本地磁盘文件路径(如 dev/disk/by-id/wwn)替换这个值。当置备程序已被成功部署时,会为这些本地磁盘创建 PV。
  2. 在 OpenShift Container Platform 集群中创建本地卷资源。指定您刚才创建的文件:

    $ oc create -f <local-volume>.yaml
  3. 验证置备程序是否已创建并创建了相应的守护进程集:

    $ oc get all -n openshift-local-storage

    输出示例

    NAME                                          READY   STATUS    RESTARTS   AGE
    pod/diskmaker-manager-9wzms                   1/1     Running   0          5m43s
    pod/diskmaker-manager-jgvjp                   1/1     Running   0          5m43s
    pod/diskmaker-manager-tbdsj                   1/1     Running   0          5m43s
    pod/local-storage-operator-7db4bd9f79-t6k87   1/1     Running   0          14m
    
    NAME                                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
    service/local-storage-operator-metrics   ClusterIP   172.30.135.36   <none>        8383/TCP,8686/TCP   14m
    
    NAME                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    daemonset.apps/diskmaker-manager   3         3         3       3            3           <none>          5m43s
    
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/local-storage-operator   1/1     1            1           14m
    
    NAME                                                DESIRED   CURRENT   READY   AGE
    replicaset.apps/local-storage-operator-7db4bd9f79   1         1         1       14m

    注意所需和当前的守护进程设定进程数。所需的数量为 0 表示标签选择器无效。

  4. 验证持久性卷是否已创建:

    $ oc get pv

    输出示例

    NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    local-pv-1cec77cf   100Gi      RWO            Delete           Available           local-sc                88m
    local-pv-2ef7cd2a   100Gi      RWO            Delete           Available           local-sc                82m
    local-pv-3fa1c73    100Gi      RWO            Delete           Available           local-sc                48m

重要

编辑 LocalVolume 对象不会更改现有持久性卷的 fsTypevolumeMode,因为这样做可能会导致破坏性操作。

4.10.3. 在没有 Local Storage Operator 的情况下置备本地卷

无法通过动态置备来创建本地卷。反之,可以通过在对象定义中定义持久性卷(PV)来创建持久性卷。本地卷置备程序会在定义的资源中指定的路径上查找任意文件系统或块设备。

重要

手动置备 PV 的风险包括在删除 PVC 时,在 PV 间可能会出现数据泄漏的问题。建议在置备本地 PV 时自动执行 Local Storage Operator。

先决条件

  • 本地磁盘已附加到 OpenShift Container Platform 节点。

流程

  1. 定义 PV。使用 PersistentVolume 对象定义创建一个文件,如 example-pv-filesystem.yamlexample-pv-block.yaml。此资源必须定义本地卷的节点和路径。

    注意

    不要在同一设备中使用不同的存储类名称。这将会创建多个 PV。

    example-pv-filesystem.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-pv-filesystem
    spec:
      capacity:
        storage: 100Gi
      volumeMode: Filesystem 1
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-storage 2
      local:
        path: /dev/xvdf 3
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - example-node

    1
    定义 PV 类型的卷模式,可以是 FilesystemBlock
    2
    创建 PV 资源时使用的存储类的名称。使用唯一标识此 PV 的存储类。
    3
    包含要从中选择的本地存储设备列表的路径,或一个目录。您只能指定 Filesystem volumeMode 的目录。
    注意

    原始块卷(volumeMode: block)不能以文件系统格式化。仅在 pod 上运行的任何应用程序都可以使用原始块设备时使用此模式。

    example-pv-block.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-pv-block
    spec:
      capacity:
        storage: 100Gi
      volumeMode: Block 1
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-storage 2
      local:
        path: /dev/xvdf 3
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - example-node

    1
    定义 PV 类型的卷模式,可以是 FilesystemBlock
    2
    创建 PV 资源时使用的存储类的名称。确保使用唯一标识此 PV 的存储类。
    3
    包含要从中选择的本地存储设备列表的路径。
  2. 在 OpenShift Container Platform 集群中创建 PV 资源。指定您刚才创建的文件:

    $ oc create -f <example-pv>.yaml
  3. 验证是否已创建本地 PV:

    $ oc get pv

    输出示例

    NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                STORAGECLASS    REASON   AGE
    example-pv-filesystem   100Gi      RWO            Delete           Available                        local-storage            3m47s
    example-pv1             1Gi        RWO            Delete           Bound       local-storage/pvc1   local-storage            12h
    example-pv2             1Gi        RWO            Delete           Bound       local-storage/pvc2   local-storage            12h
    example-pv3             1Gi        RWO            Delete           Bound       local-storage/pvc3   local-storage            12h

4.10.4. 创建本地卷持久性卷声明

必须静态创建本地卷作为持久性卷声明(PVC),才能被 pod 访问。

先决条件

  • 持久性卷是使用本地卷置备程序创建的。

流程

  1. 使用对应的存储类创建 PVC:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: local-pvc-name 1
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Filesystem 2
      resources:
        requests:
          storage: 100Gi 3
      storageClassName: local-sc 4
    1
    PVC 的名称。
    2
    PVC 的类型。默认为 Filesystem
    3
    PVC 可用的存储量。
    4
    声明所需的存储类的名称。
  2. 通过指定您刚才创建的文件,在 OpenShift Container Platform 集群中创建 PVC:

    $ oc create -f <local-pvc>.yaml

4.10.5. 附加本地声明

本地卷映射到持久性卷声明后,可在资源内指定。

先决条件

  • 同一命名空间中存在持久性卷声明。

流程

  1. 在资源规格中包含定义的声明。以下示例在 pod 中声明持久性卷声明:

    apiVersion: v1
    kind: Pod
    spec:
      ...
      containers:
        volumeMounts:
        - name: local-disks 1
          mountPath: /data 2
      volumes:
      - name: localpvc
        persistentVolumeClaim:
          claimName: local-pvc-name 3
    1
    要挂载的卷的名称。
    2
    卷在 pod 中的挂载路径。不要挂载到容器 root、/ 或主机和容器中相同的任何路径。如果容器有足够权限,可能会损坏您的主机系统(如主机的 /dev/pts 文件)。使用 /host 挂载主机是安全的。
    3
    要使用的现有持久性卷声明的名称。
  2. 通过指定您刚才创建的文件,在 OpenShift Container Platform 集群中创建资源:

    $ oc create -f <local-pod>.yaml

4.10.6. 为本地存储设备自动发现和置备

Local Storage Operator 自动进行本地存储发现和置备。使用此功能,您可以在部署过程中不提供动态置备(如使用裸机、VMware 或带有附加设备的 AWS 存储实例)时简化安装。

重要

自动发现和置备只是一个技术预览功能。技术预览功能不被红帽产品服务等级协议 (SLA) 支持,且可能在功能方面有缺陷。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

但是,在裸机上部署 Red Hat OpenShift Data Foundation 时完全支持自动发现和置备。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

使用以下步骤自动发现本地设备,并为所选设备自动置备本地。

警告

请小心使用 LocalVolumeSet 对象。当您从本地磁盘自动置备持久性卷(PV)时,本地 PV 可能会声明所有匹配的设备。如果使用 LocalVolumeSet 对象,请确保 Local Storage Operator 是管理该节点上本地设备的唯一实体。

先决条件

  • 有集群管理员权限。
  • 已安装 Local Storage Operator。
  • 已将本地磁盘附加到 OpenShift Container Platform 节点。
  • 您可以访问 OpenShift Container Platform web 控制台和 oc 命令行界面(CLI)。

流程

  1. 通过 web 控制台启用本地设备的自动发现:

    1. Administrator 视角中,导航到 OperatorsInstalled Operators,再点 Local Volume Discovery 选项卡。
    2. Create Local Volume Discovery
    3. 根据您要在所有节点上还是在特定的节点上发现可用磁盘,选择 All nodesSelect nodes

      注意

      无论是使用 All nodesSelect nodes 进行过滤,只有 worker 节点可用。

    4. 点击 Create

此时会显示名为 auto-discover-devices 的本地卷发现实例。

  1. 显示节点上持续可用的设备列表:

    1. 登陆到 OpenShift Container Platform Web 控制台。
    2. 进入 ComputeNodes
    3. 点要打开的节点名称。此时会显示 "Node Details" 页面。
    4. 选择 Disks 标签显示所选设备的列表。

      在添加或删除本地磁盘时,设备列表会持续更新。您可以根据名称、状态、类型、型号、容量和模式过滤设备。

  2. 从 web 控制台为发现的设备自动置备本地卷:

    1. 导航到 OperatorsInstalled Operators,再从 Operators 列表中选择 Local Storage
    2. 选择 Local Volume SetCreate Local Volume Set
    3. 输入卷集合名称和存储类名称。
    4. 选择 All nodesSelect nodes 以相应地应用过滤器。

      注意

      无论是使用 All nodesSelect nodes 进行过滤,只有 worker 节点可用。

    5. 选择您要应用到本地卷集的磁盘类型、模式、大小和限制,然后点 Create

      几分钟后会显示一条信息,表示 "Operator reconciled successfullyd successfully."

  1. 另外,也可通过 CLI 为发现的设备置备本地卷:

    1. 创建一个对象 YAML 文件来定义本地卷集,如 local-volume-set.yaml,如下例所示:

      apiVersion: local.storage.openshift.io/v1alpha1
      kind: LocalVolumeSet
      metadata:
        name: example-autodetect
      spec:
        nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                    - worker-0
                    - worker-1
        storageClassName: example-storageclass 1
        volumeMode: Filesystem
        fsType: ext4
        maxDeviceCount: 10
        deviceInclusionSpec:
          deviceTypes: 2
            - disk
            - part
          deviceMechanicalProperties:
            - NonRotational
          minSize: 10G
          maxSize: 100G
          models:
            - SAMSUNG
            - Crucial_CT525MX3
          vendors:
            - ATA
            - ST2000LM
      1
      决定为从发现的设备置备的持久性卷创建的存储类。如果不存在,Local Storage Operator 会自动创建存储类。确保使用唯一标识此本地卷的存储类。
      2
      当使用本地卷设置功能时,Local Storage Operator 不支持使用逻辑卷管理(LVM)设备。
    2. 创建本地卷集对象:

      $ oc apply -f local-volume-set.yaml
    3. 根据存储类验证本地持久性卷是否被动态置备:

      $ oc get pv

      输出示例

      NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS           REASON   AGE
      local-pv-1cec77cf   100Gi      RWO            Delete           Available           example-storageclass            88m
      local-pv-2ef7cd2a   100Gi      RWO            Delete           Available           example-storageclass            82m
      local-pv-3fa1c73    100Gi      RWO            Delete           Available           example-storageclass            48m

注意

结果会在从节点中删除后删除。必须手动删除符号链接。

4.10.7. 使用 Local Storage Operator pod 的容限

污点可用于节点,以防止它们运行常规工作负载。要允许 Local Storage Operator 使用污点节点,您必须在 PodDaemonSet 定义中添加容限。这允许在这些污点节点上运行所创建的资源。

您可以通过 LocalVolume 资源把容限应用到 Local Storage Operator pod,通过节点规格把污点应用到一个节点。节点上的污点指示节点排斥所有不容许该污点的 pod。使用一个没有存在于其他 pod 上的特定污点可确保 Local Storage Operator pod 也可以在该节点上运行。

重要

污点与容限由 key、value 和 effect 组成。作为参数,它表示为 key=value:effect。运算符允许您将其中一个参数留空。

先决条件

  • 安装了 Local Storage Operator。
  • 本地磁盘已附加到带有一个污点的 OpenShift Container Platform 节点上。
  • 污点节点可以置备本地存储。

流程

配置本地卷以便在污点节点上调度:

  1. 修改定义 Pod 的 YAML 文件并添加 LocalVolume 规格,如下例所示:

      apiVersion: "local.storage.openshift.io/v1"
      kind: "LocalVolume"
      metadata:
        name: "local-disks"
        namespace: "openshift-local-storage"
      spec:
        tolerations:
          - key: localstorage 1
            operator: Equal 2
            value: "localstorage" 3
        storageClassDevices:
            - storageClassName: "localblock-sc"
              volumeMode: Block 4
              devicePaths: 5
                - /dev/xvdg
    1
    指定添加到节点的键。
    2
    指定 Equal 运算符,以要求 key/value 参数匹配。如果运算符是 Exists,系统会检查键是否存在并忽略它的值。如果运算符是 Equal,则键和值必须匹配。
    3
    指定污点节点的 local 值。
    4
    定义本地卷类型的卷模式,可以是 FilesystemBlock
    5
    包含要从中选择的本地存储设备列表的路径。
  2. 可选: 要只在污点节点上创建本地持久性卷,修改 YAML 文件并添加 LocalVolume spec,如下例所示:

    spec:
      tolerations:
        - key: node-role.kubernetes.io/master
          operator: Exists

定义的容限度将传递给生成的守护进程集,允许为包含指定污点的节点创建 diskmaker 和 provisioner pod。

4.10.8. Local Storage Operator 指标

OpenShift Container Platform 为 Local Storage Operator 提供以下指标:

  • lso_discovery_disk_count:每个节点中发现的设备总数
  • lso_lvset_provisioned_PV_count: LocalVolumeSet 对象创建的 PV 总数
  • lso_lvset_unmatched_disk_count: Local Storage Operator 没有选择进行置备的磁盘总数,因为不匹配条件
  • lso_lvset_orphaned_symlink_count: 使用 PV 的设备数,它们不再与 LocalVolumeSet 对象标准匹配
  • lso_lv_orphaned_symlink_count :包含 PV 的设备数,它们不再符合 LocalVolume 对象标准
  • lso_lv_provisioned_PV_count: LocalVolume置备的 PV 总数

要使用这些指标,请务必:

  • 安装 Local Storage Operator 时启用对监控的支持。
  • 当升级到 OpenShift Container Platform 4.9 或更高版本时,通过将 operator-metering=true 标签添加到命名空间来手动启用指标支持。

有关指标的更多信息,请参阅管理指标

4.10.9. 删除 Local Storage Operator 资源

4.10.9.1. 删除本地卷或本地卷集

在一些情况下,必须删除本地卷和本地卷集。虽然删除资源中的条目并删除持久性卷通常就足够,但如果您想要重复使用同一设备路径或者使其不同的存储类进行管理,则需要额外的步骤。

注意

以下流程概述了删除本地卷的示例。同样的步骤也可以用于删除本地卷设置自定义资源的符号链接。

先决条件

  • 持久性卷必须处于 ReleasedAvailable 状态。

    警告

    删除仍在使用中的持久性卷可能会导致数据丢失或崩溃。

流程

  1. 编辑之前创建的本地卷以删除所有不需要的磁盘。

    1. 编辑集群资源:

      $ oc edit localvolume <name> -n openshift-local-storage
    2. 找到 devicePaths 下的行,删除所有代表不需要的磁盘的行。
  2. 删除所有创建的持久性卷。

    $ oc delete pv <pv-name>
  3. 删除节点上的所有符号链接。

    警告

    以下步骤涉及以 root 用户身份访问节点。如果在本流程中步骤范围以外修改节点状态,则可能会导致集群不稳定。

    1. 在节点上创建一个调试 Pod:

      $ oc debug node/<node-name>
    2. 将您的根目录改为 /host

      $ chroot /host
    3. 前往包含本地卷符号链接的目录。

      $ cd /mnt/openshift-local-storage/<sc-name> 1
      1
      用于创建本地卷的存储类的名称。
    4. 删除归属于已移除设备的符号链接。

      $ rm <symlink>

4.10.9.2. 卸载 Local Storage Operator

要卸载 Local Storage Operator,您必须删除 Operator 以及 openshift-local-storage 项目中创建的所有资源。

警告

当本地存储 PV 仍在使用时,不建议卸载 Local Storage Operator。当 Operator 被移除后 PV 仍然会被保留。但是如果在没有删除 PV 和本地存储资源的情况下重新安装 Operator,则可能会出现不确定的行为。

先决条件

  • 访问 OpenShift Container Platform Web 控制台。

流程

  1. 删除项目中安装的任何本地卷资源,如 localvolumelocalvolumesetlocalvolumediscovery:

    $ oc delete localvolume --all --all-namespaces
    $ oc delete localvolumeset --all --all-namespaces
    $ oc delete localvolumediscovery --all --all-namespaces
  2. 从 Web 控制台卸载 Local Storage Operator。

    1. 登陆到 OpenShift Container Platform Web 控制台。
    2. 导航到 OperatorsInstalled Operators
    3. 在过滤器框中键入 Local Storage 以查找 Local Storage Operator。
    4. 点击 Local Storage Operator 末尾的 Options 菜单 kebab
    5. 点击 Uninstall Operator
    6. 在出现的窗口中点击 Remove
  3. 由 Local Storage Operator 创建的 PV 将保留在集群中,直到被删除为止。这些卷不再使用后,运行以下命令删除它们:

    $ oc delete pv <pv-name>
  4. 删除 openshift-local-storage 项目:

    $ oc delete project openshift-local-storage