以外部模式部署 OpenShift Container Storage

Red Hat OpenShift Container Storage 4.6

如何安装和配置您的环境

摘要

有关安装 Red Hat OpenShift Container Storage 4.6 使用外部 Red Hat Ceph Storage 集群的说明,请参阅本文档。

第 1 章 以外部模式部署概述

Red Hat OpenShift Container Storage 可以使用外部托管的 Red Hat Ceph Storage (RHCS) 集群作为存储供应商。此部署类型支持裸机和用户置备的 VMware 环境。如需更多信息,请参阅规划部署

有关如何安装 RHCS 4 集群的说明,请参阅安装指南

按照以下步骤,以外部模式部署 OpenShift Container Storage:

  1. 如果您将 Red Hat Enterprise Linux 主机用于 worker 节点,为容器启用文件系统访问

    如果使用 Red Hat Enterprise Linux CoreOS (RHCOS)主机,请跳过这一步。

  2. 安装 OpenShift Container Storage Operator
  3. 创建 OpenShift Container Storage Cluster Service

第 2 章 为基于 Red Hat Enterprise Linux 的节点上的容器启用文件系统访问

在用户置备的基础架构 (UPI) 的 Red Hat Enterprise Linux 基础上使用 worker 节点部署 OpenShift Container Storage 不会自动提供对底层 Ceph 文件系统的容器访问。

注意

对于基于 Red Hat Enterprise Linux CoreOS 的主机,不需要这个过程。

流程

在集群的每个节点中执行以下步骤。

  1. 登录基于 Red Hat Enterprise Linux 的节点并打开一个终端。
  2. 验证节点有权访问 rhel-7-server-extras-rpms 存储库。

    # subscription-manager repos --list-enabled | grep rhel-7-server

    如果您没有在输出中看到 rhel-7-server-rpmsrhel-7-server-extras-rpms,或者没有输出,请运行以下命令来启用相关的存储库:

    # subscription-manager repos --enable=rhel-7-server-rpms
    # subscription-manager repos --enable=rhel-7-server-extras-rpms
  3. 安装所需的软件包。

    # yum install -y policycoreutils container-selinux
  4. 在 SELinux 中永久启用 Ceph 文件系统的容器使用。

    # setsebool -P container_use_cephfs on

第 3 章 安装 Red Hat OpenShift Container Storage Operator

您可以使用 Red Hat OpenShift Container Platform Operator Hub 安装 Red Hat OpenShift Container Storage Operator。有关硬件和软件要求的详情,请参阅规划您的部署

先决条件

  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
注意
  • 当您需要覆盖 OpenShift Container Storage 的集群范围默认节点选择器时,您可以在命令行界面中使用以下命令为 openshift-storage 命名空间指定空白节点选择器:

    $ oc annotate namespace openshift-storage openshift.io/node-selector=

流程

  1. 在 OpenShift Web 控制台左侧窗格中,点 Operators → OperatorHub
  2. 使用 Filter by keyword 文本框或过滤器列表从 operator 列表中搜索 OpenShift Container Storage。
  3. OpenShift Container Storage
  4. OpenShift Container Storage operator 页面中,点 Install。
  5. Install Operator 页面中,确保默认选择以下选项:

    1. 将频道更新为 stable-4.6
    2. 安装模式为 A specific namespace on the cluster
    3. Installed Namespace 为 Operator recommended namespace openshift-storage。如果 Namespace openshift-storage 不存在,它会在 Operator 安装过程中创建。
    4. 选择 Enable operator recommended cluster monitoring on this namespace 复选框,因为集群监控需要它。
    5. Approval Strategy 选为 AutomaticManual。默认情况下,批准策略设置为 Automatic

      • Approval StrategyAutomatic.

        注意

        当您将 Approval Strategy 选为 Automatic 时,在全新安装过程或升级到最新版本的 OpenShift Container Storage 时不需要批准。

        1. Install
        2. 等待安装启动。这可能需要长达 20 分钟。
        3. Operators → Installed Operators
        4. 确保 Projectopenshift-storage。默认情况下,Projectopenshift-storage
        5. 等待 OpenShift Container StorageStatus 变为 Succeeded
      • Approval StrategyManual.

        注意

        当您将 Approval Strategy 选为 Manual 时,在全新安装或升级到最新版本的 OpenShift Container Storage 过程中需要批准。

        1. Install
        2. Manual approval required 页面中,您可以点 ApproveView Installed Operators in namespace openshift-storage 来安装 Operator。

          重要

          在单击任一选项前,请在 Manual approval required 页面中等待几分钟,直到安装计划加载到窗口中。

          重要

          如果您选择单击 Approve,您必须先检查安装计划,然后再继续。

          • 如果您单击 Approve

            • 等待几分钟,以便安装 OpenShift Container Storage Operator。
            • Installed operator - ready for use 页面上,点 View Operator
            • 确保 Projectopenshift-storage。默认情况下,Projectopenshift-storage
            • Operators → Installed Operators
            • 等待 OpenShift Container StorageStatus 变为 Succeeded
          • 如果您点 View Installed Operators in namespace openshift-storage

            • Installed Operators 页面中,点 ocs-operator
            • Subscription Details 页面中,点 Install Plan 链接。
            • InstallPlan Details 页面中点 Preview Install Plan
            • 检查安装计划并点 Approve
            • 等待 ComponentsStatusUnknown 变为 CreatedPresent
            • Operators → Installed Operators
            • 确保 Projectopenshift-storage。默认情况下,Projectopenshift-storage
            • 等待 OpenShift Container StorageStatus 变为 Succeeded

验证步骤

  • 验证 OpenShift Container Storage Operator 是否显示绿色勾号,指示安装成功。
  • View Installed Operators in namespace openshift-storage 链接,验证 OpenShift Container Storage Operator 是否在 Installed Operators 仪表板上显示的 StatusSucceeded

第 4 章 为外部模式创建 OpenShift Container Storage 集群服务

在用户置备的 VMware vSphere 或裸机基础架构上部署的 OpenShift Container Storage operator 上安装 OpenShift Container Storage operator 后,需要创建新的 OpenShift Container Storage 集群服务。

先决条件

  • 您必须登录到正常工作的 OpenShift Container Platform 版本 4.5.4 或更高版本。
  • 必须安装 OpenShift Container Storage Operator。如需更多信息,请参阅使用 Operator Hub 安装 OpenShift Container Storage Operator
  • 外部集群需要 Red Hat Ceph Storage 版本 4.2z1 或更高版本。如需更多信息,请参阅有关红帽 Ceph 存储发行版和相应 Ceph 软件包版本的知识库文章

    如果您已将红帽 Ceph 存储集群从低于 4.1.1 的版本更新为最新版本,且不是全新部署的集群,您必须在红帽 Ceph 存储集群中手动设置 CephFS 池的应用类型,以外部模式启用 CephFS PVC 创建。

    如需了解更多详细信息,请参阅在外部模式中对 CephFS PVC 创建进行故障排除

  • Red Hat Ceph Storage 必须安装并配置 Ceph 控制面板,并且 Ceph Manager Prometheus 导出器必须使用端口 9283。如需更多信息,请参阅 Ceph 控制面板安装和访问
  • 建议对外部 Red Hat Ceph Storage 必须启用 PG Autoscaler 选项。如需更多信息,请参阅 Red Hat Ceph Storage 文档中的放置组自动扩展部分。
  • 外部 Ceph 集群应当预配置有一个现有的 RBD 池,供使用。如果不存在,请在进行 OpenShift Container Storage 部署前,联系您的 Red Hat Ceph Storage 管理员创建一个。建议为每个 OpenShift Container Storage 集群使用单独的池。

流程

  1. Operators → Installed Operators 查看所有已安装的 Operator。

    确保所选的 Projectopenshift-storage

    图 4.1. OpenShift Container Storage Operator 页

    OpenShift Container Storage operator 仪表板的截图。
  2. OpenShift Container Storage

    图 4.2. OpenShift Container Storage 的详情标签页

    选定操作器详细信息选项卡的屏幕截图。
  3. 单击 Storage Cluster 的 Create Instance 链接。
  4. 将 Mode 选择为 External。默认情况下,Internal 被选为部署模式。

    图 4.3. 连接到创建存储集群表单上的外部集群部分

    选择模式为外部后,屏幕截图会显示连接到外部集群部分,您可以在其中下载 python 脚本,然后上传 RHCS json 文件。
  5. 在 Connect to external cluster 部分中,单击 Download Script 链接,以下载用于提取 Ceph 集群详细信息的 python 脚本。
  6. 要提取 Red Hat Ceph Storage (RHCS) 集群详情,请联系 RHCS 管理员,以在带有 admin 密钥 的 Red Hat Ceph Storage 节点上运行下载的 python 脚本。

    1. 在 RHCS 节点上运行以下命令,以查看可用参数的列表:

      # python3 ceph-external-cluster-details-exporter.py --help
      重要

      如果在 Red Hat Enterprise Linux 7.x (RHEL 7.x) 集群中部署了 Red Hat Ceph Storage 4.x 集群,则使用 python 而不是 python3

      注意

      您也可以从 MON 容器(容器化部署)或 MON 节点(rpm 部署)运行 脚本。

    2. 要从 RHCS 集群检索外部集群详情,请运行以下命令

      # python3 ceph-external-cluster-details-exporter.py \
      --rbd-data-pool-name <rbd block pool name>  [optional arguments]

      例如:

      # python3 ceph-external-cluster-details-exporter.py --rbd-data-pool-name ceph-rbd --monitoring-endpoint xxx.xxx.xxx.xxx --monitoring-endpoint-port 9283 --rgw-endpoint xxx.xxx.xxx.xxx:xxxx --run-as-user client.ocs

      在上面的示例中,

      • --rbd-data-pool-name 是用于在 OpenShift Container Storage 中提供块存储的强制参数。
      • --rgw-endpoint 是可选的。如果要通过 Ceph Rados 网关为 OpenShift Container Storage 置备对象存储,请提供此参数。使用以下格式提供端点:<ip_address>:<port>
      • --monitoring-endpoint 是可选的。它是可从 OpenShift 容器平台集群访问的活动 ceph-mgr 的 IP 地址。如果没有提供,则会自动填充该值。
      • --monitoring-endpoint-port 是可选的。它是与 --monitoring-endpoint 指定的 ceph-mgr Prometheus exporter 关联的端口。如果没有提供,则会自动填充该值。OpenShift Container Storage 4.6 仅支持端口 9283
      • -- run-as-user 是一个可选参数,用于为 Ceph 用户提供由 脚本创建的名称。如果没有指定此参数,则会创建一个默认的用户名 client.healthchecker。新用户的权限被设置为:

        • caps: [mgr] allow command config
        • caps: [mon] allow r, allow command quorum_status, allow command version
        • caps: [osd] allow rwx pool=RGW_POOL_PREFIX.rgw.meta, allow r pool=.rgw.root, allow rw pool=RGW_POOL_PREFIX.rgw.control, allow rx pool=RGW_POOL_PREFIX.rgw.log, allow x pool=RGW_POOL_PREFIX.rgw.buckets.index

          使用 python 脚本生成的 JSON 输出示例:

          [{"name": "rook-ceph-mon-endpoints", "kind": "ConfigMap", "data": {"data": "xxx.xxx.xxx.xxx:xxxx", "maxMonId": "0", "mapping": "{}"}}, {"name": "rook-ceph-mon", "kind": "Secret", "data": {"admin-secret": "admin-secret", "fsid": "<fs-id>", "mon-secret": "mon-secret"}}, {"name": "rook-ceph-operator-creds", "kind": "Secret", "data": {"userID": "client.healthchecker", "userKey": "<user-key>"}}, {"name": "rook-csi-rbd-node", "kind": "Secret", "data": {"userID": "csi-rbd-node", "userKey": "<user-key>"}}, {"name": "ceph-rbd", "kind": "StorageClass", "data": {"pool": "ceph-rbd"}}, {"name": "monitoring-endpoint", "kind": "CephCluster", "data": {"MonitoringEndpoint": "xxx.xxx.xxx.xxx", "MonitoringPort": "xxxx"}}, {"name": "rook-csi-rbd-provisioner", "kind": "Secret", "data": {"userID": "csi-rbd-provisioner", "userKey": "<user-key>"}}, {"name": "rook-csi-cephfs-provisioner", "kind": "Secret", "data": {"adminID": "csi-cephfs-provisioner", "adminKey": "<admin-key>"}}, {"name": "rook-csi-cephfs-node", "kind": "Secret", "data": {"adminID": "csi-cephfs-node", "adminKey": "<admin-key>"}}, {"name": "cephfs", "kind": "StorageClass", "data": {"fsName": "cephfs", "pool": "cephfs_data"}}, {"name": "ceph-rgw", "kind": "StorageClass", "data": {"endpoint": "xxx.xxx.xxx.xxx:xxxx", "poolPrefix": "default"}}]

    3. 将 JSON 输出保存到带有 .json 扩展名的文件

      注意

      要使 OpenShift Container Storage 无缝工作,请确保使用 JSON 文件上传的参数(RGW 端点、CephFS 详细信息和 RBD 池等)在创建存储集群后在 RHCS 外部集群上保持不变。

  7. External cluster metadata → Browse 来选择并上传 JSON 文件。

    JSON 文件的内容填充并在文本框中显示。

    图 4.4. JSON 文件内容

    屏幕截图显示凭据文件在上传后的内容
  8. 点击 Create

    Create 按钮只有在上传 .json 文件后才会启用。

验证步骤

  1. 验证已安装存储集群的最后一个 Status 显示为 Phase: Ready,并带有绿色勾号标记。

    • Operators → Installed Operators → Storage Cluster 链接来查看存储集群安装状态。
    • 另外,当使用 Operator Details 选项卡时,您可以点击 Storage Cluster 选项卡查看状态。
  2. 要验证 OpenShift Container Storage、Pod 和 StorageClass 是否已成功安装,请参阅验证外部 OpenShift Container Storage 安装模式

第 5 章 为外部模式验证 OpenShift Container Storage 安装

使用本节验证 OpenShift Container Storage 是否已正确部署。

5.1. 验证 pod 的状态

  1. 从 OpenShift Web 控制台左侧窗格中,点击 Workloads → Pods
  2. Project 下拉列表中,选择 openshift-storage

    有关每个组件预期的 pod 数量及其变化取决于节点数量的更多信息,请参阅 表 5.1 “对应 OpenShift Container Storage 组件的 Pod”

  3. 验证以下 pod 是否处于运行状态:

    表 5.1. 对应 OpenShift Container Storage 组件的 Pod

    组件对应的 pod

    OpenShift Container Storage Operator

    • OCS-operator-*(在任何 worker 节点上有 1 个 pod)
    • ocs-metrics-exporter-*

    Rook-ceph Operator

    rook-ceph-operator-*

    (任何 worker 节点上有 1 个 pod)

    多云对象网关

    • noobaa-operator-* (任何 worker 节点上 1 个 pod)
    • noobaa-core-*(任何 worker 节点上有 1 个 pod)
    • NooBaa-db-* (任何 worker 节点上的 1 pod)
    • noobaa-endpoint-*( 任何 worker 节点上有 1 个 pod)

    CSI

    • cephfs

      • csi-cephfsplugin-* (每个 worker 节点上 1 个 pod)
      • csi-cephfsplugin-provisioner-* (2 个 pod 在不同的 worker 节点上分布)
    注意

    如果没有在外部集群中部署 MDS,则不会创建 csi-cephfs 插件 pod。

    • rbd

      • csi-rbdplugin-* (每个 worker 节点上 1 个 pod)
      • csi-rbdplugin-provisioner-* (2 个 pod 在不同的 worker 节点上分步)

5.2. 验证 OpenShift Container Storage 集群是否正常运行

  • 点击 OpenShift Web 控制台左侧窗格中的 Home → Overview,然后点击 Persistent Storage 选项卡。
  • Status 卡 中,验证 OCS 集群有一个绿色勾号标记,如下图所示:

    图 5.1. Persistent Storage Overview Dashboard 中的健康状态卡

    在持久性存储仪表板中显示外部集群健康状况的状态卡截图
  • 详情卡中,验证集群信息是否显示如下:

    服务名称
    OpenShift Container Storage
    集群名称
    ocs-external-storagecluster
    提供者
    vSphere
    模式
    外部
    Version
    ocs-operator-4.6.0

如需有关使用持久性存储仪表板的 OpenShift Container Storage 集群健康状况的更多信息,请参阅监控 OpenShift Container Storage

5.3. 验证 Multicloud 对象网关是否健康

  • 点击 OpenShift Web 控制台左侧窗格中的 Home → Overview,然后点击 Object Service 选项卡。
  • Status 卡 中,验证 Object ServiceData Resiliency 都处于 Ready 状态(绿色钩号)。

    图 5.2. Object Service Overview Dashboard 中的健康状态卡

    对象服务仪表板中健康检查的截图
  • Details 卡 中,验证 MCG 信息是否正确显示,如下:

    服务名称
    OpenShift Container Storage
    系统名称

    多云对象网关

    RADOS 对象网关

    提供者
    vSphere
    Version
    ocs-operator-4.6.0
注意

RADOS 对象网关仅列出在以外部模式部署 OpenShift Container Storage 时包含 RADOS 对象网关端点详细信息的情况。

如需有关使用对象服务仪表板的 OpenShift Container Storage 集群健康状况的更多信息,请参阅 监控 OpenShift Container Storage

5.4. 验证存储类是否已创建并列出

  • 从 OpenShift Web 控制台左侧窗格中,点击 Storage → Storage Classes
  • 验证是否在创建 OpenShift Container Storage 集群时创建了以下存储类:

    • ocs-external-storagecluster-ceph-rbd
    • ocs-external-storagecluster-ceph-rgw
    • ocs-external-storagecluster-cephfs
    • openshift-storage.noobaa.io
注意
  • 如果没有在外部集群中部署 MDS,则不会创建 ocs-external-storagecluster-cephfs 存储类。
  • 如果没有在外部集群中部署 RGW,则不会创建 ocs-external-storagecluster-ceph-rgw 存储类。

如需有关 MDS 和 RGW 的更多信息,请参阅 Red Hat Ceph Storage 文档

5.5. 验证 Ceph 集群是否已连接

运行以下命令,以验证 OpenShift Container Storage 集群是否已连接到外部 Red Hat Ceph Storage 集群。

$ oc get cephcluster -n openshift-storage
NAME                                      DATADIRHOSTPATH     MONCOUNT    AGE      PHASE       MESSAGE                         HEALTH
ocs-external-storagecluster-cephcluster                                   31m15s   Connected   Cluster connected successfully  HEALTH_OK

5.6. 验证存储集群是否已就绪

运行以下命令,以验证存储集群是否已就绪,并且 External 选项设为 true。

$ oc get storagecluster -n openshift-storage
NAME                        AGE      PHASE EXTERNAL  CREATED AT              VERSION
ocs-external-storagecluster 31m15s   Ready true      2020-07-29T20:43:04Z    4.6.0

第 6 章 卸载 OpenShift Container Storage

6.1. 以外部模式卸载 OpenShift Container Storage

使用本节中的步骤卸载 OpenShift Container Storage。卸载 OpenShift Container Storage 不会从外部集群中删除 RBD 池,或卸载外部 Red Hat Ceph Storage 集群。

卸载注解

Storage Cluster 上的注解用于更改卸载过程的行为。要定义卸载行为,在存储集群中引入了以下两个注解:

  • uninstall.ocs.openshift.io/cleanup-policy: delete
  • uninstall.ocs.openshift.io/mode: graceful
注意

uninstall.ocs.openshift.io/cleanup-policy 不适用于外部模式。

下表提供了有关可用于这些注解的不同值的信息:

表 6.1. uninstall.ocs.openshift.io 卸载注解描述

注解默认行为

cleanup-policy

delete

Rook 清理物理驱动器和 DataDirHostPath

cleanup-policy

retain

Rook 不会清理物理驱动器和 DataDirHostPath

mode

graceful

Rook 和 NooBaa 暂停卸载过程,直到管理员/用户移除 PVC 和 OBC

mode

forced

rook 和 NooBaa 会在卸载过程中继续进行,即使 PVC/OBCs 使用 Rook 和 NooBaa 置备

您可以通过使用以下命令编辑注解值来更改卸载模式:

$ oc annotate storagecluster ocs-external-storagecluster uninstall.ocs.openshift.io/mode="forced" --overwrite
storagecluster.ocs.openshift.io/ocs-external-storagecluster annotated

先决条件

  • 确保 OpenShift Container Storage 集群处于健康状态。当因为资源或节点不足而导致部分 pod 无法成功终止时,卸载过程可能会失败。如果集群处于不健康状态,请在卸载 OpenShift Container Storage 前联络红帽客户支持。
  • 使用 OpenShift Container Storage 提供的存储类,确保应用程序不使用持久性卷声明 (PVC) 或对象存储桶声明 (OBC)。

流程

  1. 删除使用 OpenShift Container Storage 的卷快照。

    1. 列出所有命名空间中的卷快照

      $ oc get volumesnapshot --all-namespaces
    2. 在上一命令的输出中,识别和删除使用 OpenShift Container Storage 的卷快照。

      $ oc delete volumesnapshot <VOLUME-SNAPSHOT-NAME> -n <NAMESPACE>
  2. 删除使用 OpenShift Container Storage 的 PVC 和 OBC。

    在默认的卸载模式 (graceful) 中,卸载程序会等待所有使用 OpenShift Container Storage 的 PVC 和 OBC 被删除。

    如果要事先删除 PVC 来删除存储集群,您可以将卸载模式注解设置为"强制"并跳过此步骤。这样做会导致系统中出现孤立 PVC 和 OBC。

    1. 使用 OpenShift Container Storage 删除 OpenShift Container Platform 监控堆栈 PVC。

      请查看 第 6.2 节 “从 OpenShift Container Storage 中删除监控堆栈”

    2. 使用 OpenShift Container Storage 删除 OpenShift Container Platform Registry PVC。

      请查看 第 6.3 节 “从 OpenShift Container Storage 中删除 OpenShift Container Platform registry”

    3. 使用 OpenShift Container Storage 删除 OpenShift Container Platform 日志 PVC。

      请查看 第 6.4 节 “从 OpenShift Container Storage 中删除集群日志记录 Operator”

    4. 删除使用 OpenShift Container Storage 置备的其他 PVC 和 OBC。

      • 下面是一个示例脚本,用于标识使用 OpenShift Container Storage 置备的 PVC 和 OBC。该脚本忽略 Openshift Container Storage 内部使用的 PVC 和 OBC。

        #!/bin/bash
        
        RBD_PROVISIONER="openshift-storage.rbd.csi.ceph.com"
        CEPHFS_PROVISIONER="openshift-storage.cephfs.csi.ceph.com"
        NOOBAA_PROVISIONER="openshift-storage.noobaa.io/obc"
        RGW_PROVISIONER="openshift-storage.ceph.rook.io/bucket"
        
        NOOBAA_DB_PVC="noobaa-db"
        NOOBAA_BACKINGSTORE_PVC="noobaa-default-backing-store-noobaa-pvc"
        
        # Find all the OCS StorageClasses
        OCS_STORAGECLASSES=$(oc get storageclasses | grep -e "$RBD_PROVISIONER" -e "$CEPHFS_PROVISIONER" -e "$NOOBAA_PROVISIONER" -e "$RGW_PROVISIONER" | awk '{print $1}')
        
        # List PVCs in each of the StorageClasses
        for SC in $OCS_STORAGECLASSES
        do
                echo "======================================================================"
                echo "$SC StorageClass PVCs and OBCs"
                echo "======================================================================"
                oc get pvc  --all-namespaces --no-headers 2>/dev/null | grep $SC | grep -v -e "$NOOBAA_DB_PVC" -e "$NOOBAA_BACKINGSTORE_PVC"
                oc get obc  --all-namespaces --no-headers 2>/dev/null | grep $SC
                echo
        done
      • 删除 OBC。

        $ oc delete obc <obc name> -n <project name>
      • 删除 PVC。

        $ oc delete pvc <pvc name> -n <project-name>

        确保您已删除了集群中创建的任何自定义后备存储、存储桶类等。

  3. 删除 Storage Cluster 对象并等待相关资源被删除。

    $ oc delete -n openshift-storage storagecluster --all --wait=true
  4. 删除命名空间并等待删除完成。如果 openshift-storage 是活跃的项目,则需要切换到另一个项目。

    例如:

    $ oc project default
    $ oc delete project openshift-storage --wait=true --timeout=5m

    如果以下命令返回 NotFound 错误,则项目被删除。

    $ oc get project openshift-storage
    注意

    卸载 OpenShift Container Storage 时,如果没有完全删除命名空间并处于 Terminating 状态,请执行 故障排除和删除 Uninstall 过程中剩余的资源 的步骤,以识别阻塞命名空间的对象。

  5. 确认已删除使用 OpenShift Container Storage 置备的所有 PV。如果有任何 PV 处于 Released 状态,请将其删除。

    $ oc get pv
    $ oc delete pv <pv name>
  6. 删除 Multicloud 对象网关存储类。

    $ oc delete storageclass openshift-storage.noobaa.io --wait=true --timeout=5m
  7. 删除 CustomResourceDefinitions

    $ oc delete crd backingstores.noobaa.io bucketclasses.noobaa.io cephblockpools.ceph.rook.io cephclusters.ceph.rook.io cephfilesystems.ceph.rook.io cephnfses.ceph.rook.io cephobjectstores.ceph.rook.io cephobjectstoreusers.ceph.rook.io noobaas.noobaa.io ocsinitializations.ocs.openshift.io storageclusters.ocs.openshift.io cephclients.ceph.rook.io cephobjectrealms.ceph.rook.io cephobjectzonegroups.ceph.rook.io cephobjectzones.ceph.rook.io cephrbdmirrors.ceph.rook.io --wait=true --timeout=5m
  8. 在 OpenShift Container Platform Web 控制台中,确保完全卸载 OpenShift Container Storage,

    1. HomeOverview 访问仪表板。
    2. 验证 Persistent StorageObject Service 标签页没有在 Cluster 标签页旁显示。

6.2. 从 OpenShift Container Storage 中删除监控堆栈

使用本节清理 OpenShift Container Storage 中的监控堆栈。

在配置监控堆栈时创建的 PVC 位于 openshift-monitoring 命名空间中。

先决条件

  • PVC 被配置为使用 OpenShift Container Platform 监控堆栈。

    如需更多信息,请参阅配置监控堆栈

流程

  1. 列出当前在 openshift-monitoring 命名空间中运行的 pod 和 PVC。

    $ oc get pod,pvc -n openshift-monitoring
    NAME                           READY   STATUS    RESTARTS   AGE
    pod/alertmanager-main-0         3/3     Running   0          8d
    pod/alertmanager-main-1         3/3     Running   0          8d
    pod/alertmanager-main-2         3/3     Running   0          8d
    pod/cluster-monitoring-
    operator-84457656d-pkrxm        1/1     Running   0          8d
    pod/grafana-79ccf6689f-2ll28    2/2     Running   0          8d
    pod/kube-state-metrics-
    7d86fb966-rvd9w                 3/3     Running   0          8d
    pod/node-exporter-25894         2/2     Running   0          8d
    pod/node-exporter-4dsd7         2/2     Running   0          8d
    pod/node-exporter-6p4zc         2/2     Running   0          8d
    pod/node-exporter-jbjvg         2/2     Running   0          8d
    pod/node-exporter-jj4t5         2/2     Running   0          6d18h
    pod/node-exporter-k856s         2/2     Running   0          6d18h
    pod/node-exporter-rf8gn         2/2     Running   0          8d
    pod/node-exporter-rmb5m         2/2     Running   0          6d18h
    pod/node-exporter-zj7kx         2/2     Running   0          8d
    pod/openshift-state-metrics-
    59dbd4f654-4clng                3/3     Running   0          8d
    pod/prometheus-adapter-
    5df5865596-k8dzn                1/1     Running   0          7d23h
    pod/prometheus-adapter-
    5df5865596-n2gj9                1/1     Running   0          7d23h
    pod/prometheus-k8s-0            6/6     Running   1          8d
    pod/prometheus-k8s-1            6/6     Running   1          8d
    pod/prometheus-operator-
    55cfb858c9-c4zd9                1/1     Running   0          6d21h
    pod/telemeter-client-
    78fc8fc97d-2rgfp                3/3     Running   0          8d
    
    NAME                                                              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
    persistentvolumeclaim/my-alertmanager-claim-alertmanager-main-0   Bound    pvc-0d519c4f-15a5-11ea-baa0-026d231574aa   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   8d
    persistentvolumeclaim/my-alertmanager-claim-alertmanager-main-1   Bound    pvc-0d5a9825-15a5-11ea-baa0-026d231574aa   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   8d
    persistentvolumeclaim/my-alertmanager-claim-alertmanager-main-2   Bound    pvc-0d6413dc-15a5-11ea-baa0-026d231574aa   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   8d
    persistentvolumeclaim/my-prometheus-claim-prometheus-k8s-0        Bound    pvc-0b7c19b0-15a5-11ea-baa0-026d231574aa   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   8d
    persistentvolumeclaim/my-prometheus-claim-prometheus-k8s-1        Bound    pvc-0b8aed3f-15a5-11ea-baa0-026d231574aa   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   8d
  2. 编辑监控 configmap

    $ oc -n openshift-monitoring edit configmap cluster-monitoring-config
  3. 删除引用 OpenShift Container Storage 存储类的所有 config 部分,如下例所示并保存。

    编辑前

    .
    .
    .
    apiVersion: v1
    data:
      config.yaml: |
        alertmanagerMain:
          volumeClaimTemplate:
            metadata:
              name: my-alertmanager-claim
            spec:
              resources:
                requests:
                  storage: 40Gi
              storageClassName: ocs-external-storagecluster-ceph-rbd
        prometheusK8s:
          volumeClaimTemplate:
            metadata:
              name: my-prometheus-claim
            spec:
              resources:
                requests:
                  storage: 40Gi
              storageClassName: ocs-external-storagecluster-ceph-rbd
    kind: ConfigMap
    metadata:
      creationTimestamp: "2019-12-02T07:47:29Z"
      name: cluster-monitoring-config
      namespace: openshift-monitoring
      resourceVersion: "22110"
      selfLink: /api/v1/namespaces/openshift-monitoring/configmaps/cluster-monitoring-config
      uid: fd6d988b-14d7-11ea-84ff-066035b9efa8
    
    
    .
    .
    .

    编辑后

    .
    .
    .
    apiVersion: v1
    data:
      config.yaml: |
    kind: ConfigMap
    metadata:
      creationTimestamp: "2019-11-21T13:07:05Z"
      name: cluster-monitoring-config
      namespace: openshift-monitoring
      resourceVersion: "404352"
      selfLink: /api/v1/namespaces/openshift-monitoring/configmaps/cluster-monitoring-config
      uid: d12c796a-0c5f-11ea-9832-063cd735b81c
    .
    .
    .

    在本例中,alertmanagerMainprometheusK8s 监控组件使用 OpenShift Container Storage PVC。

  4. 列出使用 PVC 的 pod。

    在本例中,消耗 PVC 的 alertmanagerMainprometheusK8s pod 处于 Terminating 状态。这些 pod 不再使用 OpenShift Container Storage PVC 后,您可以删除 PVC。

    $ oc get pod,pvc -n openshift-monitoring
    NAME                                               READY   STATUS      RESTARTS AGE
    pod/alertmanager-main-0                            3/3     Terminating   0      10h
    pod/alertmanager-main-1                            3/3     Terminating   0      10h
    pod/alertmanager-main-2                            3/3     Terminating   0      10h
    pod/cluster-monitoring-operator-84cd9df668-zhjfn   1/1     Running       0      18h
    pod/grafana-5db6fd97f8-pmtbf                       2/2     Running       0      10h
    pod/kube-state-metrics-895899678-z2r9q             3/3     Running       0      10h
    pod/node-exporter-4njxv                            2/2     Running       0      18h
    pod/node-exporter-b8ckz                            2/2     Running       0      11h
    pod/node-exporter-c2vp5                            2/2     Running       0      18h
    pod/node-exporter-cq65n                            2/2     Running       0      18h
    pod/node-exporter-f5sm7                            2/2     Running       0      11h
    pod/node-exporter-f852c                            2/2     Running       0      18h
    pod/node-exporter-l9zn7                            2/2     Running       0      11h
    pod/node-exporter-ngbs8                            2/2     Running       0      18h
    pod/node-exporter-rv4v9                            2/2     Running       0      18h
    pod/openshift-state-metrics-77d5f699d8-69q5x       3/3     Running       0      10h
    pod/prometheus-adapter-765465b56-4tbxx             1/1     Running       0      10h
    pod/prometheus-adapter-765465b56-s2qg2             1/1     Running       0      10h
    pod/prometheus-k8s-0                               6/6     Terminating   1      9m47s
    pod/prometheus-k8s-1                               6/6     Terminating   1      9m47s
    pod/prometheus-operator-cbfd89f9-ldnwc             1/1     Running       0      43m
    pod/telemeter-client-7b5ddb4489-2xfpz              3/3     Running       0      10h
    
    NAME                                                      STATUS  VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
    persistentvolumeclaim/ocs-alertmanager-claim-alertmanager-main-0   Bound    pvc-2eb79797-1fed-11ea-93e1-0a88476a6a64   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   19h
    persistentvolumeclaim/ocs-alertmanager-claim-alertmanager-main-1   Bound    pvc-2ebeee54-1fed-11ea-93e1-0a88476a6a64   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   19h
    persistentvolumeclaim/ocs-alertmanager-claim-alertmanager-main-2   Bound    pvc-2ec6a9cf-1fed-11ea-93e1-0a88476a6a64   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   19h
    persistentvolumeclaim/ocs-prometheus-claim-prometheus-k8s-0        Bound    pvc-3162a80c-1fed-11ea-93e1-0a88476a6a64   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   19h
    persistentvolumeclaim/ocs-prometheus-claim-prometheus-k8s-1        Bound    pvc-316e99e2-1fed-11ea-93e1-0a88476a6a64   40Gi       RWO            ocs-external-storagecluster-ceph-rbd   19h
  5. 删除相关的 PVC。请确定删除所有消耗存储类的 PVC。

    $ oc delete -n openshift-monitoring pvc <pvc-name> --wait=true --timeout=5m

6.3. 从 OpenShift Container Storage 中删除 OpenShift Container Platform registry

使用这个部分从 OpenShift Container Storage 清理 OpenShift Container Platform registry。如果要配置其他存储,请参阅镜像 registry

作为配置 OpenShift Container Platform registry 的一部分创建的 PVC 位于 openshift-image-registry 命名空间中。

先决条件

  • 镜像 registry 应配置为使用 OpenShift Container Storage PVC。

流程

  1. 编辑 configs.imageregistry.operator.openshift.io 对象,并删除 storage 部分中的内容。

    $ oc edit configs.imageregistry.operator.openshift.io

    编辑前

    .
    .
    .
    storage:
      pvc:
        claim: registry-cephfs-rwx-pvc
    .
    .
    .

    编辑后

    .
    .
    .
    storage:
      emptyDir: {}
    .
    .
    .

    在本例中,PVC 称为 registry-cephfs-rwx-pvc,现在可以安全地删除。

  2. 删除 PVC。

    $ oc delete pvc <pvc-name> -n openshift-image-registry --wait=true --timeout=5m

6.4. 从 OpenShift Container Storage 中删除集群日志记录 Operator

使用本节从 OpenShift Container Storage 清理集群日志记录 Operator。

作为配置集群日志记录 Operator 的一部分创建的 PVC 位于 openshift-logging 命名空间中。

先决条件

  • 集群日志记录实例应该已配置为使用 OpenShift Container Storage PVC。

流程

  1. 删除命名空间中的 ClusterLogging 实例。

    $ oc delete clusterlogging instance -n openshift-logging --wait=true --timeout=5m

    openshift-logging 命名空间中的 PVC 现在可以安全地删除。

  2. 删除 PVC。

    $ oc delete pvc <pvc-name> -n openshift-logging --wait=true --timeout=5m