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

為了確保在發生災害時維持業務連續性,您將對在 Kubernetes 叢集上執行的應用系統實行災害復原 (DR) 策略,此策略可提供資料保護,並讓您快速切換至待命系統,大幅降低資料遺失和生產力。 儘管 Kubernetes 採用意味著 IT 系統架構的巨大變化,但 Kubernetes 系統卻將類似的災害復原範例呈現為傳統應用程式 (Oracle Java SE、Oracle Java EE 等)。在次要位置中,您必須盡可能維持主要系統的一致性和最新的複本,如此才能繼續工作負載,進而造成主要區域的停機時間。

Oracle Maximum Availability Architecture (MAA) 提供建議與公用程式,可讓您在影響位置的災害案例中復原,並強制將工作負載重新導向至複本網站。本書的重點是複寫應用系統的 Kubernetes 組態。在 Kubernetes 叢集上執行的應用系統仰賴許多不同的元件來進行作業,包括控制層節點、工作節點、負載平衡器及儲存體。與此同時,在 Kubernetes 上執行的應用程式所產生的執行階段資料,與傳統應用程式在執行時期應用程式中可能會產生、讀取及更新保存資料相同的挑戰。這個解決方案播放手冊提供複寫 Kubernetes 上執行之應用程式組態的建議。執行階段資料的災害保護超出本文件的範圍,應會以與在應用程式伺服器上執行之傳統應用程式相同的方式處理,包括:

  • 避免多語言持續性。根據備份可用性一致性 (BAC) 理論,在程式實際執行資料使用不同類型的永久存放區幾乎無法解決問題。
  • 儘可能將單一存放區用於所有不同資料類型、微服務和具有相依性的應用程式。
  • 請參閱 Oracle MAA Oracle Database 的最佳做法,以取得執行階段資料的災害保護。

此外,您必須保護 Kubernetes 叢集控制層。使用適當的 etcd 快照來避免損毀、失敗,以及提供倒溯給工作叢集。雖然 Oracle Maximum Availability 可針對災害提供控制層保護的最佳實務,但此文件超出本文件範圍,以描述該領域的必要技巧。

開始之前

有數個 Oracle Maximum Availability Architecture (MAA) 技術摘要,描述如何為傳統中介軟體系統設定災害復原 (DR) 系統。 這些文件詳述 Kubernetes 應用系統使用之外部基礎架構元件 (例如儲存、負載平衡器及資料庫) 的災害保護需求。

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

架構

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

主要資料庫中的所有程式實際執行、組態以及描述資料資訊,都會以 Oracle Autonomous Data Guard 從區域 1 複製到區域 2。必要的 Kubernetes (K8s) 叢集組態是透過 ETCD 快照進行複製,以保護控制層,並使用 YAML 快照進行應用程式組態保護。您可以使用使用者自建物件快照,或是針對應用程式特定組態保護,使用 etcd 副本或人工因素快照來進行應用程式特定組態保護。如需詳細資訊,請參閱 根據 etcd 快照進行 Kubernetes 叢集回復。容器使用的映像檔由每個叢集的本機或外部儲存區域代管 (這些映像檔本身並不視為 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 資料庫保持可用,而不會發生中斷。Oracle Data Guard 會將這些待命資料庫保留為生產資料庫的複本。接著,如果生產環境資料庫因計畫性或非計畫性停機而無法使用,Oracle Data Guard 可以將任何待命資料庫切換為生產角色,將停機關聯的停機時間降到最低。

  • Oracle Real Application Clusters (Oracle RAC)

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

  • 容器登錄

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

  • Kubernetes 的容器引擎

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

  • Kubernetes 叢集

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

  • Kubernetes 工作節點

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

  • Kubernetes 控制平面
    Kubernetes 控制層可管理 Kubernetes 叢集內工作節點與 Pod 的資源。控制層元件可偵測和回應事件、執行排程及移動叢集資源。以下為控制平面元件:
    • kube-apiserver:執行 Kubernetes API 伺服器。
    • etcd:所有叢集資料的分散式索引鍵值存放區。
    • kube 排程器:決定將執行哪一個節點新的未指定 Pod。
    • kube-controller-manager:執行控制器行程 。
    • cloud-controller-manager:將您的叢集與雲端特定 API 連結。
  • 傳入控制器

    傳入控制器是指在 Kubernetes 叢集中執行並管理傳入資源的元件。它會從外部網路接收流量、將它遞送至正確的服務,以及執行負載平衡和 SSL 終止。傳入控制器通常以叢集中的個別 Pod 形式執行,且可以與所管理的服務個別調整規模。

  • KUBE 端點 API

    KUBE-Endpoint API 是 Kubernetes 控制層中的 kube-apiserver 元件。它會執行 Kubernetes API 伺服器。

  • ETCD 備份

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

  • YAML 快照

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

Kubernetes 災害保護的考量

為 Kubernetes 實作災害保護時,請考慮下列事項:

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

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

關於必要產品與角色

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

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

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

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

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

執行下列的命令檔:

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

執行下列的命令檔:

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

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

變更日誌

此日誌列出重大變更: