使用使用者自建物件快照保護您的 OCI Kubernetes 引擎叢集免於災害

為確保災害發生時的業務持續性,您會想要為在 Kubernetes 叢集上執行的應用程式實施災害復原 (DR) 策略,以提供資料保護,並可讓您以最少的資料和生產力損失快速切換至待命系統。 儘管 Kubernetes 採用意味著 IT 系統架構的巨大變化,但 Kubernetes 系統會將類似的 DR 典範呈現為傳統應用程式 (Oracle Java SE、Oracle Java EE 等)。您必須在次要位置維持一致且儘可能最新的主要系統複本,以便在主要區域造成災害停止工作時繼續工作負載。

Oracle Maximum Availability Architecture (Oracle MAA) 提供建議和公用程式,可讓您在影響位置的災難案例中復原,並強制將工作負載重新導向至複製網站。此內容的重點是應用程式的 Kubernetes 組態複寫。在 Kubernetes 叢集上執行的應用程式依賴許多不同的元件來運作,包括控制層節點、工作節點、負載平衡器和儲存。同時,在 Kubernetes 上執行的應用程式所產生的程式實際執行資料,與傳統應用程式所面臨的挑戰相同,在程式實際執行應用程式期間,可能會產生、讀取及更新保存資料。此解決方案手冊提供複製在 Kubernetes 上執行之應用程式組態的建議。程式實際執行資料的災害保護超出本文件的範圍,應與在應用程式伺服器上執行的傳統應用程式完全相同,包括下列各項:

  • 避免多語言持續性。根據備份可用性一致性 (BAC) 定理,使用不同類型的持續性存放區來處理執行時期資料幾乎不可能解決問題。
  • 盡可能針對所有不同資料類型、微服務和具有相依性的應用程式使用單一存放區。
  • 請參閱 Oracle Database 的 Oracle MAA 最佳實務,瞭解程式實際執行資料的災害保護。

此外,您必須保護 Kubernetes 叢集控制層。使用適當的 etcd 快照以避免損毀、失敗,以及提供倒溯至工作叢集。雖然 Oracle MAA 提供了對災害進行控制層保護的最佳實務,但本文件已不在本文件範圍內,描述該區域中的必要技術。

Before You Begin - 開始之前

有幾項 Oracle MAA 技術摘要說明如何設定傳統中介軟體系統的災難復原 (DR) 系統。這些文件詳細說明了 Kubernetes 應用程式使用的外部基礎架構元件 (例如儲存、負載平衡器和資料庫) 的災害保護需求。

請複查下列項目以瞭解詳細資訊:

架構

此架構顯示 Kubernetes 叢集的災害復原 (DR) 系統拓樸。

所有位於主要資料庫中的執行階段、組態和中繼資料資訊都會透過 Oracle Autonomous Data Guard 從 Region 1 複製到 Region 2。所需的 Kubernetes (K8s) 叢集組態是透過控制層保護的 ETCD 快照進行複製,並使用 YAML 快照進行應用程式組態保護。您可以使用使用者自建物件快照,或者可以使用 etcd 複本或使用者自建物件快照,用於應用程式特定的組態保護,以用於應用程式特定的組態保護。請參閱 Kubernetes 叢集以 etcd 快照為基礎進行回復以瞭解詳細資訊。容器使用的映像檔會由登錄檔代管,無論是本機叢集還是外部儲存區域 (映像檔本身都不會被視為 Kubernetes 叢集組態)。

附註:

設定程式實際執行資料庫的 Oracle Autonomous Data Guard 已超出本文件的範圍。
kubernetes-multiregion-dr.png 的描述如下
kubernetes-multiregion-dr.png 圖解描述

kubernetes-multiregion-dr-oracle.zip

此架構支援下列元件:

  • 地區

    Oracle Cloud Infrastructure 區域是一個本地化地理區域,其中包含一或多個稱為可用性網域的資料中心。區域獨立於其他區域,而廣大的距離可以將其分開 (跨國家或大陸)。

  • 負載平衡器

    Oracle Cloud Infrastructure Load Balancing 可從單一進入點自動分配流量至多部伺服器。

  • 動態路由閘道 (DRG)

    DRG 是一個虛擬路由器,提供相同區域中 VCN 之間、VCN 與區域外網路 (例如其他 Oracle Cloud Infrastructure 區域中的 VCN、內部部署網路或其他雲端提供者中的網路) 之間的專用網路流量路徑。

  • 資料保全

    Oracle Data Guard 和 Oracle Active Data Guard 提供一組全方位服務,可建立、維護、管理及監控一或多個待命資料庫,讓生產環境 Oracle 資料庫維持可用狀態,無須中斷。Oracle Data Guard 會使用記憶體內複製,將這些待命資料庫當作生產資料庫的複本來維護。如果生產資料庫因計畫性或非計畫性停機而無法使用,Oracle Data Guard 可以將任何待命資料庫切換至生產環境角色,將停機時間降到最低。Oracle Active Data Guard 提供額外功能,可將讀取幾乎工作負載卸載至待命資料庫,同時提供進階資料保護功能。

  • Oracle Real Application Clusters (Oracle RAC)

    Oracle RAC 可讓您在多個伺服器上執行單一 Oracle Database,以最大程度地提高可用性,並實現水平擴展性,同時存取共用儲存。連線至 Oracle RAC 執行處理的使用者階段作業可以容錯移轉並安全地在中斷期間重新執行變更,而不需對一般使用者應用程式進行任何變更。

  • 登錄

    Oracle Cloud Infrastructure Registry 是 Oracle 管理的登錄檔,可讓您簡化開發到生產的工作流程。「登錄」可讓您輕鬆儲存、共用及管理開發使用者自建物件,例如 Docker 映像檔。Oracle Cloud Infrastructure 的高可用性且可擴展的架構可確保您能夠可靠地部署和管理應用程式。

  • Kubernetes 引擎

    Oracle Cloud Infrastructure Kubernetes Engine ( OCI Kubernetes 引擎OKE) 是完全託管、可擴展且高可用性的服務,可用來將容器化應用程式部署到雲端。您可以指定應用程式所需的運算資源,而 Kubernetes 引擎則會在現有租用戶的 Oracle Cloud Infrastructure 上佈建這些資源。OKE 使用 Kubernetes 將跨主機叢集的容器化應用程式部署、調整規模及管理自動化。

  • Kubernetes 叢集

    Kubernetes 叢集是一組執行容器化應用程式的機器。Kubernetes 提供可攜式、可擴充的開源平台,用於管理這些節點中的容器化工作負載和服務。Kubernetes 叢集是由工作節點與控制平面節點組成。

  • Kubernetes 工作節點

    Kubernetes 工作節點是工作機器,可在 Kubernetes 叢集中執行容器化應用程式。每個叢集至少都有一個工作節點。

  • Kubernetes 控制層

    Kubernetes 控制平面可管理 Kubernetes 叢集內工作節點與 Pod 的資源。控制層元件可偵測及回應事件、執行排程及移動叢集資源。

    以下是控制平面元件:
    • kube-apiserver:執行 Kubernetes API 伺服器。
    • etcd:所有叢集資料的分散式索引鍵 - 值存放區。
    • kube- scheduler:決定要在哪個節點上執行新的未指派 Pod。
    • kube-controller-manager:執行控制器處理作業。
    • cloud-controller-manager:使用雲端特定 API 連結叢集。
  • 傳入控制器

    傳入控制器是在 Kubernetes 叢集中執行並管理傳入資源的元件。它會接收來自外部網路的流量,將其路由到正確的服務,並執行負載平衡和 SSL 終止。傳入控制器通常在叢集中以個別的 Pod 執行,而且可以獨立於其管理的服務進行調整。

  • KUBE 端點 API

    KUBE 端點 API 是 Kubernetes 控制平面的 kube-apiserver 元件。它會執行 Kubernetes API 伺服器。

  • ETCD 備份

    ETCD 備份是 Kubernetes 控制層之 etcd 元件的備份。etcd 包含所有叢集資料的分散式索引鍵值存放區。建立 ETCD 備份以復原 Kubernetes 叢集以進行災害復原是很重要的。

  • YAML 快照

    YAML 快照是包含 Kubernetes 叢集中使用者自建物件定義之 (YAML) 檔案的時間點複本。快照是 tar 檔案,可用來回復相同或不同 Kubernetes 叢集中這些使用者自建物件。

Kubernetes 災害保護的考量

導入 Kubernetes 災害保護時,請考慮下列事項:

  • 對稱式災害復原 (DR) :Oracle 建議在主要和次要使用完全相同的資源容量和組態。涉及的 Kubernetes 命名空間應該有類似的可用資源,例如工作節點數目 (及其硬體容量) 和其他基礎架構 (共用儲存、負載平衡器、資料庫等等)。次要區域中 Kubernetes 叢集相依的資源必須能夠跟上與主要區域相同的工作負載。此外,這兩個系統在功能上必須與還原系統所依據的完全相同服務一致,並必須同時在這兩個位置使用側車、配置圖 (CM)。
  • 映像檔與二進位檔呈現類似的典範:映像檔不會隨著 Kubernetes 組態的頻繁變更,您可能不需要在每個 Kubernetes 叢集複寫更新映像檔。主要系統使用的映像檔必須與次要系統使用的映像檔相同,或者可能發生不一致和失敗的情形。不過,影像複製已超出此手冊的範圍。您可以使用多種策略在兩個位置之間維持一致的影像使用,包括下列各項:
    • 將影像儲存在主要節點並載入至次要的工作節點。此方法非常容易實作,但會造成管理負荷。使用容器登錄具有相當大的優點,並將影像儲存在本機,因此更難管理版本和更新。
    • 映像檔可以位於不同區域的外部容器登錄中,也可以位於主要和待命資料庫所使用的不同區域或資料中心。外部產品與程式庫是由第三方維護,其可用性通常在其版本中為隱含。
    • 影像可以位於主要和待命資料庫的容器登錄中。發行新版影像時,每個區域都會平行更新。這樣可以更有效地控制使用的軟體,但會造成更高的管理負荷。它需要複製影像並管理憑證,才能存取兩個不同的登錄。CI/CD 工具通常用於此方法。

雖然此手冊顯示使用 Oracle Cloud Infrastructure 的範例,但建議一般用於安裝在內部部署系統中的自訂 Kubernetes 叢集。您可以使用在 OCI Kubernetes 引擎 (OKE) 中執行的主要 Kubernetes 叢集與在內部部署或自訂 Kubernetes 叢集中執行的次要叢集之間提供的步驟和命令檔。您也可以使用在 OKE 中執行的主要 Kubernetes 叢集與在 OKE 中執行的次要叢集之間的步驟與命令檔,或是兩個內部部署或自訂 Kubernetes 叢集之間執行的步驟與命令檔。

關於必要產品與角色

此解決方案需要下列產品和角色:

  • Oracle Cloud Infrastructure Kubernetes Engine (Kubernetes 引擎或 OKE) 叢集
  • 能夠管理 kubernetes 系統的堡壘主機節點
  • Oracle Cloud Infrastructure (OCI)

此手冊以主要和次要區域使用 OCI 區域和資源為基礎。不過,此解決方案也適用於不是 OCI 上的 Kubernetes 叢集。

這些是每項服務所需的角色。

服務名稱:角色 需要 ...
Oracle Cloud Infrastructure :admin 如果您使用一或多個 OCI 區域,請佈建和設定資源和服務。
Kubernetes 引擎叢集 (主要):administrator 執行所有的命令檔。
Kubernetes 引擎 (主要) 節點:具有次要執行權限和 ssh 權限的作業系統使用者

執行下列命令檔:

  • maak8-get-all-artifacts.sh
  • maak8DR-apply.sh
Kubernetes 引擎叢集 (次要):administrator 執行所有的命令檔。
Kubernetes 引擎 (次要) 節點:具有執行權限的作業系統使用者

執行下列命令檔:

  • removeyamlblock.sh
  • apply-artifacts.sh
  • maak8-push-all-artifacts.sh

請參閱 Oracle 產品、解決方案和服務,瞭解您需要的內容。