OpenShift Red Hat OpenShift on IBM Cloud 集群上的区域灾难恢复数据基础

虚拟私有云 4.17 及更高版本

区域灾难恢复功能可在某个地区无法使用时确保业务连续性。 您可以使用 Red Hat 高级集群管理(ACM)为 OpenShift 数据基础(ODF)集群配置区域灾难恢复解决方案。

每个步骤都标有标签,以指示应在哪个集群上运行该步骤。 请参考以下图例。

聚类标签图例
标记 集群
集线器集群 在中心集群 (即安装了 ACM 的集群)上需要完成的步骤。
托管集群 在每个受管集群 (主 ODF 集群和备用 ODF 集群)上需要完成的步骤。

以下是该解决方案的详细步骤:

  1. 创建中心集群。
  2. 为集线器集群创建一个受信任的配置文件。
  3. 创建托管集群。
  4. 在集线器集群上安装 ACM 附加组件。
  5. 将托管集群导入 ACM。
  6. 在受管集群上安装 Submariner,以建立集群之间的连接。
  7. 在受管集群上安装 ODF。
  8. 配置区域灾难恢复策略。

通过这种设置,您安装 ACM 的集线器群集将管理 ODF 群集。 如果主 ODF 集群无法使用,中心集群会将主 ODF 集群中的应用程序和数据迁移到备用 ODF 集群。

ODF 区域灾难恢复支持基于订阅的、由 ApplicationSet-based, 发现的以及基于 VM 的应用程序。 有关详细信息,请参阅本页底部的“支持的应用程序和工作负载”。

准备工作

在创建集群之前,请收集需要填入集群创建命令中的VPC和 Cloud Object Storage 详细信息。

  1. 获取您的 VPC ID。 请记下每个集群要使用的 VPC 的 ID。

    ibmcloud is vpcs
    
  2. 检索特定 VPC 的子网详细信息。 请记下您希望为每个集群使用的子网 ID。

    ibmcloud is subnets --vpc VPC_ID
    
  3. 列出您的 Cloud Object Storage 实例。

    ibmcloud resource service-instances --service-name cloud-object-storage
    
  4. 获取您要使用的实例的 CRN。 请记下“ID”字段中的数值。

    ibmcloud resource service-instance SERVICE_INSTANCE
    

步骤 1. 创建中心集群

集线器集群

这是您用于安装 ACM 以管理主 ODF 集群和辅助 ODF 集群的集群。 请确保您的集线器集群至少拥有 16 vCPU x 64 GB 的可用计算能力。

对于每个群集,确保通过在 CLI 中加入 --disable-outbound-traffic-protection 参数或在用户界面中选择禁用出站流量保护选项来允许出站流量。

  1. 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
    
  2. 请从输出中记下集群 ID。 在后续步骤中你会用到它。

步骤 2. 为集线器集群创建受信任的配置文件

集线器集群

  1. 创建受信任的配置文件。

    ibmcloud iam trusted-profile-create acm-operator-profile
    
  2. 创建计算资源信任规则,其作用域限定在 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
    
  3. 将 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
    
  4. 将受信任的配置文件分配给集线器集群。 将受信任的配置文件分配给集群后,便无法将其移除。

    ibmcloud oc experimental trusted-profile set --cluster CLUSTER_NAME_OR_ID --trusted-profile TRUSTED_PROFILE_ID
    
  5. 请确认已在集群中创建了受信任配置文件的密钥。 该命令的执行可能需要长达10分钟。 请等待密钥出现后再继续安装 ACM 插件。 如果在密钥创建之前继续操作,ACM 插件的安装将会失败。

    oc get secrets -n kube-system | grep ibm-cloud-credentials
    
  6. 如果您使用的是 ODF 4.21 或更高版本,请在集线器集群上安装 OpenShift GitOps 操作员。

    1. 在 Hub 集群的 OpenShift Web 控制台的 Core 平台视图中,导航至“生态系统”>“软件目录”,然后搜索 Red Hat OpenShift GitOps

    2. 点击该 Red Hat OpenShift GitOps 图块。

    3. “安装操作员”页面上,选择一个更新通道和一个要安装的 GitOps 版本

    4. 选择一个已安装的命名空间。 默认的安装命名空间为 openshift-gitops-operator

      对于 GitOps 的 1.10 及更高版本,默认命名空间已从 openshift-operators 更改为 openshift-gitops-operator

    5. 选中 “在此命名空间上启用操作员推荐的集群监控”复选框,以启用集群监控。

    6. 单击安装。 Red Hat OpenShift GitOps 已安装在集群的所有命名空间中。

    7. 请确认“Red Hat OpenShift”GitOps 操作员是否列在 “操作员 > 已安装的操作员”中,且 “状态” 显示为 “成功”

    安装完成后,OpenShift GitOps 会在 openshift-gitops 命名空间中自动配置一个可立即使用的 Argo CD 实例,并且控制台工具栏中会显示一个 Argo CD 图标。

步骤 3. 创建托管集群

托管集群

  1. 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
    
  2. 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 附加组件

集线器集群

使用 CLI 在集线器集群上安装 ACM 附加组件。

  1. 查找 ACM 插件的默认版本。

    ibmcloud oc cluster addon versions
    
  2. 查看 ACM 的附加选项。 在该命令中,请指定上一步中找到的默认版本。 请记录下安装该插件时希望包含的任何选项。

    ibmcloud oc cluster addon options --addon acm --version DEFAULT_VERSION
    
  3. 运行该命令以启用该插件。 请务必指定 billingPlanisLicenseAccepted 这两个参数。

    ibmcloud oc cluster addon enable acm --cluster HUB_CLUSTER_ID --param 'billingPlan=PLAN' --param 'isLicenseAccepted=BOOLEAN'
    

    命令参数。 请参阅下面的示例命令,了解每种参数类型的示例。

    --cluster
    必需。 要安装 ACM 附加组件的集线器集群的 ID。
    --param 'billingPlan='
    必需。 您要为 ACM 选择的计费方案。 请为“ACM 用于 Kubernetes”套餐指定 KUBERNETES
    --param 'isLicenseAccepted='
    必需。 将此选项设置为“true”,即表示接受所选计费方案的许可协议。 除非接受许可协议,否则该插件无法成功安装。 接受本许可即表示您同意相关条款和条件,并确认您已了解所选套餐中包含的服务内容。

    以下是使用 “Kubernetes”计费方案安装 ACM 附加组件的示例命令。

    ibmcloud oc cluster addon enable acm --cluster a5bcde982dfer2nwxq73 --param 'billingPlan=KUBERNETES' --param 'isLicenseAccepted=true'
    
  4. 请确认该附加组件已安装。 该附加组件可能需要几分钟时间才会出现在以下输出中。

    1. 在集线器集群上,请检查 acmhub 资源是否已创建。
        oc get acmhub
        ```
        示例输出。
    
        ```sh {: screen}
            NAME       AGE
            acm-auto   1h
        ```
    1. 在集线器集群上,检查 `acmhub` 的状态。
    
    ```sh {: pre}
        oc describe acmhub
        ```
        示例输出。
    
        ```sh {: screen}
        Status
            Message: ACM installed successfully
        ```
    

步骤 5. 将托管集群导入 ACM

Hub 集群 托管集群

将这两个托管集群导入 ACM,以便中心集群能够对其进行管理。

  1. 打开该集线器集群的 OpenShift Web 控制台。

  2. “车队管理”视图下,点击“导入集群”。

  3. 输入第一个受管集群的名称,如有必要,请选择一个集群集,并输入其他标签 (如有)。

  4. “导入”模式下,选择“手动运行导入命令”,然后单击“下一步”。

  5. 可选:选择一个自动化模板,然后单击 “下一步”

  6. 查看详细信息,然后点击“生成命令”。 复制显示的命令。

  7. 登录到第一个托管集群,并运行已复制的命令,同时将 kubectl 配置为该集群的值。

  8. 对第二个托管集群重复步骤 2–7。

  9. “集群管理” 的角度来看,在继续操作之前,请确认两个受管集群均已列出且状态显示为 “就绪”

步骤 6. 配置潜航者插件

托管集群

按照步骤安装和配置 Submariner 附加组件,它可以在两个受管群集之间建立连接。 这些步骤使用 ACM 控制台。 如需了解更多详细信息,请参阅《 Red Hat 》文档中的 “使用控制台部署 Submariner”一节

  1. 导航至 ACM 控制台。 然后点击 “车队管理” > “集群” > “集群集”
  2. 单击 “创建集群集”。 按照提示将两个托管群集添加到群集集。
  3. 单击将 Submariner 附加组件安装到群集的选项。
  4. 选择受管群集作为安装附加组件的目标群集。
  5. 在检查两个集群的配置时,请按以下所示更改以下设置,其余设置保持默认。 然后点击 “安装”
    globalnetEnabled: true (checked)
    gateways: 2
    NATTEnable: false (unchecked)
    cableDriver: vxlan
    
  6. 等待Submariner附加状态显示为健康(绿色)。 这可能需要长达20分钟。

步骤 7. 安装和配置 OpenShift Data Foundation

托管集群

在 2 个托管群集上安装和配置 ODF。 确保在主托管群集和辅助托管群集上都完成这些步骤。

在本节中执行任何 oc 命令之前,请确保您的上下文已设置为正在配置的托管集群。 运行 ibmcloud oc cluster config --cluster MANAGED_CLUSTER_NAME_OR_ID --admin 以切换上下文,然后使用 oc config current-context 进行验证。

  1. 对于每个受管集群,请通过 IBM Cloud 控制台安装“OpenShift Data Foundation”附加组件。

    1. 转到您集群的 “概览” 页面,然后向下滚动至 “附加组件”部分。
    2. “OpenShift 数据基础”下,单击“安装”。
    3. 勾选“部署 NooBaa 多云对象网关”复选框。
    4. 再次单击 “安装”以确认。
    5. 请等待 ODF 插件状态从 “启用中”变为 “正常” (绿色勾号)后再继续操作。
  2. 请确认 ODF 已成功安装。 在输出中,检查状态是否显示为 Ready

    “UI 正常”状态表明该附加组件已部署,但 ODF 操作员可能仍需几分钟才能完成资源的初始化和注册。

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

必须在每个受管集群上完成以下步骤。 使用 ibmcloud oc cluster config --cluster MANAGED_CLUSTER_NAME_OR_ID --admin`` 将上下文切换到第一个托管集群,完成本节所有步骤直至结束,然后切换到第二个托管集群并重复上述操作。

  1. 运行该命令,以更新 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}}}}'
    

    示例输出。

    storagecluster.ocs.openshift.io/ocs-storagecluster patched
    
  2. 验证服务输出。 这可能需要几分钟才能在输出中显示出来。

    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
    
  3. ocs-provider-server 创建一个服务导出。

    oc apply -f - <<EOF
    apiVersion: multicluster.x-k8s.io/v1alpha1
    kind: ServiceExport
    metadata:
      name: ocs-provider-server
      namespace: openshift-storage
    EOF
    

    示例输出。

    serviceexport.multicluster.x-k8s.io/ocs-provider-server created
    
  4. 运行命令更新 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.ocs.openshift.io/ocs-storagecluster annotated
    
  5. 验证 storageCluster 资源是否准备就绪。

    oc get storagecluster -n openshift-storage
    

    示例输出。

    NAME                    PHASE  
    ocs-storagecluster      Ready   
    

第 8 步。 配置区域灾难恢复策略

集线器集群

在您的中心集群上安装 ODF 多集群协调器,并创建灾难恢复(DR)策略,以实现两个受管集群之间的镜像同步。

  1. 在中心集群上安装 ODF 多集群协调器。

    1. 如果尚未安装,请在集线器集群上安装 OpenShift GitOps 操作员。 有关安装步骤,请参阅 第 2 步的末尾部分。 为集线器集群 创建一个受信任的配置文件。
    2. 在中心集群的 OpenShift Web 控制台的 Core 平台视图中,导航至 “生态系统” >“软件目录”,然后搜索“ODF 多集群编排器”。
    3. 单击 “ODF 多集群协调器”磁贴。 请务必选择 相同的版本号 作为上一节中安装到受管集群上的ODF版本。 保留所有其他默认设置,然后单击“安装”。
    4. 请确保操作员资源已安装在“openshift-operators”项目中,并且所有命名空间均可访问这些资源。 再次单击 “安装”以确认。

    ODF 多集群协调器还会将 OpenShift DR Hub Operator 作为依赖项安装在集线器集群上。

  2. 通过检查操作员舱是否运行来验证安装。 在运行此命令之前,请确保您的 CLI 上下文已设置为 hub 集群。

    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
    
  3. 在集线器集群上,创建一个同步间隔为 5 分钟的灾难恢复策略,并在参数中指定每个受管集群。 这将在两个托管集群上创建 NooBaa 对象存储桶,并启用ODF Ceph块池镜像功能以实现卷复制。

    1. 在枢纽集群的 OpenShift Web控制台的 “车队管理”视图中,导航至 “数据服务” > “灾难恢复” > “策略” > “创建DRPolicy”

    2. 创建 DR 策略,其中包括以下参数。

      • 已连接的集群:PRIMARY_MANAGED_CLUSTER_NAME、SECONDARY_MANAGED_CLUSTER_NAME
      • 复制策略:异步
      • 复制间隔:5m
      • 如果适用,请在 “高级设置”下选择 “为已还原和克隆的 PersistentVolumeClaims 启用灾难恢复支持”(仅限Data Foundation)

      Red Hat 明确指出,此选项仅应用于已发现的应用程序以及积极支持克隆/还原 RBD 卷的环境中。

  4. 集线器集群上,运行以下命令,以验证灾难恢复策略是否已创建并应用到受管集群。 在运行这些命令之前,请确保您的 CLI 上下文已设置为 hub 集群。

    ibmcloud oc cluster config --cluster HUB_CLUSTER_NAME --admin
    
    oc get drpolicy DRPOLICY_NAME -o jsonpath='{.status.conditions[].reason}{"\n"}'
    

    示例输出。

    Succeeded
    
    oc get drclusters
    

    示例输出。

    NAME               AGE
    managed-cluster1   4m42s
    managed-cluster2   4m42s
    
  5. 每个受管集群上,请确认灾难恢复策略已应用且处于正常状态。 在运行这些命令之前,请将 CLI 上下文切换到各个受管集群。

    ibmcloud oc cluster config --cluster MANAGED_CLUSTER_NAME --admin
    
    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          3d12h
    
    oc get cephblockpool ocs-storagecluster-cephblockpool -n openshift-storage -o jsonpath='{.status.mirroringStatus.summary}{"\n"}'
    

    示例输出。

    {"daemon_health":"OK","health":"OK","image_health":"OK","states":{}}
    
  6. 可选:查看您可以安装的 操作员,以增强 ODF 区域灾难恢复功能。

  7. 可选测试灾难恢复配置

ODF 地区灾难恢复的可选操作员

查看您可以在 ACM 集线器或托管集群上安装的可选操作员,以增强 ODF 区域灾难恢复功能。 请注意,IBM 不负责管理这些操作员。

您有责任管理这些操作员,包括但不限于更新、监控、恢复和重新安装。

ODF 地区灾难恢复的可选操作员
运算符 描述 其他信息
OpenShift 数据保护 API ( OADP ) 操作员
  • 用于为 OpenShift 集群创建备份和还原 API。
  • 托管集群上安装。
用于数据保护的 OpenShift API 简介

测试您的灾难恢复配置

创建一个示例应用程序来测试您的灾难恢复解决方案。 更多信息,请参见 创建测试灾难恢复应用的示例应用程序

  1. 从ACM控制台部署基于订阅的应用程序。 当所有应用程序资源成功部署后,应用程序的拓扑选项卡将显示为绿色。

  2. 在应用程序页面,点击 “操作” >“管理数据政策”。

  3. 将之前创建的DR策略分配给此应用程序。

  4. 确认应用程序容器正在主集群上运行。

  5. 在应用程序页面,点击 “操作” >“故障转移应用程序”。 选择您的辅助ODF集群作为目标集群。 点击“启动”。

  6. 确认应用程序容器已移动到辅助集群。

  7. 在应用程序页面,点击 “操作” >“重新定位应用程序”。 选择您的主ODF集群作为目标集群。 点击“启动”。

  8. 确认应用程序容器已移回主集群。

升级您的 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