OpenShift Red Hat OpenShift on IBM Cloud 集群上的区域灾难恢复数据基础
虚拟私有云 4.17 及更高版本
区域灾难恢复功能可在某个地区无法使用时确保业务连续性。 您可以使用 Red Hat 高级集群管理(ACM)为 OpenShift 数据基础(ODF)集群配置区域灾难恢复解决方案。
每个步骤都标有标签,以指示应在哪个集群上运行该步骤。 请参考以下图例。
| 标记 | 集群 |
|---|---|
| 集线器集群 | 在中心集群 (即安装了 ACM 的集群)上需要完成的步骤。 |
| 托管集群 | 在每个受管集群 (主 ODF 集群和备用 ODF 集群)上需要完成的步骤。 |
以下是该解决方案的详细步骤:
- 创建中心集群。
- 为集线器集群创建一个受信任的配置文件。
- 创建托管集群。
- 在 Hub 集群上为 ACM 准备密钥。
- 在集线器集群上安装 ACM 附加组件。
- 在受管集群上安装 Submariner,以建立集群之间的连接。
- 在受管集群上安装 ODF。
- 配置区域灾难恢复策略。
通过这种设置,您安装 ACM 的集线器群集将管理 ODF 群集。 如果主 ODF 集群无法使用,中心集群会将主 ODF 集群中的应用程序和数据迁移到备用 ODF 集群。
ODF 区域灾难恢复支持基于订阅的、由 ApplicationSet-based, 发现的以及基于 VM 的应用程序。 有关详细信息,请参阅本页底部的“支持的应用程序和工作负载”。
准备工作
在创建集群之前,请收集需要填入集群创建命令中的VPC和 Cloud Object Storage 详细信息。
-
获取您的 VPC ID。 请记下每个集群要使用的 VPC 的 ID。
ibmcloud is vpcs -
检索特定 VPC 的子网详细信息。 请记下您希望为每个集群使用的子网 ID。
ibmcloud is subnets --vpc VPC_ID -
列出您的 Cloud Object Storage 实例。
ibmcloud resource service-instances --service-name cloud-object-storage -
获取您要使用的实例的 CRN。 请记下“
ID”字段中的数值。ibmcloud resource service-instance SERVICE_INSTANCE
步骤 1. 创建中心集群
集线器集群
这是您用于安装 ACM 以管理主 ODF 集群和辅助 ODF 集群的集群。 请确保您的集线器集群至少拥有 16 vCPU x 64 GB 的可用计算能力。
对于每个群集,确保通过在 CLI 中加入 --disable-outbound-traffic-protection 参数或在用户界面中选择禁用出站流量保护选项来允许出站流量。
-
在
us-east中 创建一个 VPC 集群 来安装 ACM。 这是中心集群,您可以用它来管理 ODF 集群。 请确保您的集线器集群至少包含 3 个运行 RHCOS 的工作节点,可用计算容量至少为 16 个 vCPU 和 64 GB,出站流量已禁用,并且满足所有 ACM的先决条件 中的要求。 以下示例命令在us-east中为 ACM 创建一个群集。ibmcloud ks cluster create vpc-gen2 --flavor bx2.16x64 --name acm-hub-cluster-dr-odf --subnet-id SUBNET_ID --vpc-id VPC_ID --zone us-east-2 --version 4.21.27_openshift --workers 3 --cos-instance COS_CRN --disable-outbound-traffic-protection --cni OVNKubernetes -
请从输出中记下集群 ID。 在后续步骤中你会用到它。
步骤 2. 为集线器集群创建受信任的配置文件
集线器集群
- 创建受信任的配置文件。
ibmcloud iam trusted-profile-create acm-operator-profile - 创建计算资源信任规则,其作用域限定在 Red Hat OpenShift 计算资源上的
kube-system命名空间内。ibmcloud iam trusted-profile-rule-create acm-operator-profile \ --name kube-system-rule \ --type Profile-CR \ --conditions claim:namespace,operator:EQUALS,value:kube-system \ --cr-type ROKS_SA - 将 IAM 访问策略分配给该配置文件。 请将
CLUSTER_ID替换为您的 Hub 集群 ID。ibmcloud iam trusted-profile-policy-create acm-operator-profile \ --roles Reader,Viewer,Operator,Editor \ --service-name containers-kubernetes \ --service-instance CLUSTER_ID - 将受信任的配置文件分配给集线器集群。 将受信任的配置文件分配给集群后,便无法将其移除。
ibmcloud oc experimental trusted-profile set --cluster CLUSTER_NAME_OR_ID --trusted-profile TRUSTED_PROFILE_ID - 如果您使用的是 ODF 4.21 或更高版本,请在集线器集群上安装 OpenShift GitOps 操作员。 有关安装步骤,请参阅《 在 Web 控制台中安装 Red Hat OpenShift GitOps 操作员》。
步骤 3. 创建托管集群
托管集群
-
在
us-east中 创建一个VPC集群,该集群应包含至少3个运行RHCOS的工作节点,可用计算容量至少为16个 vCPU 和64 GB,且出站流量保护功能已禁用。 这将是主要受管 ODF 群集。 以下示例命令用于在us-east中创建一个集群。ibmcloud ks cluster create vpc-gen2 --flavor bx2.16x64 --name managed-cluster-1-dr-odf --subnet-id SUBNET_ID --vpc-id VPC_ID --zone us-east-2 --version 4.21.27_openshift --workers 3 --cos-instance COS_CRN --disable-outbound-traffic-protection --cni OVNKubernetes -
在
jp-tok中 创建一个VPC集群,该集群应包含至少3个运行RHCOS的工作节点,可用计算容量至少为16个 vCPU 和64 GB,且出站流量保护功能已禁用。 这将是二级受管 ODF 群集。 为实现高可用性,请确保辅助群集的网络不与主群集的网络重叠。 以下示例命令用于在jp-tok中创建一个集群。ibmcloud ks cluster create vpc-gen2 --flavor bx2.16x64 --name managed-cluster-2-dr-odf --subnet-id SUBNET_ID --vpc-id VPC_ID --zone jp-tok --version 4.21.27_openshift --workers 3 --cos-instance COS_CRN --disable-outbound-traffic-protection --cni OVNKubernetes
步骤 4. 为ACM准备备考资料
集线器集群
对于每个您希望通过 ACM 管理的集群,您必须在中心集群上创建一个密钥,其中包含该受管集群的访问令牌和服务器 URL。
如果您希望在安装 ACM 附加组件的过程中导入托管集群,请在开始安装前完成以下步骤。 如果您选择在将附加组件安装到中心集群后创建密钥并导入托管集群,则可以通过在 CLI 中执行 额外步骤 来完成此操作。
对于每个需要管理的集群,请执行以下步骤。
-
在您希望通过 ACM 管理的集群上,运行以下命令以查找服务器:URL。 在输出结果中,找到并记录主 URL 的值。 这是在密钥中需要引用的服务器 URL。 在接下来的步骤中,您还将使用此链接:URL。
ibmcloud oc cluster get -c CLUSTER_NAME_OR_ID示例输出。
NAME: mycluster ID: 1234567 State: normal Created: 2025-01-22T19:22:16+0000 Location: dal10 Master URL: https://c100-e.<region>.containers.cloud.ibm.com:<port> ... -
获取 Red Hat OpenShift OAuth 服务器的基 URL。 将
MASTER_URL替换为上一步中找到的 URL。 该命令会提取 URL 的基数部分,并去除/oauth/token后缀。curl -sS MASTER_URL/.well-known/oauth-authorization-server | jq -r .token_endpoint | sed 's#/oauth/token##'示例输出。
https://c111-e.us-east.containers.cloud.ibm.com:31282 -
使用上一步中获取的端点来获取访问令牌。 执行以下 cURL 命令,将
URL替换为上一步的输出结果,将API_KEY替换为您的 IBM Cloud API密钥。 在输出结果中,找到 Location 响应中包含的ACCESS_TOKEN。 这是需要包含在密钥中的访问令牌。示例 curl 请求:
curl -u 'apikey:API_KEY' -H "X-CSRF-Token: a" 'URL/oauth/authorize?client_id=openshift-challenging-client&response_type=token' -vvv示例输出。 ACCESS_TOKEN 包含在 Location 响应字符串中。
< HTTP/1.1 302 Found < Cache-Control: no-cache, no-store, max-age=0, must-revalidate < Cache-Control: no-cache, no-store, max-age=0, must-revalidate < Expires: 0 < Expires: Fri, 01 Jan 2030 00:00:00 GMT < Location: TOKEN_ENDPOINT/oauth/token/implicit#access_token=ACCESS_TOKEN&expires_in=86400&scope=user%3Afull&token_type=Bearer ... -
在 Hub 集群上,创建一个包含集群访问令牌和服务器 URL 的密钥。 有关创建密钥的信息,请参阅《 Kubernetes 》文档中的 “使用密钥”部分。
示例密钥。
apiVersion: v1 kind: Secret metadata: name: SECRET_NAME namespace: SECRET_NAMESPACE # The namespace that the secret is to be created in type: Opaque stringData: token: ACCESS_TOKEN server: SERVER_URL
步骤 5. 在集线器集群上安装 ACM 附加组件
集线器集群
使用 CLI 在集线器集群上安装 ACM 附加组件。
-
查找 ACM 插件的默认版本。
ibmcloud oc cluster addon versions -
查看 ACM 的附加选项。 在该命令中,请指定上一步中找到的默认版本。 请记录下安装该插件时希望包含的任何选项。
ibmcloud oc cluster addon options --addon acm --version DEFAULT_VERSION -
如果您想导入由该插件管理的集群,且尚未完成 “为 ACM 准备密钥”中的步骤,请按照该部分的说明进行操作。 请务必保存集群 ID 以及在 Hub 集群上创建的密钥的名称和命名空间。 您也可以在将该附加组件安装到集线器集群后完成此过程,但需要执行额外步骤,具体请参阅 安装后导入托管集群。
-
运行该命令以启用该插件。 请务必指定
billingPlan和isLicenseAccepted参数,如果要在安装过程中导入集群,还需指定可选参数--managedClusters。ibmcloud oc cluster addon enable acm --cluster HUB_CLUSTER_ID --param 'managedClusters=["clusterid:CLUSTER_ID;secretname:SECRET_NAME;secretnamespace:SECRET_NAMESPACE;action:IMPORT"]' --param 'billingPlan=PLAN' --param 'isLicenseAccepted=BOOLEAN'命令参数。 请参阅下面的示例命令,了解每种参数类型的示例。
--cluster- 必需。 要安装 ACM 附加组件的集线器集群的 ID。
--param 'managedClusters=["]-
- 可选。 在安装附加组件的过程中,请包含此参数一次或多次,以导入受管集群。 您也可以稍后完成这一步。 如需了解更多信息,请参阅 《为 ACM 准备密钥》。
- 指定以下值:
-
- clusterid :要导入的托管集群的 ID。
-
- secretname :您在 hub 集群上创建的密钥的名称。 该密钥包含托管集群的凭据。
-
- secretnamespace :您在 hub 集群上创建的密钥所属的命名空间。 该密钥包含托管集群的凭据。
-
- action:IMPORT :指定受管集群的 IMPORT 操作的参数。
--param 'billingPlan='- 必需。 您要为 ACM 选择的计费方案。 请为“ACM 用于 Kubernetes”套餐指定
KUBERNETES。 --param 'isLicenseAccepted='- 必需。 请输入
TRUE,以接受所选计费方案的许可协议。 接受本许可即表示您同意相关条款和条件,并确认您已了解所选套餐中包含的服务内容。
以下示例命令用于安装 ACM 附加组件( 采用“Kubernetes”计费方案),并导入一个托管集群。
ibmcloud ks cluster addon enable acm --cluster a5bcde982dfer2nwxq73 --param 'managedClusters=["clusterid:w7rthce34gfbq7ww12d3;secretname:managed-secret-1;secretnamespace:managed-ns1;action:Import"]' --param 'billingPlan=KUBERNETES' --param 'isLicenseAccepted=true' -
请确认该附加组件已安装。 该附加组件可能需要几分钟时间才会出现在以下输出中。
- 在集线器集群上,请检查
acmhub资源是否已创建。
oc get acmhub ``` 示例输出。 ```sh {: screen} NAME AGE acm-auto 1h ``` 1. 在集线器集群上,检查 `acmhub` 的状态。 ```sh {: pre} oc describe acmhubstatus ``` 示例输出。 ```sh {: screen} status phase: Ready ``` - 在集线器集群上,请检查
步骤 6. 配置潜航者插件
托管集群
按照步骤安装和配置 Submariner 附加组件,它可以在两个受管群集之间建立连接。 这些步骤使用 ACM 控制台。 如需了解更多详细信息,请参阅《 Red Hat 》文档中的 “使用控制台部署 Submariner”一节。
- 导航至 ACM 控制台。 然后单击“车队管理”>“基础架构”>“群集”>“群集集”。
- 单击创建群集。 按照提示将两个托管群集添加到群集集。
- 单击将 Submariner 附加组件安装到群集的选项。
- 选择受管群集作为安装附加组件的目标群集。
- 在检查两个集群的配置时,请按以下所示更改以下设置,其余设置保持默认。 然后点击 “安装”。
globalnetEnabled: true (checked) gateways: 2 NATTEnable: false (unchecked) cableDriver: vxlan. - 等待Submariner附加状态显示为健康(绿色)。 这可能需要长达20分钟。
步骤 7. 安装和配置 OpenShift Data Foundation
托管集群
在 2 个托管群集上安装和配置 ODF。 确保在主托管群集和辅助托管群集上都完成这些步骤。
-
按照步骤 将 OpenShift Data Foundation 附加组件安装 到 2 个托管群集上。 指定默认 ODF 版本或更高版本。 请确保在安装过程中将启用 NooBaa 作为附加选项。
-
确认 ODF 基础已成功安装。 在输出中,检查状态是否显示为
Ready。oc get storagecluster -n openshift-storage ocs-storagecluster -o jsonpath='{.status.phase}{"\n"}' -
运行该命令更新
storageCluster资源multiClusterService部分中的ACM Managed Cluster Name。 这样,ODF 就可以使用 GlobalNet.NET Framework。 有关详细信息,请参阅 在托管群集上创建 OpenShift Data Foundation 群集。确保将命令中的
MANAGED_CLUSTER_NAME替换为托管群集的名称。kubectl patch storagecluster -n openshift-storage ocs-storagecluster --type merge -p'{"spec":{"network":{"multiClusterService":{"clusterID":"MANAGED_CLUSTER_NAME","enabled":true}}}}' -
验证服务输出。 这可能需要几分钟才能在输出中显示出来。
oc get serviceexport -n openshift-storage示例输出:
NAME AGE rook-ceph-mon-d 4d14h rook-ceph-mon-e 4d14h rook-ceph-mon-f 4d14h rook-ceph-osd-0 4d14h rook-ceph-osd-1 4d14h rook-ceph-osd-2 4d14h -
使用以下 YAML 为
ocs-provider-server创建服务导出。apiVersion: multicluster.x-k8s.io/v1alpha1 kind: ServiceExport metadata: name: ocs-provider-server namespace: openshift-storage -
运行命令更新
storageCluster资源,以使用您创建的ocs-provider-server服务导出。oc annotate storagecluster ocs-storagecluster -n openshift-storage ocs.openshift.io/api-server-exported-address=MANAGED_CLUSTER_NAME.ocs-provider-server.openshift-storage.svc.clusterset.local:50051. -
验证
storageCluster资源是否准备就绪。oc get storagecluster -n openshift-storage示例输出。
NAME PHASE ocs-storagecluster Ready
第 8 步。 配置区域灾难恢复策略
集线器集群
在您的中心集群上安装 ODF 多集群协调器,并创建一项灾难恢复策略,以实现两个受管集群之间的镜像同步。
-
按照以下步骤 将 ODF Multicluster Orchestrator 安装到 ACM 集线器群集上。 为确保兼容性,请确保将 同一版本号 安装为上一节中安装到托管群集上的 ODF 版本。
-
通过检查操作员舱是否运行来验证安装。
oc get pods -n openshift-operators示例输出。
NAME READY STATUS RESTARTS AGE odf-multicluster-console-6845b795b9-blxrn 1/1 Running 0 4d20h odfmo-controller-manager-f9d9dfb59-jbrsd 1/1 Running 0 4d20h ramen-hub-operator-6fb887f885-fss4w 2/2 Running 0 4d20h -
在 ACM 集线器群集上,创建一个同步间隔为 5 分钟的 DR 策略,并在参数中指定每个受管群集。 这将在两个托管集群上创建 NooBaa 对象桶,并启用 ODF Ceph 块池镜像进行卷复制。
- 导航至 ACM 控制台,然后单击机群管理 > 数据服务 > 灾难恢复 > 策略 > 创建灾难恢复策略。
- 创建 DR 策略,其中包括以下参数。
- 已连接的集群:PRIMARY_MANAGED_CLUSTER_NAME、SECONDARY_MANAGED_CLUSTER_NAME
- 复制策略:异步
- 复制间隔:5m
-
在集线器群集上运行命令,验证 DR 策略是否已创建并应用到托管群集。
oc get drpolicy DRPOLICY_NAME -o jsonpath='{.status.conditions[].reason}{"\n"}'oc get drclusters示例输出。
NAME AGE managed-cluster1 4m42s managed-cluster2 4m42s -
在每个托管群集上,验证 DR 策略是否已应用并处于健康状态。
oc get csv,pod -n openshift-dr-system示例输出。
NAME DISPLAY VERSION REPLACES PHASE clusterserviceversion.operators.coreos.com/odr-cluster-operator.v4.15.0 Openshift DR Cluster Operator 4.15.0 Succeeded clusterserviceversion.operators.coreos.com/volsync-product.v0.8.0 VolSync 0.8.0 Succeeded NAME READY STATUS RESTARTS AGE pod/ramen-dr-cluster-operator-6467cf5d4c-cc8kz 2/2 Running 0 3d12hoc get cephblockpool ocs-storagecluster-cephblockpool -n openshift-storage -o jsonpath='{.status.mirroringStatus.summary}{"\n"}'示例输出。
{"daemon_health":"OK","health":"OK","image_health":"OK","states":{}} -
可选:查看您可以安装的 操作员,以增强 ODF 区域灾难恢复功能。
-
可选:测试灾难恢复配置。
ODF 地区灾难恢复的可选操作员
查看您可以在 ACM 集线器或托管集群上安装的可选操作员,以增强 ODF 区域灾难恢复功能。 请注意,IBM 不负责管理这些操作员。
您有责任管理这些操作员,包括但不限于更新、监控、恢复和重新安装。
| 运算符 | 描述 | 其他信息 |
|---|---|---|
| OpenShift 数据保护 API ( OADP ) 操作员 |
|
用于数据保护的 OpenShift API 简介 |
测试您的灾难恢复配置
创建一个示例应用程序来测试您的灾难恢复解决方案。 更多信息,请参见 创建测试灾难恢复应用的示例应用程序。
-
从ACM控制台部署基于订阅的应用程序。 当所有应用程序资源成功部署后,应用程序的拓扑选项卡将显示为绿色。
-
在应用程序页面,点击 “操作” >“管理数据政策”。
-
将之前创建的DR策略分配给此应用程序。
-
确认应用程序容器正在主集群上运行。
-
在应用程序页面,点击 “操作” >“故障转移应用程序”。 选择您的辅助ODF集群作为目标集群。 点击“启动”。
-
确认应用程序容器已移动到辅助集群。
-
在应用程序页面,点击 “操作” >“重新定位应用程序”。 选择您的主ODF集群作为目标集群。 点击“启动”。
-
确认应用程序容器已移回主集群。
升级您的 ODF 区域灾难恢复环境
有关何时以及如何升级 ODF-RDR 环境组件的信息,请参阅《 升级您的 ODF 区域灾难恢复环境 》。
故障诊断
如果您在 ODF 区域灾难恢复配置中遇到问题,请参阅 《验证您的 OpenShift 数据基础架构区域灾难恢复配置》,以检查设置中各个组件的状态。
支持的应用程序和工作负载
完成设置后,请查看可应用“区域灾难恢复”功能的应用程序和工作负载类型。
- 订阅式
- 应用程序是从外部来源部署的,如 GitHub, Helm repo 或 Object Storage。
- 有关详细信息,请参阅 Red Hat 文档中的 创建基于订阅的应用程序示例。
- ApplicationSet-based
- 通过 GitOps 操作符从 GitHub 仓库部署应用程序,该操作符负责管理持续交付。 这包括两个亚型:
-
- GitOps 拉动模式 ( ArgoCD pull): 托管群集使用 GitOps 操作符从 GitHub 拉取应用程序。
-
- GitOps 推送模式 ( ArgoCD push): GitOps 操作员在部署和更新过程中将应用程序推送到托管群集。
- 更多信息,请参阅 Red Hat 文档中的 创建基于应用程序集的应用程序。
- 有关 GitOps 子类型的更多信息,请参阅 Red Hat 文档中的 使用推拉模式部署 Argo CD。
- 发现的应用
- 在托管群集中预先部署了一个应用程序,但未使用 ACM。 在这种情况下,您可以对预装的应用程序使用 ACM 发现,并仍然配置 DR 策略。
- 更多信息,请参阅 Red Hat 文档中的“已发现应用程序的灾难恢复保护”。
- 包括 VM 部署的应用
- 从 ACM 控制台将基于 VM 的应用程序部署到托管群集上。 如前所述,这些 VM 应用程序可以是订阅型、ApplicationSet-based, 或可发现的。 对于此类应用程序,可通过 ACM 控制台使用启动、停止、暂停和删除“VM”操作的选项。
- 有关详细信息,请参阅 Red Hat 文档中的 Red Hat Advanced Cluster Management for Virtualization。