3.16. 发现应用程序的灾难恢复保护
Red Hat OpenShift Data Foundation 现在为在其中一个受管集群中部署的工作负载提供灾难恢复(DR)保护和支持,而无需使用 Red Hat Advanced Cluster Management (RHACM)。这些工作负载称为发现的应用程序。
使用 RHACM 部署的工作负载现在被称为受管应用程序。当工作负载直接部署到其中一个受管集群上时,不使用 RHACM,则这些工作负载称为发现的应用程序。虽然这些工作负载详情可在 RHACM 控制台中看到,但应用程序生命周期(创建、删除、编辑)不受 RHACM 管理。
3.16.1. 发现应用程序的灾难恢复保护的先决条件 复制链接链接已复制到粘贴板!
本节提供了指导您完成保护发现的应用程序的先决条件的说明。这包括分配数据策略和启动 DR 操作等任务,如故障转移和重新定位。
- 确保所有 DR 配置都已安装在主受管集群和次受管集群上。
安装 OADP 1.4 operator。
注意OADP 1.4 之前的任何版本都不适用于保护发现的应用程序。
-
在 Primary 和 Secondary 受管集群上,进入到 OperatorHub,并使用关键字过滤器搜索
OADP。 - 点 OADP 标题。
-
保留所有默认设置,然后单击 安装。确保 Operator 资源已安装在
openshift-adp项目中。
注意如果在 DR 配置完成后安装了 OADP 1.4,则 主受管集群上的
ramen-dr-cluster-operatorpod 必须重启命名空间openshift-dr-system中的二级受管集群 (删除并重新创建)。-
在 Primary 和 Secondary 受管集群上,进入到 OperatorHub,并使用关键字过滤器搜索
[可选] 将 CACertificates 添加到
ramen-hub-operator-configConfigMap 中。在主集群和次要集群间配置网络(SSL)访问,以便元数据可以使用安全传输协议和 Hub 集群中的安全传输协议存储在 Multicloud Gateway (MCG)对象存储桶中的备用集群中,以验证对对象存储桶的访问。
注意如果所有 OpenShift 集群都使用环境签名的有效证书集进行部署,则可以跳过本节。
如果您使用自签名证书,则您已在
openshift-config命名空间中创建一个名为user-ca-bundle的 ConfigMap,并将此 ConfigMap 添加到默认 Proxy 集群资源中。查找 CACertificates 的编码值。
$ oc get configmap user-ca-bundle -n openshift-config -o jsonpath="{['data']['ca-bundle\.crt']}" |base64 -w 0将此 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}
验证 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。验证 Data Protection Application (DPA)是否已安装到 OADP 命名空间
openshift-adp的每个受管集群中。如果尚未创建,则按照下一步创建此资源。通过将以下 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创建 DPA 资源。
$ oc create -f dpa.yaml -n openshift-adpdataprotectionapplication.oadp.openshift.io/velero created验证 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 创建应用程序功能的情况下安装示例应用程序。
流程
登录 Primary 受管集群,并克隆示例应用程序存储库。
$ git clone https://github.com/red-hat-storage/ocm-ramen-samples.git验证您是否位于
main分支中。$ cd ~/ocm-ramen-samples $ git branch * main根据您的场景、满足或地区创建示例应用程序时,应使用正确的目录。
注意发现的应用程序只支持使用 CephRBD 或块卷的应用程序。
$ ls workloads/deployment | egrep -v 'cephfs|k8s|base' odr-metro-rbd odr-regional-rbd在 Primary 和 Secondary 受管集群上,创建名为
busybox-discovered的项目。$ oc new-project busybox-discovered在主受管集群 上创建
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 灾难恢复解决方案现在扩展到跨多个命名空间的发现应用程序。
验证 busybox 是否在 Primary 受管集群 上的正确项目中运行。
$ oc get pods,pvc,deployment -n busybox-discoveredNAME 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
3.16.3. 为灾难恢复保护注册示例发现的应用程序 复制链接链接已复制到粘贴板!
本节介绍了如何从 Protected applications 选项卡中应用现有的 DR 策略到发现的应用程序。
先决条件
- 确保配置了灾难恢复功能,并且至少有一个 DR 策略。
流程
-
在 RHACM 控制台中,导航到 disaster recovery
Protected applications 选项卡。 - 点 Enroll application 以开始为 DR 保护配置现有应用程序。
- 选择 ACM 发现的应用程序。
-
在 Namespace 页面中,选择 DR 集群,这是安装
busybox的 Primary 受管集群 的名称。 选择安装应用程序 的命名空间。例如:
busybox-discovered。注意如果您的工作负载分布到多个命名空间中,您可以选择所有这些命名空间进行 DR 保护。
-
为发现的应用程序选择一个唯一的 Name,如
busybox-rbd,然后单击 Next。 - 在 Configuration 页面中,Resource 标签用于 保护资源,您可以在其中设置 kubernetes-object 备份中包含哪些资源,以及要复制哪些卷持久数据。默认选择 资源标签。
-
提供标签表达式和 PVC 标签选择器。为 kubernetes-objects 和 PVC 选择 标签
appname=busybox。 - 单击下一步。
在 Replication 页面中,选择一个现有的 DR Policy 和 kubernetes-objects 备份间隔。
注意建议您为 PVC 数据复制和 kubernetes-object 备份间隔(例如 5 分钟)选择相同的持续时间。
- 单击下一步。
检查配置并点 Save。
使用 Back 按钮返回到屏幕,以更正所有问题。
在继续 DR Failover 和 Relocate 测试前,请验证 应用程序卷(PVC) 和 Kubernetes 对象 备份是否具有 Healthy 状态。您可以在 Protected applications 选项卡中查看发现的应用程序的状态。
要查看 DRPC 的状态,请在 Hub 集群中运行以下命令:
$ oc get drpc {drpc_name} -o wide -n openshift-dr-ops发现的应用将 DRPlacementControl (DRPC)和放置等资源存储在名为
openshift-dr-ops的新命名空间中。DRPC 名称可以通过前面的步骤(如busybox-rbd)中配置的唯一名称来标识。要查看发现的应用程序的 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。
3.16.4.1. 故障转移灾难恢复受保护的发现的应用程序 复制链接链接已复制到粘贴板!
本节介绍了如何故障转移受灾难恢复保护的发现应用程序。
先决条件
-
确保在两个受管集群中创建了应用程序命名空间(如
busybox-discovered)。
流程
在 Hub 集群上启用 隔离。
打开 CLI 终端并编辑 DRCluster 资源,其中 < ;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为 主受管集群验证 Hub 集群上的隔离状态,替换 <drcluster_name> 是您的唯一标识符。
$ oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'输出示例:
Fenced登录您的 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
-
在 RHACM 控制台中,导航到 disaster Recovery
Protected applications 选项卡。 - 在应用程序行的末尾,单击 Actions 菜单并选择 启动 Failover。
- 在 Failover 应用程序 modal 窗口中,查看应用程序和目标集群的状态。
-
单击 Initiate。等待
故障切换过程完成。 验证 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检查 Failover 的进度状态,直到结果为
WaitOnUserToCleanup。DRPC 名称可以通过前面的步骤中配置的唯一名称(如busybox-rbd)来标识。$ oc get drpc {drpc_name} -n openshift-dr-ops -o jsonpath='{.status.progression}{"\n"}' WaitOnUserToCleanUp从 Primary 受管集群中删除 busybox 应用程序, 以完成
Failover进程。- 导航到 Protected applications 选项卡。您将看到删除应用的消息。
导航到
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
- 删除应用程序后,进入到 Protected applications 选项卡,并验证 busybox 资源是否处于 Healthy 状态。
3.16.4.2. 重新定位灾难恢复受保护的发现的应用程序 复制链接链接已复制到粘贴板!
本节介绍了如何重新定位发现的应用程序,这些应用程序受灾难恢复保护。
流程
在 Hub 集群上禁用隔离功能。
编辑此集群的 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正常重新引导
Fenced的 OpenShift Container Platform 节点。重启需要在取消隔离后恢复 I/O 操作,以避免进一步恢复编配失败。按照安全重启节点的步骤 ,重新引导集群中的所有节点。注意在重新引导前,请确保所有节点最初被封锁并排空,并在节点上执行 uncordon 操作。
在所有 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 找到。 验证
Unfenced集群是否处于健康状态。为 Primary-managed 集群验证 Hub 集群中的隔离状态,将 <drcluster_name> 替换为唯一名称。$ oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'输出示例:
Unfenced登录您的 Ceph 集群,并验证属于 OpenShift Container Platform 集群节点的 IP 不在 blocklist 中。
$ ceph osd blocklist ls确定您没有看到隔离过程中添加的 IP。
-
在 RHACM 控制台中,导航到 disaster Recovery
Protected applications 选项卡。 - 在应用程序行的末尾,单击 Actions 菜单,然后选择 启动 Relocate。
- 在 Relocate application modal 窗口中,查看应用程序和目标集群的状态。
- 单击 Initiate。
检查 Relocate 的进度状态,直到结果为
WaitOnUserToCleanup。DRPC 名称可以通过前面的步骤中配置的唯一名称(如busybox-rbd)来标识。$ oc get drpc {drpc_name} -n openshift-dr-ops -o jsonpath='{.status.progression}{"\n"}' WaitOnUserToCleanUp在 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- 删除应用程序后,进入到 Protected applications 选项卡,并验证 busybox 资源是否处于 Healthy 状态。
验证
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. 为受保护的应用程序禁用灾难恢复 复制链接链接已复制到粘贴板!
本节指导您在删除受保护的应用程序或应用程序不再需要保护时禁用灾难恢复资源。
流程
- 登录到 Hub 集群。
列出
DRPlacementControl(DRPC)资源。每个 DRPC 资源都是在应用程序分配 DR 策略时创建的。$ oc get drpc -n openshift-dr-ops找到包含您在分配 DR 策略(如
busybox-rbd)时选择的唯一标识符的 DRPC,并删除 DRPC。$ oc delete {drpc_name} -n openshift-dr-ops列出 放置资源。每个放置资源都是在应用程序分配 DR 策略时创建的。
$ oc get placements -n openshift-dr-ops找到名称 放置,其中包含您在分配 DR 策略时选择的唯一标识符(如
busybox-rbd-placement-1)并删除 放置。$ oc delete placements {placement_name} -n openshift-dr-ops