OpenShift Red Hat OpenShift on IBM Cloud 集群上的 Data Foundation 區域災難復原

虛擬私有雲 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 替換為您的集線器叢集 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. 若您使用的是 ODF 4.21 或更新版本,請在樞紐叢集中安裝「OpenShift」GitOps 運算子。 有關安裝步驟,請參閱《 在 Web 控制台安裝 Red Hat OpenShift GitOps 操作員》。

步驟 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 準備密鑰

樞紐叢集

對於每個您希望透過 ACM 進行管理的叢集,您都必須在樞紐叢集上建立一個祕密,其中須包含該受管叢集的存取憑證以及伺服器 URL。

若您希望在 ACM 附加元件的安裝過程中匯入受管叢集,請在開始安裝前完成以下步驟。 如果您選擇在附加元件安裝至樞紐叢集後,再建立機密並匯入受管叢集,則可透過 CLI 執行 額外的步驟 來完成此操作。

請針對每個您想要管理的叢集,完成以下步驟。

  1. 在您欲透過 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>
    ...
    
  2. 取得 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
    
  3. 使用上一步驟取得的路由端點來取得存取憑證。 執行以下 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
    ...
    
  4. 在樞紐叢集中,建立一個包含叢集存取憑證及伺服器 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 附加元件。

  1. 找出 ACM 附加元件的預設版本。

    ibmcloud oc cluster addon versions
    
  2. 檢視 ACM 的附加功能選項。 在指令中,請指定前一步驟中找到的預設版本。 請註明您在安裝此附加元件時希望包含的任何選項。

    ibmcloud oc cluster addon options --addon acm --version DEFAULT_VERSION
    
  3. 若您想將叢集匯入供此附加元件管理,且尚未執行過「為 ACM 準備機密」中的步驟,請依照該處的指示操作。 請務必儲存叢集 ID,以及您在樞紐叢集中所建立的機密之名稱與命名空間。 您也可以在附加元件安裝至樞紐叢集後再完成此流程,但需執行額外步驟,詳情請參閱 安裝後匯入受管叢集

  4. 執行此指令以啟用此附加元件。 請務必指定 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」計費方案安裝 ACM 附加元件並匯入受管叢集的範例指令。

    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'
    
  5. 請確認該附加元件已安裝。 該附加元件可能需要幾分鐘才會出現在以下輸出結果中。

    1. 在樞紐叢集中,請確認已建立「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 附加元件

受管叢集

按照步驟安裝和設定 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。 確保在主要和次要受管群集上都完成這些步驟。

  1. 按照 步驟將 OpenShift Data Foundation 附加元件安裝 到您的 2 個受管群集。 指定預設 ODF 版本或更新版本。 請確保安裝時將啟用 NooBaa 作為附加選項。

  2. 確認 ODF 基礎已成功安裝。 在輸出中,檢查狀態是否顯示 Ready

    oc get storagecluster -n openshift-storage ocs-storagecluster -o jsonpath='{.status.phase}{"\n"}'
    
  3. 執行指令更新 storageCluster 資源的 multiClusterService 區段中的 ACM Managed Cluster Name。 這允許 ODF 使用 GlobalNet. 如需詳細資訊,請參閱 在受管群集上建立 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}}}}'
    
  4. 驗證服務輸出。 這可能需要幾分鐘才能顯示在輸出中。

    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
    
  5. 使用下列 YAML 為 ocs-provider-server 建立服務匯出。

    apiVersion: multicluster.x-k8s.io/v1alpha1
    kind: ServiceExport
    metadata:
      name: ocs-provider-server
      namespace: openshift-storage
    
  6. 執行指令更新 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.
    
  7. 確認 storageCluster 資源已就緒。

    oc get storagecluster -n openshift-storage
    

    輸出範例。

    NAME                    PHASE  
    ocs-storagecluster      Ready   
    

步驟 8. 設定區域性災難復原政策

樞紐叢集

請在您的樞紐叢集上安裝 ODF 多叢集協調器,並建立一項災難復原 (DR) 政策,以啟用兩個受管叢集之間的鏡像功能。

  1. 按照 步驟將 ODF Multicluster Orchestrator 安裝ACM 集線器群集。 為了確保相容性,請確保將 相同版本號 安裝為上一節中安裝到受管群集上的 ODF 版本。

  2. 檢查操作員 pod 是否正在運行,以驗證安裝。

    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. ACM 集線器群集上,建立同步時間間隔為 5 分鐘的 DR 政策,並在參數中指定每個受管群集。 這會在兩個受管群集上建立 NooBaa 物件桶,並啟用 ODF Ceph 區塊池鏡像以進行磁碟區複製。

    1. 導航至 ACM 主控台,然後按一下車隊管理 > 資料服務 > 災難復原 > 政策 > 建立 DR 政策
    2. 建立包含下列參數的 DR 政策。
      • 已連線的叢集:PRIMARY_MANAGED_CLUSTER_NAME、SECONDARY_MANAGED_CLUSTER_NAME
      • 複製政策:非同步
      • 複製間隔:5m
  4. 在集線器群集上,執行指令以驗證 DR 政策是否已建立並套用至受管理的群集。

    oc get drpolicy DRPOLICY_NAME -o jsonpath='{.status.conditions[].reason}{"\n"}'
    
    oc get drclusters
    

    輸出範例。

    NAME        AGE
    managed-cluster1   4m42s
    managed-cluster2   4m42s
    
  5. 在每個受管群集上,驗證 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          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. 驗證應用程式 Pod 是否在主要群集上執行。

  5. 在應用程式頁面上,移至動作 > 故障移轉應用程式。 選擇您的次要 ODF 群集為目標群集。 按一下啟動

  6. 確認應用程式 Pod 已移至次要群集。

  7. 在應用程式頁面上,移至行動 > 重新定位應用程式。 選擇您的主要 ODF 群集為目標群集。 按一下啟動

  8. 確認應用程式 Pod 已移回主要群集。

升級您的 ODF 區域災難復原環境

有關何時以及如何升級 ODF-RDR 環境中各組件的資訊,請參閱《 升級您的 ODF 區域災難復原環境 》。

疑難排解

若您在 ODF 區域災難復原設定方面遇到問題,請參閱 《驗證您的 OpenShift 資料基礎架構區域災難復原設定》,以檢查設定中各組件的運作狀態。

支援的應用程式與工作負載

完成設定後,請檢視可套用「區域性災難復原」的應用程式類型和工作負載。

訂閱型式
應用程式從外部來源部署,例如 GitHub, a Helm repo,或 Object Storage。
如需詳細資訊,請參閱 Red Hat 文件中的「建立 Subscription-based 應用程式範例」。
ApplicationSet-based
透過 GitOps 運算子(該運算子負責管理持續交付)從 GitHub 儲存庫部署應用程式。 這包括兩個子類型:
  • GitOps 拉取模式 ( ArgoCD pull): 受管叢集使用 GitOps 操作員從 GitHub 拉取應用程式。
  • GitOps 推送模式 ( ArgoCD push): GitOps 操作員在部署和更新時,會將應用程式推送至受管理的群集。
如需詳細資訊,請參閱 Red Hat 文件中的「建立以應用程式集為基礎的應用程式」。
有關 GitOps 子類型的詳細資訊,請參閱 Red Hat 文件中的 使用 Push and Pull 模型部署 Argo CD
發現的應用
應用程式預先部署在管理式群集中,但未使用 ACM。 在這種情況下,您可以針對預先安裝的應用程式使用 ACM 發現,並且仍然可以設定 DR 政策。
如需詳細資訊,請參閱 Red Hat 文件中 已發現應用程式的災難復原保護
包含 VM 部署的應用程式
從 ACM 主控台將基於 VM 的應用程式部署到受管群集。 如前所述,這些 VM 應用程式可以是訂閱制、ApplicationSet-based, 或可被發現的。 針對此類應用程式,可透過 ACM 控制台執行「VM」操作的啟動、停止、暫停及刪除等選項。
如需詳細資訊,請參閱 Red Hat 文件中的 Red Hat Advanced Cluster Management for Virtualization