OpenShift Red Hat OpenShift on IBM Cloud 集群上的 Data Foundation 區域災難復原
虛擬私有雲 4.17 後來
區域災難復原可確保在某個地理區域無法使用時業務的連續性。 您可以使用 Red Hat 進階叢集管理 (ACM),為 OpenShift 資料基礎 (ODF) 叢集設定區域性災難復原解決方案。
每個步驟都標示了應在哪个叢集上執行。 請參考以下圖例。
| 標籤 | 叢集 |
|---|---|
| 樞紐叢集 | 在樞紐叢集 (即安裝了 ACM 的叢集)上需執行的步驟。 |
| 受管叢集 | 在每個受管叢集 (主 ODF 叢集和次要 ODF 叢集)上需執行的步驟。 |
以下是此解決方案的高階步驟:
- 建立樞紐叢集。
- 為匯流排叢集建立一個受信任的設定檔。
- 建立受管叢集。
- 在樞紐叢集中為 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替換為您的集線器叢集 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 ... -
在樞紐叢集中,建立一個包含叢集存取憑證及伺服器 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,以及您在樞紐叢集中所建立的機密之名稱與命名空間。 您也可以在附加元件安裝至樞紐叢集後再完成此流程,但需執行額外步驟,詳情請參閱 安裝後匯入受管叢集。
-
執行此指令以啟用此附加元件。 請務必指定
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' -
請確認該附加元件已安裝。 該附加元件可能需要幾分鐘才會出現在以下輸出結果中。
- 在樞紐叢集中,請確認已建立「
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」。
- 導覽到 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. 如需詳細資訊,請參閱 在受管群集上建立 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 多叢集協調器,並建立一項災難復原 (DR) 政策,以啟用兩個受管叢集之間的鏡像功能。
-
按照 步驟將 ODF Multicluster Orchestrator 安裝到 ACM 集線器群集。 為了確保相容性,請確保將 相同版本號 安裝為上一節中安裝到受管群集上的 ODF 版本。
-
檢查操作員 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 -
在 ACM 集線器群集上,建立同步時間間隔為 5 分鐘的 DR 政策,並在參數中指定每個受管群集。 這會在兩個受管群集上建立 NooBaa 物件桶,並啟用 ODF Ceph 區塊池鏡像以進行磁碟區複製。
- 導航至 ACM 主控台,然後按一下車隊管理 > 資料服務 > 災難復原 > 政策 > 建立 DR 政策。
- 建立包含下列參數的 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 政策指定給此應用程式。
-
驗證應用程式 Pod 是否在主要群集上執行。
-
在應用程式頁面上,移至動作 > 故障移轉應用程式。 選擇您的次要 ODF 群集為目標群集。 按一下啟動。
-
確認應用程式 Pod 已移至次要群集。
-
在應用程式頁面上,移至行動 > 重新定位應用程式。 選擇您的主要 ODF 群集為目標群集。 按一下啟動。
-
確認應用程式 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。