設定災害復原

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

附註:

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

規劃組態

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

附註:

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

下圖顯示設定之後,您可以在完全不同的 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 建議使用主要堡壘主機作為 DR 協調器。其他選項則需要自訂提供的程序檔。
  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 和部署預設會在次要區域中啟動。回復結束時,會顯示次要叢集的狀態。部分 Pod 可能需要更多時間才能達到 RUNNING 狀態。
  2. 檢查主要檔案中的 $working_dir/date/backup-operations.log 檔案,瞭解擷取和套用作業中可能的錯誤。
  3. 檢查次要檔案中的 $working_dir/restore.log$working_dir/date/restore-operations.log 檔案,瞭解擷取和套用作業中可能的錯誤。
    restore-operations.log 檔案包含詳細的回復作業。