为带有 Advanced Cluster Management 的 Regional-DR 配置 OpenShift Data Foundation

Red Hat OpenShift Data Foundation 4.9

有关如何在两个不同地理位置配置 OpenShift Data Foundation 的说明,以提供具有灾难恢复功能的存储基础架构。

摘要

本指南旨在详细说明使用 Advanced Cluster Management 部署 OpenShift Data Foundation 进行灾难恢复所需的步骤,以实现高度可用的存储基础架构。
重要
Configuring OpenShift Data Foundation for Regional-DR with Advanced Cluster Management is a developer preview feature and is subject to developer preview support limitations. Developer preview releases are not intended to be run in production environments and are not supported through the Red Hat Customer Portal case management system. If you need assistance with developer preview features, reach out to the ocs-devpreview@redhat.com mailing list and a member of the Red Hat Development Team will assist you as quickly as possible based on their availability and work schedules.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请告诉我们如何让它更好。提供反馈:

  • 关于特定内容的简单评论:

    1. 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
    2. 用鼠标指针高亮显示您想评论的文本部分。
    3. 点在高亮文本上弹出的 Add Feedback
    4. 按照显示的步骤操作。
  • 要提交更复杂的反馈,请创建一个 Bugzilla ticket:

    1. 进入 Bugzilla 网站。
    2. Component 部分中,选择 文档
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

第 1 章 Regional-DR 介绍

灾难恢复是从自然或人为的灾难中恢复并继续业务关键应用程序的能力。它是任何主要组织的整体业务连续性战略,旨在在重大危险事件期间保持业务运营的连续性。

Regional-DR(区域 DR) 功能在地理分散的网站之间提供卷持久数据和元数据复制。在公共云中,它们类似于防止区域故障。区域 DR 可以在一个地理区域出现问题时确保业务的连续性(在可以接受一些可预测数量的数据丢失的情况下)。这通常通过 Recovery Point Objective (RPO) 和 Recovery Time Objective (RTO) 代表。

  • RPO 是一种衡量持久性数据备份或快照的频率。实际上,RPO 表示在中断后将丢失或需要重新输入的数据量。
  • RTO 是企业可以容忍的停机时间。RTO 回答了这个问题,"在收到业务中断通知后,我们的系统需要多久才能恢复?"

本指南旨在详细介绍配置基础架构以启用灾难恢复所需的步骤和命令。

1.1. 区域 DR 解决方案的组件

region-DR 由 Red Hat Advanced Cluster Management for Kubernetes(RHACM)和 OpenShift Data Foundation 组件组成,以便在 OpenShift Container Platform 集群中提供应用程序和数据移动性。

Red Hat Advanced Cluster Management for Kubernetes(RHACM)

RHACM 提供管理多个集群和应用程序生命周期的能力。因此,它充当多集群环境中的控制平面。

RHACM 分为两个部分:

  • RHACM Hub:在多集群 control plane 上运行的组件
  • 受管集群:在受管理的集群中运行的组件

有关此产品的更多信息,请参阅 RHACM 文档RHACM"管理应用程序"文档

OpenShift Data Foundation

OpenShift Data Foundation 为 OpenShift Container Platform 集群中有状态应用程序提供部署和管理存储的功能。

OpenShift Data Foundation 由 Ceph 作为存储提供商提供支持,其生命周期由 OpenShift Data Foundation 组件堆栈中的 Rook 进行管理。Ceph-CSI 为有状态应用提供持久卷的调配与管理。

OpenShift Data Foundation 已增强来实现以下功能:

  • 启用用于镜像的池
  • 在 RBD 池间自动对镜像(image)进行镜像
  • 提供 csi-addons 以管理每个持久性卷声明镜像

OpenShift DR

OpenShift DR 是一个灾难恢复器,用于一组对等 OpenShift 集群内的有状态应用,这些集群使用 RHACM 进行部署和管理,并提供云原生接口来编排持久卷上应用状态的生命周期。它们是:

  • 保护跨 OpenShift 集群的应用状态关系
  • 在当前部署的集群不可用的情况下将应用程序的状态故障转移到对等集群
  • 将应用的状态重新定位到之前部署的集群

OpenShift DR 被分成三个组件:

  • ODF Multicluster Orchestrator: Installed on the multi-cluster control plane(RHACM Hub),创建一个 bootstrap 令牌,并在受管集群间交换这个令牌。
  • OpenShift DR Hub Operator :在 hub 集群上安装,以管理应用程序的故障转移和重新定位。
  • OpenShift DR Cluster Operator :安装在每个受管集群上,以管理应用程序的所有 PVC 的生命周期。

1.2. 区域DR 部署工作流

本节概述了在两个不同的 OpenShift Container Platform 集群中使用 OpenShift Data Foundation 版本 4.9 和 RHACM 版本 2.4 来配置和部署 Regional-DR 功能所需的步骤。除了两个受管集群外,还需要第三个 OpenShift Container Platform 集群来部署 Advanced Cluster Management hub 解决方案。

要配置基础架构,请按照给定的顺序执行以下步骤:

  1. 确保您满足每个区域DR 要求。请参阅启用区域DR 的要求
  2. 通过在两个 OpenShift Data Foundation 受管集群之间创建镜像关系来配置多站点存储复制。请参阅配置多站点存储复制
  3. 在每个受管集群中创建 VolumeReplicationClass 资源,以配置复制计划(例如:每 5 分钟在同级之间复制一次)。请参阅创建 VolumeReplicationClass 资源
  4. 在每个受管集群上创建镜像 StorageClass 资源,支持新的 imageFeatures 以实现启用镜像(mirror)的块卷。请参阅创建镜像 StorageClass 资源
  5. 在受管集群上安装 OpenShift DR Cluster Operator,并创建所需的对象存储桶、secret 和 configmap。请参阅在受管集群中安装 OpenShift DR Cluster Operator。
  6. 在 Hub 集群上安装 OpenShift DR Hub Operator,并创建所需的对象存储桶、secret 和 configmap。请参阅在 Hub 集群上安装 OpenShift DR Hub Operator
  7. 在 hub 集群上创建 DRPolicy 资源,用于在受管集群间部署、故障转移和重新定位工作负载。请参阅在 Hub 集群上创建灾难恢复策略

第 2 章 启用区域DR 的要求

  • 您必须有三个在它们之间具有网络可访问性的 OpenShift 集群:

    • 安装 Advanced Cluster Management for Kubernetes(RHACM operator)、ODF Multicluster Orchestrator 和 OpenShift DR Hub 控制器的 hub 集群
    • 安装 OpenShift Data Foundation、OpenShift DR 集群控制器和应用的主要受管集群
    • 安装 OpenShift Data Foundation、OpenShift DR 集群控制器和应用的辅助受管集群
  • 确保您已在 Hub 集群上安装了 RHACM 操作器和 MultiClusterHub,并使用您的 OpenShift 凭证登录到 RHACM 控制台。具体步骤请查看 RHACM 安装指南

    查找为 Advanced Cluster Manager 控制台创建的路由:

    $ oc get route multicloud-console -n open-cluster-management -o jsonpath --template="https://{.spec.host}/multicloud/clusters{'\n'}"

    输出示例:

    https://multicloud-console.apps.perf3.example.com/multicloud/clusters

    使用 OpenShift 凭据登录后,您应该会看到导入的本地集群。

  • 确保您已使用 RHACM 控制台导入或创建了 主要受管集群次要受管集群

    要使用 Submariner 附加组件连接受管 OpenShift 集群和服务网络,您需要对每个受管集群运行以下命令来验证两个集群是否具有非覆盖网络。

    $ oc get networks.config.openshift.io cluster -o json | jq .spec

    cluster1 的输出示例(如 ocp4perf1):

    {
      "clusterNetwork": [
        {
          "cidr": "10.5.0.0/16",
          "hostPrefix": 23
        }
      ],
      "externalIP": {
        "policy": {}
      },
      "networkType": "OpenShiftSDN",
      "serviceNetwork": [
        "10.15.0.0/16"
      ]
    }

    cluster2 的输出示例(如 ocp4perf2):

    {
      "clusterNetwork": [
        {
          "cidr": "10.6.0.0/16",
          "hostPrefix": 23
        }
      ],
      "externalIP": {
        "policy": {}
      },
      "networkType": "OpenShiftSDN",
      "serviceNetwork": [
        "10.16.0.0/16"
      ]
    }

    如需更多信息,请参阅 Submariner 附加组件文档

  • 确保受管集群可以使用 Submariner 附加组件进行连接。在识别并确保集群和服务网络具有非覆盖范围后,使用 RHACM 控制台和集群集为每个受管集群安装 Submariner 附加组件。具体步骤请参阅 Submariner 文档
  • 确保 OpenShift Data Foundation 4.9 或更高版本安装在每个受管集群上。

    • 如需有关 OpenShift Data Foundation 部署的信息,请参阅基础架构特定的部署指南 (如 AWS、VMware、Bare metal、Azure)。
    • 使用以下命令验证每个受管集群上是否成功部署:

      $ oc get storagecluster -n openshift-storage ocs-storagecluster -o jsonpath='{.status.phase}{"\n"}'

    如果状态结果在 Primary 受管集群secondary 受管集群上处于 Ready 状态,则继续在受管集群上启用镜像(mirror)。

第 3 章 配置多站点存储复制

镜像或复制以每个 CephBlockPool 为基础在对等受管集群中启用,然后可根据池中的特定镜像子集进行配置。rbd-mirror 守护进程负责将本地对等集群的镜像更新复制到远程集群中的同一镜像。

这些说明详细介绍了如何在两个 OpenShift Data Foundation 受管集群之间创建镜像关系。

3.1. 在受管集群中启用 OMAP 生成器和卷复制

主受管集群次受管集群上执行以下步骤,在 csi-rbdplugin-provisioner Pod 中启用 OMAP 和 Volume-Replication CSI sidecar 容器。

流程

  1. 运行以下 patch 命令,将 rook-ceph-operator-config ConfigMap 中的 CSI_ENABLE_OMAP_GENERATOR 的值设置为 true

    $ oc patch cm rook-ceph-operator-config -n openshift-storage --type json --patch  '[{ "op": "add", "path": "/data/CSI_ENABLE_OMAP_GENERATOR", "value": "true" }]'

    输出示例:

    configmap/rook-ceph-operator-config patched
  2. 运行以下 patch 命令,将 rook-ceph-operator-config ConfigMap 中的 CSI_ENABLE_VOLUME_REPLICATION 的值设置为 true

    $ oc patch cm rook-ceph-operator-config -n openshift-storage --type json --patch  '[{ "op": "add", "path": "/data/CSI_ENABLE_VOLUME_REPLICATION", "value": "true" }]'

    输出示例:

    configmap/rook-ceph-operator-config patched
  3. 验证是否针对每个 csi-rbdplugin-provisioner pod 添加了以下两个新的 CSI sidecar。

    $ for l in $(oc get pods -n openshift-storage -l app=csi-rbdplugin-provisioner -o jsonpath={.items[*].spec.containers[*].name}) ; do echo $l ; done | egrep "csi-omap-generator|volume-replication"

    输出示例:

    csi-omap-generator
    volume-replication
    csi-omap-generator
    volume-replication
    注意

    新容器会重复,因为存在用于冗余的 twocsi-rbdplugin-provisioner 容器集。

3.2. 安装 OpenShift Data Foundation 多集群编排器

OpenShift Data Foundation Multicluster Orchestrator 是一个控制器,从 Hub 集群上的 OpenShift Container Platform OperatorHub 安装。这个多集群编排器控制器以及 MirrorPeer 自定义资源会创建一个 bootstrap 令牌,并在受管集群间交换这个令牌。

流程

  1. 导航到 Hub 集群上的 OperatorHub,并使用关键字过滤器搜索 ODF Multicluster Orchestrator
  2. 点击 ODF Multicluster Orchestrator 标题。
  3. 保留所有默认设置并单击 Install。

    operator 资源安装在 openshift-operators 中,并可用于所有命名空间。

  4. 验证 ODF 多集群编排器 显示绿色勾号,代表安装成功。

3.3. 在 hub 集群中创建镜像对等

mirror Peer 是一个集群范围的资源,用于保存有关将具有对等对等关系的受管集群的信息。

先决条件

  • 确保 Hub 集群上安装了 ODF 多集群编排器
  • 每个镜像对等点只能有两个集群。
  • 确保每个集群都有唯一标识的集群名称,如 ocp4perf1ocp4perf2

流程

  1. 点击 ODF Multicluster Orchestrator 查看 Operator 详情。

    您还可以在成功安装 Multicluster Orchestrator 后点 View Operator

  2. 点击 Mirror Peer API Create 实例,然后选择 YAML 视图。
  3. 在 YAML 视图中创建 Mirror Peer。

    1. 在将 <cluster1><cluster2> 替换为 RHACM 控制台中受管集群的正确名称后,将以下 YAML 复制到一个名为 mirror-peer.yaml 的文件。

      apiVersion: multicluster.odf.openshift.io/v1alpha1
      kind: MirrorPeer
      metadata:
        name: mirrorpeer-<cluster1>-<cluster2>
      spec:
        items:
        - clusterName: <cluster1>
          storageClusterRef:
            name: ocs-storagecluster
            namespace: openshift-storage
        - clusterName: <cluster2>
          storageClusterRef:
            name: ocs-storagecluster
            namespace: openshift-storage
      注意

      不需要指定一个命名空间来创建此资源,因为 MirrorPeer 是一个集群范围的资源。

    2. 将唯一 mirror-peer.yaml 文件的内容复制到 YAML 视图中。您必须完全替换原始的内容。
    3. 点 YAML 视图屏幕底部的 Create
  4. 验证您是否可以看到 Phase 的状态为 ExchangedSecret

    注意

    在某些部署中,验证的输出也可以是 ExchangingSecret,这也是可接受的结果。

3.4. 在受管集群上启用镜像

要启用镜像功能,您必须为每个受管集群启用存储集群的镜像设置。这是使用 CLI 和 oc patch 命令的手动步骤。

重要

您必须在启用了 StorageCluster 镜像后,在主受管集群次受管集群上运行 oc patch storagecluster 命令,以及后续验证命令。

流程

  1. 使用存储集群名称启用集群级别镜像标记。

    $ oc patch storagecluster $(oc get storagecluster -n openshift-storage -o=jsonpath='{.items[0].metadata.name}')  -n openshift-storage --type json --patch  '[{ "op": "replace", "path": "/spec/mirroring", "value": {"enabled": true} }]'

    输出示例:

    storagecluster.ocs.openshift.io/ocs-storagecluster patched
  2. 验证默认 Ceph 块池上是否启用了镜像功能。

    $ oc get cephblockpool -n openshift-storage -o=jsonpath='{.items[?(@.metadata.ownerReferences[*].kind=="StorageCluster")].spec.mirroring.enabled}{"\n"}'

    输出示例:

    true
  3. 验证 rbd-mirror 容器集是否已启动并在运行。

    $ oc get pods -o name -l app=rook-ceph-rbd-mirror -n openshift-storage

    输出示例:

    pod/rook-ceph-rbd-mirror-a-6486c7d875-56v2v
  4. 验证守护进程健康状态。

    $ oc get cephblockpool ocs-storagecluster-cephblockpool -n openshift-storage -o jsonpath='{.status.mirroringStatus.summary}{"\n"}'

    输出示例:

    {"daemon_health":"OK","health":"OK","image_health":"OK","states":{}}
注意

守护进程 健康和健康字段可能需要 10 分钟时间才会从 Warning 更改为 OK。如果大约 10 分钟内状态未更改为 OK,则使用 RHACM 控制台验证 Submariner 附加组件连接是否仍处于 Healthy 状态。

第 4 章 创建 VolumeReplicationClass 资源

VolumeReplicationClass 用于指定要复制的每个卷的 mirroringMode,以及将卷或镜像从本地集群复制到远程集群的频率(例如,每 5 分钟一次)。

注意

此资源必须在主受管集群次受管集群上创建。

流程

  1. 将以下 YAML 保存到名为 rbd-volumereplicationclass.yaml 的文件。

    apiVersion: replication.storage.openshift.io/v1alpha1
    kind: VolumeReplicationClass
    metadata:
      name: odf-rbd-volumereplicationclass
    spec:
      provisioner: openshift-storage.rbd.csi.ceph.com
      parameters:
        mirroringMode: snapshot
        schedulingInterval: "5m"  # <-- Must be the same as scheduling interval in the DRPolicy
        replication.storage.openshift.io/replication-secret-name: rook-csi-rbd-provisioner
        replication.storage.openshift.io/replication-secret-namespace: openshift-storage
  2. 在两个受管集群中创建文件。

    $ oc create -f rbd-volumereplicationclass.yaml

    输出示例:

    volumereplicationclass.replication.storage.openshift.io/odf-rbd-volumereplicationclass created

第 5 章 创建镜像 StorageClass 资源

启用镜像(mirror) 的块卷必须使用新的 StorageClass 来创建,该 StorageClass 需要额外 imageFeatures 才能在受管集群间启用更快的镜像复制。新功能包括 exclusive-lockobject-mapfast-diff。默认 OpenShift Data Foundation StorageClass ocs-storagecluster-ceph-rbd 不包括这些功能。

注意

此资源必须在主受管集群次受管集群上创建。

流程

  1. 将以下 YAML 保存到文件 ocs-storagecluster-ceph-rbdmirror.yaml

    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ocs-storagecluster-ceph-rbdmirror
    parameters:
      clusterID: openshift-storage
      csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner
      csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage
      csi.storage.k8s.io/fstype: ext4
      csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
      csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage
      csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
      csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage
      imageFeatures: layering,exclusive-lock,object-map,fast-diff
      imageFormat: "2"
      pool: ocs-storagecluster-cephblockpool
    provisioner: openshift-storage.rbd.csi.ceph.com
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
  2. 在两个受管集群中创建文件。

    $ oc create -f ocs-storagecluster-ceph-rbdmirror.yaml

    输出示例:

    storageclass.storage.k8s.io/ocs-storagecluster-ceph-rbdmirror created

第 6 章 在受管集群中安装 OpenShift DR Cluster Operator

流程

  1. 在每个受管集群上,导航到 OperatorHub 并为 OpenShift DR Cluster Operator 过滤。
  2. 按照屏幕说明,将操作器安装到 openshift-dr-system 项目中。

    注意

    OpenShift DR Cluster Operator 必须同时安装在主受管集群次受管集群上。

  3. s3 端点之间配置 SSL 访问,以便可以使用安全传输协议和 Hub 集群中的安全传输协议将元数据存储在 MCG 对象存储桶中的备用集群中,以验证对对象存储桶的访问。

    注意

    如果所有 OpenShift 集群都为您的环境使用签名的可信证书集进行部署,则可以跳过本节。

    1. 提取主受管集群 的 ingress 证书,并将输出保存到 primary.crt

      $ oc get cm default-ingress-cert -n openshift-config-managed -o jsonpath="{['data']['ca-bundle\.crt']}" > primary.crt
    2. 提取次受管集群 的 ingress 证书,并将输出保存到 second.crt

      $ oc get cm default-ingress-cert -n openshift-config-managed -o jsonpath="{['data']['ca-bundle\.crt']}" > secondary.crt
    3. 创建新 ConfigMap 以存放远程集群的证书捆绑包,其文件名为 cm-clusters-crt.yaml,位于 主受管集群次受管集群Hub 集群上

      注意

      如本示例文件所示,每个集群可能有超过三个证书。

      apiVersion: v1
      data:
        ca-bundle.crt: |
          -----BEGIN CERTIFICATE-----
          <copy contents of cert1 from primary.crt here>
          -----END CERTIFICATE-----
      
          -----BEGIN CERTIFICATE-----
          <copy contents of cert2 from primary.crt here>
          -----END CERTIFICATE-----
      
          -----BEGIN CERTIFICATE-----
          <copy contents of cert3 primary.crt here>
          -----END CERTIFICATE----
      
          -----BEGIN CERTIFICATE-----
          <copy contents of cert1 from secondary.crt here>
          -----END CERTIFICATE-----
      
          -----BEGIN CERTIFICATE-----
          <copy contents of cert2 from secondary.crt here>
          -----END CERTIFICATE-----
      
          -----BEGIN CERTIFICATE-----
          <copy contents of cert3 from secondary.crt here>
          -----END CERTIFICATE-----
      kind: ConfigMap
      metadata:
        name: user-ca-bundle
        namespace: openshift-config
    4. 主受管集群次受管集群Hub 集群上运行以下命令,以创建该文件。

      $ oc create -f cm-clusters-crt.yaml

      输出示例:

      configmap/user-ca-bundle created
      重要

      要使 Hub 集群 使用 DRPolicy 资源验证对象存储桶的访问权限,必须在 Hub 集群上创建相同的 ConfigMap cm-clusters-crt.yaml

    5. 修改默认的 Proxy 集群资源。

      1. 将以下内容复制并保存到新的 YAML 文件 proxy-ca.yaml 中。

        apiVersion: config.openshift.io/v1
        kind: Proxy
        metadata:
          name: cluster
        spec:
          trustedCA:
            name: user-ca-bundle
      2. 将这个新文件应用到 主受管集群次受管集群Hub集群上的默认代理资源。

        $ oc apply -f proxy-ca.yaml

        输出示例:

        proxy.config.openshift.io/cluster configured
  4. 检索多云对象网关(MCG)密钥和外部 S3 端点。

    1. 检查 MCG 是否安装在主受管集群次受管集群 上,以及 Phase 是否处于 Ready 状态。

      $ oc get noobaa -n openshift-storage

      输出示例:

      NAME     MGMT-ENDPOINTS                   S3-ENDPOINTS                    IMAGE                                                                                                 PHASE   AGE
      noobaa   ["https://10.70.56.161:30145"]   ["https://10.70.56.84:31721"]   quay.io/rhceph-dev/mcg-core@sha256:c4b8857ee9832e6efc5a8597a08b81730b774b2c12a31a436e0c3fadff48e73d   Ready   27h
    2. 将以下 YAML 文件复制到名为 odrbucket.yaml 的文件。

      apiVersion: objectbucket.io/v1alpha1
      kind: ObjectBucketClaim
      metadata:
        name: odrbucket
        namespace: openshift-dr-system
      spec:
        generateBucketName: "odrbucket"
        storageClassName: openshift-storage.noobaa.io
    3. 主受管集群次受管集群上创建 MCG bucket odrbucket

      $ oc create -f odrbucket.yaml

      输出示例:

      objectbucketclaim.objectbucket.io/odrbucket created
    4. 使用以下命令,提取每个受管集群的 odrbucket OBC 访问密钥作为其 base-64 编码 值。

      $ oc get secret odrbucket -n openshift-dr-system -o jsonpath='{.data.AWS_ACCESS_KEY_ID}{"\n"}'

      输出示例:

      cFpIYTZWN1NhemJjbEUyWlpwN1E=
    5. 使用以下命令,提取每个受管集群的 odrbucket OBC secret 密钥作为其 base-64 编码 值。

      $ oc get secret odrbucket -n openshift-dr-system -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}{"\n"}'

      输出示例:

      V1hUSnMzZUoxMHRRTXdGMU9jQXRmUlAyMmd5bGwwYjNvMHprZVhtNw==
  5. 为受管集群创建 S3 Secret。

    现在,已经提取了必要的 MCG 信息,必须在主受管集群次受管集群上创建新的 Secret。这些新的 Secret 存储两个受管集群的 MCG 访问和 secret 密钥。

    注意

    OpenShift DR 需要一个或多个 S3 存储来存储受管集群中工作负载的相关集群数据,并在故障转移或重新定位操作期间编配工作负载的恢复。这些说明适用于使用多云网关(MCG)创建所需的对象存储桶。安装 OpenShift Data Foundation 后,MCG 应已被安装。

    1. 将主受管集群的以下 S3 secret YAML 格式复制到名为 odr-s3secret-primary.yaml 的文件。

      apiVersion: v1
      data:
        AWS_ACCESS_KEY_ID: <primary cluster base-64 encoded access key>
        AWS_SECRET_ACCESS_KEY: <primary cluster base-64 encoded secret access key>
      kind: Secret
      metadata:
        name: odr-s3secret-primary
        namespace: openshift-dr-system

      <primary cluster base-64 编码的 access key &gt ; 和 <primary cluster base-64 编码的 secret access key > 替换为前面步骤中检索的实际值。

    2. 主受管集群次受管集群上创建此 secret。

      $ oc create -f odr-s3secret-primary.yaml

      输出示例:

      secret/odr-s3secret-primary created
    3. 将次受管集群的以下 S3 secret YAML 格式复制到名为 odr-s3secret-secondary.yaml 的文件。

      apiVersion: v1
      data:
        AWS_ACCESS_KEY_ID: <secondary cluster base-64 encoded access key>
        AWS_SECRET_ACCESS_KEY: <secondary cluster base-64 encoded secret access key>
      kind: Secret
      metadata:
        name: odr-s3secret-secondary
        namespace: openshift-dr-system

      使用在第 4 步中获取的实际值替换 <secondary cluster base-64 encoded access key><secondary cluster base-64 encoded secret access key>

    4. 主受管集群次受管集群上创建此 secret。

      $ oc create -f odr-s3secret-secondary.yaml

      输出示例:

      secret/odr-s3secret-secondary created
      重要

      access 和 secret key 的值必须采用 base-64 编码。在前面的步骤中检索了密钥的编码值。

  6. 在每个受管集群上配置 OpenShift DR Cluster Operator ConfigMap。

    1. 使用以下命令,搜索外部 S3 端点 s3CompatibleEndpoint 或路由来为每个受管集群上的 MCG 进行 MCG。

      $ oc get route s3 -n openshift-storage -o jsonpath --template="https://{.spec.host}{'\n'}"

      输出示例:

      https://s3-openshift-storage.apps.perf1.example.com
      重要

      唯一的 s3CompatibleEndpoint 路由或 s3-openshift-storage.apps.<primary clusterID>.<baseDomain>s3-openshift-storage.apps.<secondary clusterID>.<baseDomain> 必须分别为主受管集群次受管集群获取。

    2. 搜索 odrbucket OBC bucket 名称。

      $ oc get configmap odrbucket -n openshift-dr-system -o jsonpath='{.data.BUCKET_NAME}{"\n"}'

      输出示例:

      odrbucket-2f2d44e4-59cb-4577-b303-7219be809dcd
      重要

      唯一的 s3Bucket 名称 odrbucket-<your value1>odrbucket-<your value2> 必须分别在主受管集群次受管集群上获得。

    3. 修改 ConfigMap ramen-dr-cluster-operator-config 以添加新内容。

      $ oc edit configmap ramen-dr-cluster-operator-config -n openshift-dr-system
    4. s3StoreProfiles 开始,将以下新内容添加到 主受管集群次受管集群的 ConfigMap 中。

      [...]
      data:
        ramen_manager_config.yaml: |
          apiVersion: ramendr.openshift.io/v1alpha1
          kind: RamenConfig
      [...]
          ramenControllerType: "dr-cluster"
          ### Start of new content to be added
          s3StoreProfiles:
          - s3ProfileName: s3-primary
            s3CompatibleEndpoint: https://s3-openshift-storage.apps.<primary clusterID>.<baseDomain>
            s3Region: primary
            s3Bucket: odrbucket-<your value1>
            s3SecretRef:
              name: odr-s3secret-primary
              namespace: openshift-dr-system
          - s3ProfileName: s3-secondary
            s3CompatibleEndpoint: https://s3-openshift-storage.apps.<secondary clusterID>.<baseDomain>
            s3Region: secondary
            s3Bucket: odrbucket-<your value2>
            s3SecretRef:
              name: odr-s3secret-secondary
              namespace: openshift-dr-system
      [...]

第 7 章 在 Hub 集群上安装 OpenShift DR Hub Operator

先决条件

  • 确保 access 和 secret key 的值采用 base-64 编码。键的编码值在上一节中检索,生成的 Secret 与受管集群上已创建的 Secret 完全相同

流程

  1. 在 Hub 集群中,导航到 OperatorHub 并使用 OpenShift DR Hub Operator 的搜索过滤器。
  2. 按照屏幕说明,将操作器安装到 openshift-dr-system 项目中。
  3. 使用 主受管集群的以下 S3 secret YAML 格式,为 Hub 集群创建 S3 secret。

    apiVersion: v1
    data:
      AWS_ACCESS_KEY_ID: <primary cluster base-64 encoded access key>
      AWS_SECRET_ACCESS_KEY: <primary cluster base-64 encoded secret access key>
    kind: Secret
    metadata:
      name: odr-s3secret-primary
      namespace: openshift-dr-system

    运行以下命令,在 Hub 集群上创建此机密。

    $ oc create -f odr-s3secret-primary.yaml

    输出示例:

    secret/odr-s3secret-primary created
  4. 为 secondary 受管集群 使用以下 S3 secret YAML 格式创建 S3 secret。

    apiVersion: v1
    data:
      AWS_ACCESS_KEY_ID: <secondary cluster base-64 encoded access key>
      AWS_SECRET_ACCESS_KEY: <secondary cluster base-64 encoded secret access key>
    kind: Secret
    metadata:
      name: odr-s3secret-secondary
      namespace: openshift-dr-system

    运行以下命令,在 Hub 集群上创建此机密。

    $ oc create -f odr-s3secret-secondary.yaml

    输出示例:

    secret/odr-s3secret-secondary created
  5. 为 OpenShift DR Hub Operator 配置 ConfigMap。

    成功创建 Operator 后,将创建一个名为 ramen-hub-operator-config 的新 ConfigMap。

    1. 运行以下命令来编辑文件。

      $ oc edit configmap ramen-hub-operator-config -n openshift-dr-system
    2. s3StoreProfiles 开始,将以下内容添加到 Hub 集群上的 ConfigMap 中。

      [...]
      apiVersion: v1
      data:
        ramen_manager_config.yaml: |
          apiVersion: ramendr.openshift.io/v1alpha1
          kind: RamenConfig
      [...]
          ramenControllerType: "dr-hub"
          ### Start of new content to be added
          s3StoreProfiles:
          - s3ProfileName: s3-primary
            s3CompatibleEndpoint: https://s3-openshift-storage.apps.<primary clusterID>.<baseDomain>
            s3Region: primary
            s3Bucket: odrbucket-<your value1>
            s3SecretRef:
              name: odr-s3secret-primary
              namespace: openshift-dr-system
          - s3ProfileName: s3-secondary
            s3CompatibleEndpoint: https://s3-openshift-storage.apps.<secondary clusterID>.<baseDomain>
            s3Region: secondary
            s3Bucket: odrbucket-<your value2>
            s3SecretRef:
              name: odr-s3secret-secondary
              namespace: openshift-dr-system
      [...]
      注意

      确保将 <primary clusterID>, <secondary clusterID>, baseDomain, odrbucket-<your value1>, 和 odrbucket-<your value2> 变量替换为与受管集群上 ramen-cluster-operator-config ConfigMap 所使用的值完全相同的值。

第 8 章 在 Hub 集群上创建灾难恢复策略

OpenShift DR 使用 RHACM hub 集群上的 Disaster Recovery Policy(DRPolicy)资源(集群范围)来部署、故障转移和重新定位受管集群中的工作负载。

先决条件

  • 确保存在两个集群,它们对等进行存储级别复制,并且启用了 CSI 卷复制。
  • 确保有一个调度间隔,决定按照什么频率执行数据复制,它也充当使用 DRPolicy 的工作负载的粗粒度恢复点目标(RPO)。
  • 确保为策略中的每个集群分配 S3 配置文件名称,该名称使用 OpenShift DR 集群和 hub 操作器的 ConfigMap 配置。

步骤

  1. 在 Hub 集群中,导航到 openshift-dr-system 项目中的 Installed Operators,然后点击 OpenShift DR Hub Operator。您应该会看到两个可用的 API,DRPolicy 和 DRPlacementControl。
  2. 为 DRPolicy 点 Create instance 并点击 YAML 视图
  3. 在将 <cluster1><cluster2> 替换为 RHACM 中的受管集群的正确名称后,复制并保存到名为 drpolicy.yaml 的文件。

    apiVersion: ramendr.openshift.io/v1alpha1
    kind: DRPolicy
    metadata:
      name: odr-policy-5m
    spec:
      drClusterSet:
      - name: <cluster1>
        s3ProfileName: s3-primary
      - name: <cluster2>
        s3ProfileName: s3-secondary
      schedulingInterval: 5m
    注意

    不需要指定一个命名空间来创建此资源,因为 DRPolicy 是一个集群范围的资源。

  4. 将唯一 drpolicy.yaml 文件的内容复制到 YAML 视图中。您必须完全替换原始的内容。
  5. 在 YAML 视图屏幕上点 Create

    重要

    DRPolicy 调度间隔必须与创建 VolumeReplicationClass 资源部分中配置的间隔匹配。

  6. 运行以下命令验证 DRPolicy 是否已成功创建:

    $ oc get drpolicy odr-policy-5m -n openshift-dr-system -o jsonpath='{.status.conditions[].reason}{"\n"}'

    输出示例:

    Succeeded

第 9 章 创建示例应用程序

您需要一个示例应用程序来测试从主受管集群到次受管集群的故障转移,然后再次测试。使用名为 busybox 的示例应用作为示例。

步骤

  1. 在 Hub 集群上为 busybox 示例应用程序创建一个命名空间项目

    $ oc new-project busybox-sample
    注意

    如果需要,可以使用除 busybox-sample 以外的不同项目名称。在通过 Advanced Cluster Manager 控制台部署示例应用程序时,确保使用与此步骤中创建相同的项目名称。

  2. 创建 DRPlacementControl 资源

    DRPlacementControl 是一个 API,在 Hub 集群上安装 OpenShift DR Hub Operator 后可用。它基本上是一个 Advanced Cluster Manager PlacementRule 协调器,它根据作为 DRPolicy 一部分的集群中的数据可用性来编排放置决策。

    1. 在 Hub 集群中,导航到 busybox-sample 项目中的 Installed Operators,再单击 OpenShift DR Hub Operator。您应该会看到两个可用的 API,DRPolicy 和 DRPlacementControl。
    2. DRPlacementControl 创建一个实例,然后进入 YAML 视图。确保已选中 busybox-sample 项目。
    3. 在将 <cluster1> 替换为 Advanced Cluster Manager 中的受管集群的正确名称后,将以下 YAML 复制到名为 busybox-drpc.yaml 的文件。

      apiVersion: ramendr.openshift.io/v1alpha1
      kind: DRPlacementControl
      metadata:
        labels:
          app: busybox-sample
        name: busybox-drpc
      spec:
        drPolicyRef:
          name: odr-policy-5m
        placementRef:
          kind: PlacementRule
          name: busybox-placement
        preferredCluster: <cluster1>
        pvcSelector:
          matchLabels:
            appname: busybox
    4. 将唯一 busybox-drpc.yaml 文件的内容复制到 YAML 视图(完全替换原始内容)。
    5. 在 YAML 视图屏幕上点 Create

      您还可以使用以下 CLI 命令创建此资源:

      $ oc create -f busybox-drpc.yaml -n busybox-sample

      输出示例:

      drplacementcontrol.ramendr.openshift.io/busybox-drpc created
      重要

      此资源必须在 busybox-sample 命名空间(或您之前创建的任何命名空间)中创建。

  3. 创建 Placement Rule 资源,以定义可以部署资源模板的目标集群。使用放置规则促进应用程序的多集群部署。

    1. 将以下 YAML 复制到名为 busybox-placementrule.yaml 的文件中。

      apiVersion: apps.open-cluster-management.io/v1
      kind: PlacementRule
      metadata:
        labels:
          app: busybox-sample
        name: busybox-placement
      spec:
        clusterConditions:
        - status: "True"
          type: ManagedClusterConditionAvailable
        clusterReplicas: 1
        schedulerName: ramen
    2. busybox-sample 应用创建 Placement Rule 资源。

      $ oc create -f busybox-placementrule.yaml -n busybox-sample

      输出示例:

      placementrule.apps.open-cluster-management.io/busybox-placement created
      重要

      此资源必须在 busybox-sample 命名空间(或您之前创建的任何命名空间)中创建。

  4. 使用 RHACM 控制台创建示例应用程序

    1. 如果尚未登录,请使用您的 OpenShift 凭据登录 RHACM 控制台。

      $ oc get route multicloud-console -n open-cluster-management -o jsonpath --template="https://{.spec.host}/multicloud/applications{'\n'}"

      输出示例:

      https://multicloud-console.apps.perf3.example.com/multicloud/applications
    2. 导航到 Applications,再单击 Create application
    3. 选择类型 Subscription
    4. 输入应用程序 Name (如 busybox)和 Namespace (如 busybox-sample)。
    5. 在 Repository location for resources 部分中,选择 Repository type Git
    6. 输入示例应用程序的 Git 存储库 URL、github BranchPath,在其中创建资源 busybox Pod 和 PVC。

      使用示例应用程序存储库作为 https://github.com/RamenDR/ocm-ramen-samples,其中 BranchmainPathbusybox-odr

      重要

      在继续操作前,确保创建了新的 StorageClass ocs-storagecluster-ceph-rbdmirror,如 [创建 Mirror StorageClass 资源] 部分所述。

      使用以下命令验证是否已创建:

      oc get storageclass | grep rbdmirror | awk '{print $1}'

      输出示例:

      ocs-storagecluster-ceph-rbdmirror
    7. 将表单向下滚动到 Select clusters to deploy 部分,然后点击 Select an existing placement configuration
    8. 从下拉列表中选择 现有 Placement Rule (如 busybox-placement)。
    9. 点击 Save

      创建应用程序时,会显示应用程序详情页面。您可以向下滚动到 Resource topology 部分。拓扑中应当对元素和应用程序进行绿色检查标记。

      注意

      要查看更多信息,请点击任何拓扑元素,拓扑视图右侧会显示一个窗口。

  5. 验证示例应用部署和复制。

    现在 busybox 应用程序已部署到首选的集群(在 DRPlacementControl 中指定),可以验证部署。

    1. 登录您的受管集群,其中 busybox 由 RHACM 部署。

      $ oc get pods,pvc -n busybox-sample

      输出示例:

      NAME          READY   STATUS    RESTARTS   AGE
      pod/busybox   1/1     Running   0          6m
      
      NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
      persistentvolumeclaim/busybox-pvc   Bound    pvc-a56c138a-a1a9-4465-927f-af02afbbff37   1Gi        RWO            ocs-storagecluster-ceph-rbd   6m
    2. 验证是否也为 busybox PVC 创建了复制资源。

      $ oc get volumereplication,volumereplicationgroup -n busybox-sample

      输出示例:

      NAME                                                             AGE   VOLUMEREPLICATIONCLASS           PVCNAME       DESIREDSTATE   CURRENTSTATE
      volumereplication.replication.storage.openshift.io/busybox-pvc   6m   odf-rbd-volumereplicationclass   busybox-pvc   primary        Primary
      
      NAME                                                       AGE
      volumereplicationgroup.ramendr.openshift.io/busybox-drpc   6m
    3. 通过对主受管集群次受管集群运行以下命令,验证 busybox 卷是否已复制到备用集群。

      $ oc get cephblockpool ocs-storagecluster-cephblockpool -n openshift-storage -o jsonpath='{.status.mirroringStatus.summary}{"\n"}'

      输出示例:

      {"daemon_health":"OK","health":"OK","image_health":"OK","states":{"replaying":2}}
      注意

      两个受管集群都应该具有完全相同的输出,新的状态为 "states":{"replaying":2}'

9.1. 删除示例应用程序

您可以使用 RHACM 控制台删除示例 application busybox

流程

  1. 在 RHACM 控制台上,前往 Applications
  2. 搜索要删除的示例应用程序(例如 busybox)。
  3. 点击您要删除的应用程序旁边的 Action Menu (⋮)
  4. 点击 Delete application

    选择了 Delete 应用时,将显示一个新屏幕,询问是否还应删除与应用相关的资源。

  5. 选中 Remove application 相关资源复选框,以删除 Subscription 和 PlacementRule。
  6. 单击 Delete。这将删除主受管集群(或应用程序所运行的任何群集)上的 busybox 应用程序。
  7. 除了使用 RHACM 控制台删除资源外,在删除 busybox 应用后,还必须立即删除 DRPlacementControl

    1. 登录 Hub 集群的 OpenShift Web 控制台,再导航到 project busybox-sample 的 Installed Operators。
    2. 单击 OpenShift DR Hub Operator,然后单击 DRPlacementControl 选项卡。
    3. 点击您要删除的 busybox 应用程序 DRPlacementControl 旁边的 Action Menu (⋮)
    4. 单击 Delete DRPlacementControl
    5. 单击 Delete
注意

此过程可用于使用 DRPlacementControl 资源删除任何应用。也可以使用 CLI,将 DRPlacementControl 资源删除到应用命名空间中。

第 10 章 受管集群之间的应用程序故障切换

本节介绍如何故障转移 busybox 示例应用程序。区域DR 的故障转移方法基于应用程序。以这种方式保护的每个应用都必须具有对应的 DRPlacementControl 资源,并在应用程序命名空间中创建 PlacementRule 资源,如 Create Sample Application for DR 测试部分所示。

步骤

  1. 在 Hub 集群中,导航到 Installed Operators,然后点 Openshift DR Hub Operator
  2. 单击 DRPlacementControl 选项卡。
  3. 单击 DRPC busybox-drpc,然后单击 YAML 视图。
  4. 添加 actionfailoverCluster 详情,如下方屏幕截图所示。failoverCluster 应该是第二个受管集群的 ACM 集群名称。

    DRPlacementControl 添加 Failover 操作

    Image show where to add the action Failover in the YAML view

  5. 点击 Save
  6. 验证 application busybox 是否现在在次受管集群中运行,即 YAML 文件中指定的故障转移集群 ocp4perf2

    $ oc get pods,pvc -n busybox-sample

    输出示例:

    NAME          READY   STATUS    RESTARTS   AGE
    pod/busybox   1/1     Running   0          35s
    
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
    persistentvolumeclaim/busybox-pvc   Bound    pvc-79f2a74d-6e2c-48fb-9ed9-666b74cfa1bb   5Gi        RWO            ocs-storagecluster-ceph-rbd   35s
  7. 验证 busybox 不再在主受管集群上运行。

    $ oc get pods,pvc -n busybox-sample

    输出示例:

    No resources found in busybox-sample namespace.
重要

请注意发行说明的已知区域DR 问题,如已知问题部分所述。

如果您需要开发人员预览功能的帮助,请联络 ocs-devpreview@redhat.com 邮件列表和红帽开发团队成员将根据其可用性和工作计划尽快为您提供协助。

第 11 章 在受管集群间重新定位应用程序

重定位操作与故障转移非常相似。重新定位基于应用,并使用 DRPlacementControl 来触发重定位。重定位的主要区别在于,会发出 重新同步 以确保第二受管集群上保存的任何新应用程序数据都会立即出现,而不会等待镜像调度间隔复制到主要受管集群。

步骤

  1. 在 Hub 集群中,导航到 Installed Operators,然后点 Openshift DR Hub Operator
  2. 单击 DRPlacementControl 选项卡。
  3. 单击 DRPC busybox-drpc,然后单击 YAML 视图。
  4. 操作改为 Relocate

    DRPlacementControl 修改重新分配的操作

    Image show where to modify the action in the YAML view

  5. 点击 Save
  6. 验证 application busybox 现在是否在主要受管集群中运行,故障切换集群 ocp4perf2 是否在 YAML 文件中指定的。

    $ oc get pods,pvc -n busybox-sample

    输出示例:

    NAME          READY   STATUS    RESTARTS   AGE
    pod/busybox   1/1     Running   0          60s
    
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
    persistentvolumeclaim/busybox-pvc   Bound    pvc-79f2a74d-6e2c-48fb-9ed9-666b74cfa1bb   5Gi        RWO            ocs-storagecluster-ceph-rbd   61s
  7. 验证 busybox 是否在第二个受管集群中运行。busybox 应用程序不应在此受管集群上运行。

    $ oc get pods,pvc -n busybox-sample

    输出示例:

    No resources found in busybox-sample namespace.
重要

请注意发行说明的已知区域DR 问题,如已知问题部分所述。

如果您需要开发人员预览功能的帮助,请联络 ocs-devpreview@redhat.com 邮件列表和红帽开发团队成员将根据其可用性和工作计划尽快为您提供协助。