設定災害復原

您可以使用本解決方案手冊提供的命令檔,在主要 Kubernetes 叢集中建立 YAML 快照,然後在另一個 (次要) Kubernetes 叢集中回復快照。請務必先規劃組態並瞭解需求,再下載和使用命令檔來設定 YAML 快照。

注意:

此解決方案假設 Kubernetes 叢集 (包括控制計畫和工作節點) 已經存在。

計畫組態

根據主要系統在次要系統上規劃資源與組態。此命令檔會要求 Kubernetes 叢集都已經存在。您必須能夠使用 Kubernetes 命令行工具 kubectl 來存取兩個叢集,才能對這兩個叢集執行命令。

注意:

此解決方案假設 Kubernetes 叢集 (包括控制計畫和工作節點) 已經存在。此 Playbook 中提供的建議與命令檔不會檢查資源、控制層或工作節點組態。

下圖顯示設定完成後,您可以在完全不同的 Kubernetes 叢集回復使用者自建物件快照。

kube-api-dr.png 的描述如下
kube-api-dr.png 圖解描述

規劃組態時,請完成下列 Restore 需求:

  1. 確認主要職工節點與資源在次要節點中為可用。
    包括 Pod 的共用儲存掛載、負載平衡器及資料庫。同時包含回復之命名空間所使用的任何外部系統。
  2. 在執行程序檔之前,手動建立涉及命名空間所使用的必要永久磁碟區。

    此為預設動作。指令碼將會建立主要使用的永久磁碟區宣告。不過,由於永久磁碟區可由不同命名空間中的不同宣告共用,因此自動化程序檔會預期您先在次要叢集上手動建立永久磁碟區,再執行 extract-apply 程序檔。

    或者,您可以將 pv 新增至 maak8DR-apply.env 檔案中的 nons_artifacts_types 變數 (亦即,使用 export nons_artifacts_types="crd clusterrole clusterrolebinding pv)。這會指示命令檔 ALSO 建立次要的永久磁碟區。在第二個案例中,您必須判斷是否與其他永久磁碟區宣告衝突。

  3. 確認次要叢集具有適當存取複製之命名空間所使用的容器映像檔:
    • 用於存取要複製之命名空間中的容器登錄的加密密碼,會由此手冊提供的命令檔複製。如果登錄的認證儲存在其他命名空間中,則您必須以次要方式手動建立。或者,您也可以使用 maak8sapply: my_ns (其中 my_ns 是正在回復的命名空間) 來標示證明資料,讓加密密碼也包含在 YAML 快照中。例如,
      kubectl label secret regcredfra -n other_namespace 
      maak8sapply=namespace_being_backedup
    • 如果您使用手動載入主要員工節點中的任何圖像,您也必須在次要員工節點中手動載入這些圖像。

      注意:

      提供的命令檔會報告複製之命名空間中所使用的影像。
  4. 透過能夠對每個叢集的 Kube API 端點執行 kubectl 作業的堡壘主機節點,提供主要和次要叢集的存取。
    您可以使用第三個節點 sshscp (主要和待命),並協調 DR 同步。不過,為了避免不必要的躍點和階段作業負荷,Oracle 建議您使用主要堡壘主機作為災害復原協調器。其他選項則需要自訂提供的指令碼。
  5. 若要在回復 my_ns namespace 時將備份中包含的非命名進度資源套用至次要,請使用 maak8sapply: my_ns 標籤。

    對於位於叢集根 (亦即,不是精確命名空間的一部分) 中的使用者自建物件,程序檔會尋找包含命名空間名稱的 namespace:group: 欄位參照。如果備份中包含任何其他非已命名進度資源,您可以將它們標示為要新增。

    例如,domains.weblogic.oracle 自訂資源定義不屬於任何命名空間,但您可以使用下列方法將它包含在 apply 作業標籤中:kubectl label crd domains.weblogic.oracle maak8sapply=opns

設定

設定 YAML 快照災害復原。

  1. 從「下載程式碼」下載所有 YAML 快照災害復原命令檔。

    注意:

    所有指令碼都必須位於相同路徑,因為主要指令碼使用其他輔助指令碼。
  2. 編輯 maak8DR-apply.env 程序檔,並更新存取次要系統所需的地址和 ssh 金鑰。
    例如,
    export user_sec=opc
    export ssh_key_sec=/home/opc/Key.ppk
    #Secondary bastion node
    export sechost=10.10.0.23
  3. 視需要自訂 exclude_listnons_artifacts_types 的值。
    • exclude_list:這是應該從備份排除的命名空間清單,即使嘗試備份所有自訂命名空間也是如此。這是為了避免複製控制項平面相關命名空間,而這些命名空間將不適用於次要。
    • nons_artifacts_types:這是屬於根樹狀結構 (亦即,不屬於精確命名空間的一部分) 但也必須包含在快照中的清單或使用者自建物件。此架構將尋找對要備份之命名空間的參照。
    一般而言,您可以使用檔案中提供的預設值:
    #List of namespaces that will be excluded from the backup
    export exclude_list="kube-system kube-flannel kube-node-lease kube-public"
    #Root artifacts that will be included
    export nons_artifacts_types="crd clusterrole clusterrolebinding"
    
  4. 執行提供作為要複製之所選命名空間引數的 maak8DR-apply.sh 程序檔。
    • 如果您未提供引數,則程序檔會複製所有命名空間,但不包括 exclude_list 變數中提供的命名空間。

    • 如果您使用精確的命名空間清單,則必須根據與其他命名空間的相依性來排序 。

      亦即,如果命名空間 soans 相依於或使用的命名空間 opns 中的服務,則 opns 必須先出現在清單中。例如,請執行以下作業,而非 ./maak8DR-apply.sh soans opns

      ./maak8DR-apply.sh opns soans

驗證

執行 maak8DR-apply.sh 命令檔之後,請確認已將主要叢集中存在的所有使用者自建物件複製到次要叢集。查看次要叢集,並確認次要網站中的 Pod 執行時沒有錯誤。

當您執行 maak8DR-apply.sh 程序檔時,架構會將 working_dir 目錄建立為 /tmp/backup.date。分別執行 maak8-get-all-artifacts.shmaak8-push-all-artifacts.sh 程序檔時,會以指令行中的引數方式提供工作目錄。

  1. 檢查次要裝置的狀態,直到所需 Pod 符合主要節點的狀態為止。
    預設會在次要區域中啟動 Pod 和部署。回復結束時,會顯示次要叢集的狀態。有些 Pod 可能需要更多時間才能達到「執行中」狀態。
  2. 檢查主要檔案中的 $working_dir/date/backup-operations.log 檔案,以取得擷取與套用作業中的可能錯誤。
  3. 檢查次要中的 $working_dir/restore.log$working_dir/date/restore-operations.log 檔案,瞭解擷取和套用作業中可能的錯誤。
    restore-operations.log 檔案包含詳細的回復作業。