3.16. 发现应用程序的灾难恢复保护


Red Hat OpenShift Data Foundation 现在为在其中一个受管集群中部署的工作负载提供灾难恢复(DR)保护和支持,而无需使用 Red Hat Advanced Cluster Management (RHACM)。这些工作负载称为发现的应用程序。

使用 RHACM 部署的工作负载现在被称为受管应用程序。当工作负载直接部署到其中一个受管集群上时,不使用 RHACM,则这些工作负载称为发现的应用程序。虽然这些工作负载详情可在 RHACM 控制台中看到,但应用程序生命周期(创建、删除、编辑)不受 RHACM 管理。

本节提供了指导您完成保护发现的应用程序的先决条件的说明。这包括分配数据策略和启动 DR 操作等任务,如故障转移和重新定位。

  1. 确保所有 DR 配置都已安装在主受管集群和次受管集群上。
  2. 安装 OADP 1.4 operator。

    注意

    OADP 1.4 之前的任何版本都不适用于保护发现的应用程序。

    1. PrimarySecondary 受管集群上,进入到 OperatorHub,并使用关键字过滤器搜索 OADP
    2. OADP 标题。
    3. 保留所有默认设置,然后单击 安装。确保 Operator 资源已安装在 openshift-adp 项目中。
    注意

    如果在 DR 配置完成后安装了 OADP 1.4,则 主受管集群上的 ramen-dr-cluster-operator pod 必须重启命名空间 openshift-dr-system 中的二级受管集群 (删除并重新创建)。

  3. [可选] 将 CACertificates 添加到 ramen-hub-operator-config ConfigMap 中。

    在主集群和次要集群间配置网络(SSL)访问,以便元数据可以使用安全传输协议和 Hub 集群中的安全传输协议存储在 Multicloud Gateway (MCG)对象存储桶中的备用集群中,以验证对对象存储桶的访问。

    注意

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

    如果您使用自签名证书,则您已在 openshift-config 命名空间中创建一个名为 user-ca-bundleConfigMap,并将此 ConfigMap 添加到默认 Proxy 集群资源中。

    1. 查找 CACertificates 的编码值。

      $ oc get configmap user-ca-bundle -n openshift-config -o jsonpath="{['data']['ca-bundle\.crt']}" |base64 -w 0
    2. 将此 base64 编码值添加到 Hub 集群上的 configmap ramen-hub-operator-config 中。下面的示例显示了添加 CACertificates 的位置。

      $ oc edit configmap ramen-hub-operator-config -n openshift-operators
      [...]
          ramenOpsNamespace: openshift-dr-ops
          s3StoreProfiles:
          - s3Bucket: odrbucket-36bceb61c09c
            s3CompatibleEndpoint: https://s3-openshift-storage.apps.hyper3.vmw.ibmfusion.eu
            s3ProfileName: s3profile-hyper3-ocs-storagecluster
            s3Region: noobaa
            s3SecretRef:
              name: 60f2ea6069e168346d5ad0e0b5faa59bb74946f
            caCertificates: {input base64 encoded value here}
          - s3Bucket: odrbucket-36bceb61c09c
            s3CompatibleEndpoint: https://s3-openshift-storage.apps.hyper4.vmw.ibmfusion.eu
            s3ProfileName: s3profile-hyper4-ocs-storagecluster
            s3Region: noobaa
            s3SecretRef:
              name: cc237eba032ad5c422fb939684eb633822d7900
            caCertificates: {input base64 encoded value here}
  4. 验证 OADP operator 默认命名空间 openshift-adp 是否在 主受管集群和次受管集群 中创建的 DR secret。创建第一个 DRPolicy 时创建的 DR secret 类似于以下的 secret。DR secret 名称前面带有字母 v

    $ oc get secrets -n openshift-adp
    NAME                                       TYPE     DATA   AGE
    v60f2ea6069e168346d5ad0e0b5faa59bb74946f   Opaque   1      3d20h
    vcc237eba032ad5c422fb939684eb633822d7900   Opaque   1      3d20h
    [...]
    注意

    openshift-adp 命名空间中为每个受管集群创建一个 DR 创建 secret。

  5. 验证 Data Protection Application (DPA)是否已安装到 OADP 命名空间 openshift-adp 的每个受管集群中。如果尚未创建,则按照下一步创建此资源。

    1. 通过将以下 YAML 定义内容复制到 dpa.yaml 来创建 DPA。

      apiVersion: oadp.openshift.io/v1alpha1
      kind: DataProtectionApplication
      metadata:
        labels:
          app.kubernetes.io/component: velero
        name: velero
        namespace: openshift-adp
      spec:
        backupImages: false
        configuration:
          nodeAgent:
            enable: false
            uploaderType: restic
          velero:
            defaultPlugins:
              - openshift
              - aws
            noDefaultBackupLocation: true
    2. 创建 DPA 资源。

      $ oc create -f dpa.yaml -n openshift-adp
      dataprotectionapplication.oadp.openshift.io/velero created
    3. 验证 OADP 资源是否已创建并处于 Running 状态。

      $ oc get pods,dpa -n openshift-adp
      NAME                                                    READY   STATUS    RESTARTS   AGE
      pod/openshift-adp-controller-manager-7b64b74fcd-msjbs   1/1     Running   0          5m30s
      pod/velero-694b5b8f5c-b4kwg                             1/1     Running   0          3m31s
      
      
      NAME                                                 AGE
      dataprotectionapplication.oadp.openshift.io/velero   3m31s

3.16.2. 创建示例发现的应用程序

为了测试从主 受管集群到二级受管集群的 故障切换,并为发现的应用程序 重新定位,您需要在不使用 RHACM 创建应用程序功能的情况下安装示例应用程序。

流程

  1. 登录 Primary 受管集群,并克隆示例应用程序存储库。

    $ git clone https://github.com/red-hat-storage/ocm-ramen-samples.git
  2. 验证您是否位于 main 分支中。

    $ cd ~/ocm-ramen-samples
    $ git branch
    * main

    根据您的场景、满足或地区创建示例应用程序时,应使用正确的目录。

    注意

    发现的应用程序只支持使用 CephRBD 或块卷的应用程序。

    $ ls workloads/deployment | egrep -v 'cephfs|k8s|base'
    odr-metro-rbd
    odr-regional-rbd
  3. Primary 和 Secondary 受管集群上,创建名为 busybox-discovered 的项目。

    $ oc new-project busybox-discovered
  4. 在主受管集群 上创建 busybox 应用程序。此示例应用示例是使用块(Ceph RBD)卷的 Metro-DR。

    $ oc apply -k workloads/deployment/odr-metro-rbd -n busybox-discovered
    persistentvolumeclaim/busybox-pvc created
    deployment.apps/busybox created
    注意

    OpenShift Data Foundation 灾难恢复解决方案现在扩展到跨多个命名空间的发现应用程序。

  5. 验证 busybox 是否在 Primary 受管集群 上的正确项目中运行。

    $ oc get pods,pvc,deployment -n busybox-discovered
    NAME                           READY   STATUS    RESTARTS   AGE
    pod/busybox-796fccbb95-qmxjf   1/1     Running   0          18s
    
    
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  VOLUMEATTRIBUTESCLASS   AGE
    persistentvolumeclaim/busybox-pvc   Bound    pvc-b20e4129-902d-47c7-b962-040ad64130c4   1Gi        RWO            ocs-storagecluster-ceph-rbd   <unset>                 18s
    
    
    NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/busybox   1/1     1            1           18

本节介绍了如何从 Protected applications 选项卡中应用现有的 DR 策略到发现的应用程序。

先决条件

  • 确保配置了灾难恢复功能,并且至少有一个 DR 策略。

流程

  1. 在 RHACM 控制台中,导航到 disaster recovery Protected applications 选项卡。
  2. Enroll application 以开始为 DR 保护配置现有应用程序。
  3. 选择 ACM 发现的应用程序
  4. 在 Namespace 页面中,选择 DR 集群,这是安装 busyboxPrimary 受管集群 的名称。
  5. 选择安装应用程序 的命名空间。例如: busybox-discovered

    注意

    如果您的工作负载分布到多个命名空间中,您可以选择所有这些命名空间进行 DR 保护。

  6. 为发现的应用程序选择一个唯一的 Name,如 busybox-rbd,然后单击 Next
  7. 在 Configuration 页面中,Resource 标签用于 保护资源,您可以在其中设置 kubernetes-object 备份中包含哪些资源,以及要复制哪些卷持久数据。默认选择 资源标签。
  8. 提供标签表达式和 PVC 标签选择器。为 kubernetes-objectsPVC 选择 标签 appname=busybox
  9. 单击下一步
  10. 在 Replication 页面中,选择一个现有的 DR Policykubernetes-objects 备份间隔

    注意

    建议您为 PVC 数据复制和 kubernetes-object 备份间隔(例如 5 分钟)选择相同的持续时间。

  11. 单击下一步
  12. 检查配置并点 Save

    使用 Back 按钮返回到屏幕,以更正所有问题。

  13. 在继续 DR Failover 和 Relocate 测试前,请验证 应用程序卷(PVC)Kubernetes 对象 备份是否具有 Healthy 状态。您可以在 Protected applications 选项卡中查看发现的应用程序的状态。

    1. 要查看 DRPC 的状态,请在 Hub 集群中运行以下命令:

      $ oc get drpc {drpc_name} -o wide -n openshift-dr-ops

      发现的应用将 DRPlacementControl (DRPC)和放置等资源存储在名为 openshift-dr-ops 的新命名空间中。DRPC 名称可以通过前面的步骤(如 busybox-rbd)中配置的唯一名称来标识。

    2. 要查看发现的应用程序的 VolumeReplicationGroup (VRG)的状态,请在手动安装 busybox 应用程序的受管集群中运行以下命令。

      $ oc get vrg {vrg_name} -n openshift-dr-ops

      在为发现的应用程序分配 DR Policy 后,VRG 资源存储在命名空间 openshift-dr-ops 中。VRG 名称可以通过前面的步骤(如 busybox-rbd)中配置的唯一名称来标识。

3.16.4. 发现的应用程序故障切换和重新定位

受保护的发现 应用程序可以 故障切换或重新定位 到与 受管应用程序 类似的对等集群。但是,发现的应用程序还有一些额外的步骤,因为 RHACM 不会管理应用程序的生命周期,因为它适用于 Managed 应用程序。

本节指导您为受保护的发现的应用程序完成 Failover 和 Relocate 进程。

重要

当一个或多个资源类型处于 Warning 或 Critical 状态时,永远不会启动 Failover 或 Relocate of an application。

本节介绍了如何故障转移受灾难恢复保护的发现应用程序。

先决条件

  • 确保在两个受管集群中创建了应用程序命名空间(如 busybox-discovered)。

流程

  1. Hub 集群上启用 隔离。

    1. 打开 CLI 终端并编辑 DRCluster 资源,其中 &lt ;drcluster_name& gt; 是您的唯一名称。

      Important

      隔离受管集群后,所有应用程序 与 OpenShift Data Foundation 外部存储集群的通信都将失败,一些 Pod 将处于不健康状态(例如: CreateContainerError,CrashLoopBackOff)。

      $ oc edit drcluster <drcluster_name>
      apiVersion: ramendr.openshift.io/v1alpha1
      kind: DRCluster
      metadata:
      [...]
      spec:
        ## Add this line
        clusterFence: Fenced
        cidrs:
        [...]
      [...]

      输出示例:

      drcluster.ramendr.openshift.io/ocp4perf1 edited
    2. 主受管集群验证 Hub 集群上的隔离状态,替换 &lt;drcluster_name> 是您的唯一标识符。

      $ oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'

      输出示例:

      Fenced
    3. 登录您的 Ceph 集群,并验证属于 OpenShift Container Platform 集群节点的 IP 现在位于 blocklist 中。

      $ ceph osd blocklist ls

      输出示例

      cidr:10.1.161.1:0/32 2028-10-30T22:30:03.585634+0000
      cidr:10.1.161.14:0/32 2028-10-30T22:30:02.483561+0000
      cidr:10.1.161.51:0/32 2028-10-30T22:30:01.272267+0000
      cidr:10.1.161.63:0/32 2028-10-30T22:30:05.099655+0000
      cidr:10.1.161.129:0/32 2028-10-30T22:29:58.335390+0000
      cidr:10.1.161.130:0/32 2028-10-30T22:29:59.861518+0000
  2. 在 RHACM 控制台中,导航到 disaster Recovery Protected applications 选项卡。
  3. 在应用程序行的末尾,单击 Actions 菜单并选择 启动 Failover
  4. 在 Failover 应用程序 modal 窗口中,查看应用程序和目标集群的状态。
  5. 单击 Initiate。等待 故障切换 过程完成。
  6. 验证 busybox 应用程序是否在 次受管集群 上运行。

    $ oc get pods,pvc -n busybox-discovered
    NAME                           READY   STATUS    RESTARTS   AGE
    pod/busybox-796fccbb95-qmxjf   1/1     Running   0          2m46s
    
    
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  VOLUMEATTRIBUTESCLASS   AGE
    persistentvolumeclaim/busybox-pvc   Bound    pvc-b20e4129-902d-47c7-b962-040ad64130c4   1Gi        RWO            ocs-storagecluster-ceph-rbd   <unset>                 2m57s
  7. 检查 Failover 的进度状态,直到结果为 WaitOnUserToCleanup。DRPC 名称可以通过前面的步骤中配置的唯一名称(如 busybox-rbd)来标识。

    $ oc get drpc {drpc_name} -n openshift-dr-ops -o jsonpath='{.status.progression}{"\n"}'
    WaitOnUserToCleanUp
  8. Primary 受管集群中删除 busybox 应用程序, 以完成 Failover 进程。

    1. 导航到 Protected applications 选项卡。您将看到删除应用的消息。
    2. 导航到 busybox 的克隆存储库,并在从中 失败的 Primary 受管集群上 运行以下命令。使用用于创建应用程序的同一目录(如 odr-metro-rbd)。

      $ cd ~/ocm-ramen-samples/
      $ git branch
      * main
      $ oc delete -k workloads/deployment/odr-metro-rbd -n busybox-discovered
      persistentvolumeclaim "busybox-pvc" deleted
      deployment.apps "busybox" deleted
  9. 删除应用程序后,进入到 Protected applications 选项卡,并验证 busybox 资源是否处于 Healthy 状态。

本节介绍了如何重新定位发现的应用程序,这些应用程序受灾难恢复保护。

流程

  1. 在 Hub 集群上禁用隔离功能。

    1. 编辑此集群的 DRCluster 资源,将 <drcluster_name> 替换为唯一名称。

      $ oc edit drcluster <drcluster_name>
      apiVersion: ramendr.openshift.io/v1alpha1
      kind: DRCluster
      metadata:
      [...]
      spec:
        cidrs:
        [...]
        ## Modify this line
        clusterFence: Unfenced
        [...]
      [...]

      输出示例:

      drcluster.ramendr.openshift.io/ocp4perf1 edited
    2. 正常重新引导 Fenced 的 OpenShift Container Platform 节点。重启需要在取消隔离后恢复 I/O 操作,以避免进一步恢复编配失败。按照安全重启节点的步骤 ,重新引导集群中的所有节点。

      注意

      在重新引导前,请确保所有节点最初被封锁并排空,并在节点上执行 uncordon 操作。

    3. 在所有 OpenShift 节点重新引导并处于 Ready 状态后,通过在主受管集群(或任何集群为 Unfenced)上运行此命令,验证所有 Pod 都处于健康状态。

      oc get pods -A | egrep -v 'Running|Completed'

      输出示例:

      NAMESPACE                                          NAME                                                              READY   STATUS      RESTARTS       AGE

      此查询的输出应该为零个 Pod,然后继续下一步。

      重要

      如果因为严重的存储通信导致 Pod 仍然处于不健康状态,请在继续操作前进行故障排除并解决。由于存储集群是 OpenShift 外部的,因此在 OpenShift 应用正常运行的站点中断后,还必须正确恢复它。

      另外,您可以使用 OpenShift Web 控制台仪表板和 Overview 选项卡来评估应用程序和外部 ODF 存储集群的健康状态。详细的 OpenShift Data Foundation 仪表板可以通过 Storage Data Foundation 找到。

    4. 验证 Unfenced 集群是否处于健康状态。为 Primary-managed 集群验证 Hub 集群中的隔离状态,将 <drcluster_name> 替换为唯一名称。

      $ oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'

      输出示例:

      Unfenced
    5. 登录您的 Ceph 集群,并验证属于 OpenShift Container Platform 集群节点的 IP 不在 blocklist 中。

      $ ceph osd blocklist ls

      确定您没有看到隔离过程中添加的 IP。

  2. 在 RHACM 控制台中,导航到 disaster Recovery Protected applications 选项卡。
  3. 在应用程序行的末尾,单击 Actions 菜单,然后选择 启动 Relocate
  4. 在 Relocate application modal 窗口中,查看应用程序和目标集群的状态。
  5. 单击 Initiate
  6. 检查 Relocate 的进度状态,直到结果为 WaitOnUserToCleanup。DRPC 名称可以通过前面的步骤中配置的唯一名称(如 busybox-rbd)来标识。

    $ oc get drpc {drpc_name} -n openshift-dr-ops -o jsonpath='{.status.progression}{"\n"}'
    WaitOnUserToCleanUp
  7. Relocate to the Primary managed cluster 之前,从 Secondary 受管集群中删除 busybox 应用程序。

    导航到 busybox 的克隆存储库,并在从其 重新定位Secondary 受管集群上 运行以下命令。使用用于创建应用程序的同一目录(如 odr-metro-rbd)。

    $ cd ~/ocm-ramen-samples/
    $ git branch
    * main
    $ oc delete -k workloads/deployment/odr-metro-rbd -n busybox-discovered
    persistentvolumeclaim "busybox-pvc" deleted
    deployment.apps "busybox" deleted
  8. 删除应用程序后,进入到 Protected applications 选项卡,并验证 busybox 资源是否处于 Healthy 状态。
  9. 验证 busybox 应用程序是否 在主受管集群 上运行。

    $ oc get pods,pvc -n busybox-discovered
    NAME                           READY   STATUS    RESTARTS   AGE
    pod/busybox-796fccbb95-qmxjf   1/1     Running   0          2m46s
    
    
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  VOLUMEATTRIBUTESCLASS   AGE
    persistentvolumeclaim/busybox-pvc   Bound    pvc-b20e4129-902d-47c7-b962-040ad64130c4   1Gi        RWO            ocs-storagecluster-ceph-rbd   <unset>                 2m57s

3.16.5. 为受保护的应用程序禁用灾难恢复

本节指导您在删除受保护的应用程序或应用程序不再需要保护时禁用灾难恢复资源。

流程

  1. 登录到 Hub 集群。
  2. 列出 DRPlacementControl (DRPC)资源。每个 DRPC 资源都是在应用程序分配 DR 策略时创建的。

    $ oc get drpc -n openshift-dr-ops
  3. 找到包含您在分配 DR 策略(如 busybox-rbd)时选择的唯一标识符的 DRPC,并删除 DRPC。

    $ oc delete {drpc_name} -n openshift-dr-ops
  4. 列出 放置资源。每个放置资源都是在应用程序分配 DR 策略时创建的。

    $ oc get placements -n openshift-dr-ops
  5. 找到名称 放置,其中包含您在分配 DR 策略时选择的唯一标识符(如 busybox-rbd-placement-1)并删除 放置

    $ oc delete placements {placement_name} -n openshift-dr-ops
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部