GKE 叢集架構


本頁面說明執行容器化工作負載的 Google Kubernetes Engine (GKE) 叢集架構。請參閱本頁內容,瞭解控制層、節點,以及各種 GKE 叢集元件如何互動。

本文適用於定義 IT 解決方案和系統架構的管理員、架構師和營運人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

閱讀本頁面之前,請先熟悉 Kubernetes 叢集架構

GKE 叢集包含控制層,以及稱為「節點」的工作站機器。控制層和節點會構成 Kubernetes 叢集自動化調度管理系統。GKE Autopilot 會管理叢集的整個底層基礎架構,包括控制層、節點和所有系統元件。

如果您使用 GKE 標準模式,GKE 會管理控制層和系統元件,而您則管理節點。

下圖顯示 GKE 叢集的架構:

下圖顯示下列元件:

  • 控制層:由 GKE 管理。執行 Kubernetes API 伺服器、工作負載控制器、Kubernetes 排程器和叢集狀態儲存空間。
  • 節點:在 Autopilot 模式中由 GKE 管理,在 Standard 模式中由客戶管理。所有 Pod 都會在節點中執行。
  • 其他 Google Cloud 服務:可與 GKE 整合。

關於控制層

控制層會執行 Kubernetes API 伺服器、排程器和核心資源控制器等程序。GKE 會管理控制層生命週期,從叢集建立到刪除都由 GKE 負責。管理內容包含替控制層上執行的 Kubernetes 版本進行升級,GKE 會自動執行這項作業,但如果您想在自動排程之前先升級,也可以要求手動執行。

控制層和 Kubernetes API

控制層是叢集的整合式端點。您可透過 Kubernetes API 呼叫與控制層互動。控制層會執行 Kubernetes API 伺服器程序 (kube-apiserver) 來處理 API 要求。您可以透過下列方式發出 Kubernetes API 呼叫:

  • 直接呼叫:HTTP/gRPC
  • 間接呼叫:Kubernetes 指令列用戶端 (例如 kubectl) 或Google Cloud 控制台。

API 伺服器程序是叢集所有通訊的中樞。所有內部叢集元件 (例如節點、系統程序和應用程式控制器) 都可做為 API 伺服器的用戶端使用。

API 要求會向 Kubernetes 說明叢集物件的所需狀態。Kubernetes 會嘗試持續維持該狀態。 Kubernetes 可讓您以命令式宣告式設定 API 中的物件。

如要進一步瞭解 Kubernetes 中的物件管理,請參閱下列頁面:

控制層和叢集狀態資料庫

開放原始碼 Kubernetes 專案預設會使用 etcd 做為所有叢集資料的儲存資料庫。叢集狀態會保留在鍵/值存放區中,該存放區包含叢集中每個 Kubernetes API 物件的狀態資訊。舉例來說,叢集狀態資料庫會儲存每個 Secret、ConfigMap 和 Deployment。

GKE 叢集會將叢集狀態儲存在下列其中一個鍵值存放區:

  • etcd:GKE 會將叢集狀態儲存在 etcd 執行個體中,這些執行個體會在每個控制層虛擬機器 (VM) 上執行。
  • Spanner:GKE 會將叢集狀態儲存在 Spanner 中。Spanner 資料庫不會在叢集控制層中執行。

無論資料庫類型為何,每個 GKE 叢集都會在控制層中提供 etcd API。Kubernetes API 伺服器會使用 etcd API 與後端叢集狀態資料庫通訊。

控制層和節點互動

控制層會管理所有叢集節點上執行的項目。控制層會排定工作負載,並管理工作負載的生命週期、資源調度和升級。控制層也會為這些工作負載管理網路和儲存空間資源。控制層和節點會使用 Kubernetes API 相互通訊。

控制層與 Artifact Registry 的互動

建立或更新叢集時,GKE 會從 pkg.devgcr.io 網域的 Artifact Registry 存放區,提取控制層和節點上執行的 Kubernetes 系統軟體容器映像檔。如果這些登錄檔發生中斷情形,可能會導致下列動作失敗:

  • 建立新叢集
  • 升級叢集版本

根據服務中斷的具體性質和時間長短,即使沒有使用者介入,仍可能發生工作負載中斷的情形。

如果 Artifact Registry 存放區服務中斷是區域性問題,我們可能會將要求重新導向至不受服務中斷影響的區域或地區。

如要查看 Google Cloud 服務狀態,請前往Google Cloud 狀態資訊主頁

最佳做法

跨多個區域部署,確保應用程式在區域中斷期間仍可使用。

關於節點

節點是執行容器化應用程式和其他工作負載的工作站機器。個別機器是指 GKE 建立的 Compute Engine 虛擬機器 (VM)。控制層會管理及接收各節點自行回報的狀態最新資訊。

節點會執行必要服務,以支援構成叢集工作負載的容器。這些服務包括執行階段和 Kubernetes 節點代理程式 (kubelet),後者會與控制層通訊,並負責啟動及執行該節點上排定的容器。

GKE 也會執行多個系統容器,這些容器會以節點代理程式 (稱為 DaemonSet) 的形式執行,提供記錄收集和叢集內網路連線等功能。

最佳做法

請為容器化應用程式使用 stdout,因為 stdout 可讓平台處理應用程式記錄

節點管理方式會因叢集作業模式而異,如下所示:

節點元件 Autopilot 模式 標準模式
生命週期

由 GKE 全代管,包括:

GKE 會管理下列項目:

你可以管理下列項目:

顯示設定 使用 kubectl 查看節點。gcloud CLI 或 Google Cloud 控制台不會顯示或提供存取權給基礎 Compute Engine 虛擬機器。 使用 kubectl、gcloud CLI 和 Google Cloud 控制台查看節點。查看及存取基礎 Compute Engine VM。
連線能力 無法直接連線至基礎 VM。 使用 SSH 連線至基礎 VM。
節點作業系統 (OS) 由 GKE 管理。所有節點都使用含有 containerd 的 Container-Optimized OS (cos_containerd) 為節點選擇作業系統
選取機器硬體

根據用途,在 Pod 中要求運算類別

GKE 會管理機器設定、排程、數量和生命週期。

建立節點集區時,請選擇並設定 Compute Engine 機器類型。視需求設定大小、縮放、數量、排程和位置。