GKE 叢集架構

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

本頁面適用於定義 IT 解決方案和系統架構的管理員、架構師和操作員。如要進一步瞭解 Cloud de Confiance by S3NS 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。

閱讀本頁面前,請先確認您已熟悉 Kubernetes 叢集架構。

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

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

下圖顯示 GKE 叢集的架構:

這張圖表顯示下列元件:

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

關於控制層

控制層會執行 Kubernetes API 伺服器、排程器和核心資源控制器等程序。GKE 會管理控制層的生命週期,包括叢集建立和刪除等作業。包括升級控制層上執行的 Kubernetes 版本,這項作業由 GKE 自動執行,或在您要求時手動執行 (如果您想在自動排程之前升級)。

控制層和 Kubernetes API

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

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

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.dev 或 gcr.io 網域中的 Artifact Registry 存放區,提取在控制層和節點上執行的 Kubernetes 系統軟體容器映像檔。如果這些登錄檔發生服務中斷,可能會導致下列動作失敗:

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

視服務中斷的具體性質和持續時間而定,即使您未介入,工作負載也可能中斷。

如果 Artifact Registry 存放區服務中斷情形發生在區域層級,我們可能會將要求重新導向至未受影響的可用區或區域。

如要查看 Cloud de Confiance 服務的狀態,請前往Cloud de Confiance 狀態資訊主頁。

最佳做法:

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

關於節點

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

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

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

最佳做法:

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

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

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

由 GKE 全代管,包括:

GKE 會管理下列項目:

你可以管理下列項目:

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

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

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

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

向 Kubernetes API 註冊節點

在 GKE 叢集中建立節點時,該節點上的 kubelet 程序會與 Kubernetes API 伺服器建立 TLS 連線。在節點初始化期間,kubelet 會建立 CertificateSigningRequest,向 API 伺服器要求專屬用戶端憑證。kubelet 會使用憑證在 Kubernetes API 中建立 Node 物件。

GKE 有一項功能稱為Shielded GKE 節點,在所有新叢集中預設為啟用,可透過節點上的虛擬信任平台模組 (vTPM),以加密方式驗證節點的身分,進而提升這個節點自我註冊程序的安全性。這項驗證可確保控制層只會向合法的節點核發憑證。

您可以選擇要求由信任的 GKE 控制層元件建立這些 Node 物件,而非 kubelet,這樣一來,即使節點遭到入侵,也能降低潛在影響。詳情請參閱「建立控制層節點」(預先發布版)。

後續步驟