第 13 章 在受管集群间重新定位应用程序
重定位操作与故障转移非常相似。重新定位基于应用程序,并使用 DRPlacementControl
触发重新定位。failback 的主要区别在于,应用程序在 failoverCluster 上缩减,因此不需要创建 NetworkFence。
流程
删除 NetworkFence 资源并禁用
隔离
。在故障恢复或重定位操作之前,必须成功删除主受管集群的 NetworkFence。
在 二级受管集群中执行此命令,并修改 <cluster1> 来使用上一节中创建的 NetworkFence YAML 的正确文件名。
$ oc delete -f network-fence-<cluster1>.yaml
输出示例:
networkfence.csiaddons.openshift.io "network-fence-ocp4perf1" deleted
重新引导被
隔离
的 OpenShift Container Platform 节点。此步骤是必需的,因为以前的隔离集群上的一些应用程序 Pod(本例中为 Primary managed cluster)处于不健康状态(如 CreateContainerError, CrashLoopBackOff)。这可以通过一次重启所有 worker OpenShift 节点来轻松地修复。
注意OpenShift Web 控制台仪表板和 Overview 页面也可用于评估应用程序和外部存储的健康状况。详细的 OpenShift Data Foundation 仪表板可通过 Storage
Data Foundation 找到。 在所有 OpenShift 节点重新引导并且处于
Ready
状态后,在主受管集群上运行此命令,以验证所有 Pod 都处于健康状态。此查询的输出应该为零个 Pod。$ oc get pods -A | egrep -v 'Running|Completed'
输出示例:
NAMESPACE NAME READY STATUS RESTARTS AGE
重要如果因为严重的存储通信导致 pod 仍然处于不健康状态,请在继续操作前进行故障排除并解决。由于存储集群位于 OpenShift 的外部,因此在 OpenShift 应用正常运行的站点中断后,还必须正确恢复它。
将 DRPolicy 修改为
Unfenced
状态。要让 ODR HUB operator 知道 NetworkFence 已为主受管集群删除,需要为新创建的
Unfenced
集群修改 DRPolicy。编辑 Hub 集群上的 DRPolicy,并将 <cluster1>(例如
ocp4perf1
)从manuallyFenced
改为Unfenced
。$ oc edit drpolicy odr-policy
输出示例:
[...] spec: drClusterSet: - clusterFence: Unfenced ## <-- Modify from ManuallyFenced to Unfenced name: ocp4perf1 region: metro s3ProfileName: s3-primary - clusterFence: Unfenced name: ocp4perf2 region: metro s3ProfileName: s3-secondary [...]
输出示例:
drpolicy.ramendr.openshift.io/odr-policy edited
验证 Hub 集群中的 DRPolicy 的状态是否已为主受管集群更改为
Unfenced
。$ oc get drpolicies.ramendr.openshift.io odr-policy -o yaml | grep -A 6 drClusters
输出示例:
drClusters: ocp4perf1: status: Unfenced string: ocp4perf1 ocp4perf2: status: Unfenced string: ocp4perf2
将 DRPlacementControl 修改为 failback
- 在 Hub 集群中,导航到 Installed Operators,然后点 Openshift DR Hub Operator。
- 单击 DRPlacementControl 选项卡。
-
单击 DRPC
busybox-drpc
,然后单击 YAML 视图。 将 action 改为
Relocate
。DRPlacementControl 修改重新分配的操作
- 点击 Save。
验证
busybox
应用程序已在主受管集群中运行。故障转移是在 YAML 文件中指定的 preferredClusterocp4perf1
,它是故障转移操作前应用程序运行的位置。$ 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
验证
busybox
是否在第二个受管集群中运行。busybox 应用程序不应在此受管集群上运行。$ oc get pods,pvc -n busybox-sample
输出示例:
No resources found in busybox-sample namespace.
请注意,在发行注记的已知问题一节中记录的 Metro-DR 问题。