examlab .net 用最有效率的方法,考取最有價值的證照
本篇導覽 約 19 分鐘

Google Kubernetes Engine (GKE) 基礎:容器編排

3,650 字 · 約 19 分鐘閱讀 ·

為 ACE 考試掌握 Google Kubernetes Engine (GKE)。了解 Autopilot 與 Standard 模式、節點池、縮放機制以及 GKE 網路。

立即做 20 題練習 → 免費 · 不用註冊 · ACE

理解 Google Kubernetes Engine (GKE)

Google Kubernetes Engine (GKE) 是 Google Cloud 提供的託管式 Kubernetes 服務。Kubernetes 本身是由 Google 開源的容器編排工具,而 GKE 則讓你在雲端執行 Kubernetes 變得極其簡單。對於 Associate Cloud Engineer (ACE) 來說,GKE 是公認最難且比重最高的章節之一,因為它涉及了容器化、叢集管理、自動縮放以及複雜的網路配置。

GKE 負責管理控制平面 (Control Plane),你只需要關注工作節點 (Nodes) 和你的應用程式 (Pods)。

白話文解釋

1. 貨櫃碼頭自動化 (快遞類比)

  • 容器 (Container):標準化的貨櫃。裡面裝著你的程式碼和所有依賴環境。
  • Pod: 搬運貨櫃的小推車。它是 Kubernetes 中最小的調度單位,一個 Pod 通常裝一個容器。
  • 節點 (Node):碼頭上的大卡車(VM)。一個卡車可以裝多個小推車(Pods)。
  • GKE (調度員):自動化調度系統。它負責看哪台卡車還有空間,就把貨櫃分派過去。如果貨太多,它會自動叫更多卡車過來(自動縮放 Autoscaling)。

2. 連鎖餐廳管理 (廚房類比)

  • Autopilot 模式:就像加盟連鎖店。你只管出菜單(程式碼),Google 負責管理廚房設備、排班和擴建。你按菜量付費。
  • Standard 模式:就像自己開餐廳。你可以挑選烤箱型號(機器類型)、決定廚師人數。你有更大的控制權,但也更累。

3. 公共汽車系統 (交通號誌類比)

  • 叢集 (Cluster): 整個公車系統。
  • 服務 (Service): 公車站牌。乘客(外部流量)不需要知道哪台公車(Pod)在跑,只需要去站牌等車,系統會自動把乘客送往可用的公車。

Autopilot 與 Standard 叢集模式

這是 GKE 最基礎也最重要的選擇。

Autopilot (全託管)

Autopilot 是 Google 的推薦模式。在 Autopilot 中,Google 管理整個叢集的基礎架構,包括節點和節點池。你不需要配置機器類型或縮放規則,Google 會根據你的 Pod 資源請求 (Resource Requests) 自動優化。 Source ↗

  • 計費:按 Pod 使用的資源(CPU/RAM/儲存空間)計費。
  • 運維:幾乎零運維,Google 負責節點升級與修復。

Standard (自管節點)

  • 計費:按底層 VM 執行個體(節點)計費,不論 Pod 是否填滿。
  • 控制權:你可以自定義節點的機器類型、GPU、甚至透過 SSH 進入節點。適合需要深度調優的場景。

部署與縮放 GKE 叢集

建立叢集

使用 gcloud 可以快速建立叢集。

# 建立 Autopilot 叢集
gcloud container clusters create-auto my-cluster --region us-central1

# 建立 Standard 叢集
gcloud container clusters create my-standard-cluster --zone us-central1-a

縮放機制 (Scaling Mechanisms)

  1. 水平 Pod 自動擴展器 (Horizontal Pod Autoscaler, HPA): 根據 CPU 使用率自動增加 Pod 數量。
  2. 垂直 Pod 自動擴展器 (Vertical Pod Autoscaler, VPA): 根據負載自動調整 Pod 的 CPU/RAM 請求大小。
  3. 叢集自動擴展器 (Cluster Autoscaler, CA): 當 Pod 太多、節點塞不下時,自動增加底層 VM 數量。

在 Standard 模式下,你需要手動啟用叢集自動擴展器 (Cluster Autoscaler);而在 Autopilot 下,這一切都是自動的。 Source ↗

配置節點池 (Node Pools)

節點池 (Node Pools) 是叢集內具有相同配置的一組節點。

節點池 (Node Pool) 允許你在同一個叢集中擁有不同類型的機器。例如,一個池用 C2 機器處理密集計算,另一個池用 E2 處理一般 Web 流量。 Source ↗

  • 污點與容忍度 (Taints & Tolerations): 確保特定 Pod 只跑在特定的節點池上(例如需要 GPU 的 Pod 跑在 GPU 池)。

GKE 網路與服務類型

這是讓外部使用者存取應用程式的關鍵。

服務類型 (Service Types)

  1. ClusterIP (預設): 僅供叢集內部存取。
  2. NodePort: 在每個節點的 IP 上開啟一個固定連接埠。
  3. LoadBalancer: ::important 這會自動在 Google Cloud 建立一個外部負載平衡器 (External Cloud Load Balancer),並分配一個外部 IP。這是對外提供服務的最常用方式。 Source ↗ ::

Ingress

Ingress 是管理外部存取叢集內服務的 API 物件,通常提供 HTTP/HTTPS 路由功能。它相當於一個更高級、支援網址路徑分發的負載平衡器。

透過 kubectl 管理 GKE 操作

一旦叢集建立好,你就需要用 kubectl 來操作。

# 獲取叢集憑證
gcloud container clusters get-credentials my-cluster --region us-central1

# 查看所有節點
kubectl get nodes

# 部署一個應用程式
kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

# 將應用程式公開給網路
kubectl expose deployment hello-server --type=LoadBalancer --port 80 --target-port 8080

熟記指令:gcloud container clusters get-credentials [NAME] --region [REGION]——這是讓 kubectl 能與特定 GKE 叢集對話的唯一方式,會把叢集 endpoint 與認證資訊寫入 kubeconfig。ACE 考試常出這個指令做填空。 Source ↗

GKE 維護與升級

  • 發佈管道 (Release Channels): 選擇穩定版 (Stable)、常規版 (Regular) 或快速版 (Rapid)。
  • 維護時間窗 (Maintenance Windows): 設定系統自動升級的時間段,避免影響高峰業務。

考試陷阱:當升級節點時,GKE 會逐一排空 (Drain) 節點上的 Pod 並重新建立。確保你的 Pod 有足夠的副本數且設定了 Pod 中斷預算 (Pod Disruption Budgets, PDB),以保證服務不中斷。 Source ↗

GKE 的最佳實務

  1. 優先使用 Autopilot:除非有強烈理由需要控制節點。
  2. 使用命名空間 (Namespaces):在邏輯上隔離不同的團隊或環境。
  3. 設定資源限制 (Resource Limits):防止某個 Pod 耗盡節點所有資源造成記憶體不足 (OOM Killed)。
  4. 啟用 Workload Identity:這讓 Pod 能以安全的方式存取其他 GCP 服務(如 Cloud Storage),而不需要在容器內儲存金鑰。

當 ACE 情境題問到 Pod 該如何在不使用 JSON service account key 的情況下存取 Cloud Storage 或 BigQuery 時,正解是 Workload Identity——把 Kubernetes ServiceAccount 綁定到 Google ServiceAccount。不要選「把 JSON key 掛載成 Secret」或「直接用節點的預設 service account」,這兩種做法都被標記為反模式。 Source ↗

ACE 的常見 GKE 情境

  • 情境:你的應用程式在促銷期間流量暴增。
    • 解決方案:確保啟用了 HPA(擴展 Pod)和叢集自動擴展器 CA(擴展節點)。
  • 情境:你需要執行一個有狀態的資料庫。
    • 解決方案:使用 StatefulSets 而非 Deployments,並配合永久磁碟區聲明 (Persistent Volume Claims, PVC)。

常見問題 (FAQ)

問:Autopilot 模式下可以透過 SSH 進入節點嗎? 答:不行。Autopilot 鎖定了節點存取權,以確保安全與穩定。

問:Pod 和 Container 有什麼區別? 答:Container 是打包後的程式碼,Pod 是 Kubernetes 執行的最小單位,一個 Pod 可以包含一個或多個 Container(共享網路和儲存)。

問:什麼是區域叢集 (Regional Cluster)? 答:區域叢集會將控制平面和節點分佈在一個區域的三個可用區內,提供比可用區叢集 (Zonal Cluster) 更高的可用性。

你無法將 Zonal Cluster 就地升級為 Regional Cluster——這是 ACE 考試直接會測的點。如果情境要求 99.99% 控制平面可用性,正解永遠是「建立一個新的 Regional Cluster 並把工作負載遷移過去」,絕對不是「升級現有的 Zonal Cluster」。 Source ↗

問:我可以在 GKE 中執行 Windows 容器嗎? 答:可以,GKE 支援 Windows Server 節點池。

問:什麼是 kubectl 答:這是與 Kubernetes API 通訊的命令列工具,不限於 GKE,適用於所有 K8s 叢集。

ACE 總結清單

  • 理解 Autopilot 與 Standard 的權責劃分。
  • 知道 LoadBalancer 服務類型會觸發建立 GCP 負載平衡器。
  • 掌握 HPA, VPA, CA 三種縮放機制的用途。
  • 熟記 gcloud container clusters get-credentials 指令。
  • 理解節點升級期間的可用性保障。

官方資料來源

更多 ACE 主題