管理 Kubernetes 叢集
課程概述
網站部署成功後,流量突然增加、Pod 一直重啟,或節點該升級了,該先看哪裡?這篇從這些日常狀況出發,整理 GKE 的監控、日誌、自動擴展和節點池管理。官方課程的 Lab 則是用 kubectl 管理 Deployment(滾動更新、金絲雀與藍綠部署)、用 Cloud Logging 和 Cloud Monitoring 替 GKE 上的應用除錯,以及用 Managed Service for Prometheus 收集指標;HPA、節點池與維護視窗不在這些 Lab 的步驟裡,是本文另外補充的。

流量變多時,HPA 可以增加 Pod;單一 Pod 的資源需求不合適,可以評估 VPA;Pod 排不下時, Cluster Autoscaler 才會增加節點。升級節點前還要確認維護視窗和 PodDisruptionBudget,避免一次中斷太多副本。存取權限則分別由 Workload Identity Federation for GKE 和 RBAC 管理。
你將學到
- 使用 Cloud Monitoring 監控 GKE 叢集與工作負載
- 使用 Cloud Logging 收集與查詢容器日誌
- 配置 Horizontal Pod Autoscaler(HPA)與 Cluster Autoscaler
- 管理節點池升級與維護視窗
- 實作 Kubernetes RBAC 權限控制
核心概念
三層自動擴展
| 層級 | 機制 | 觸發條件 | 設定 |
|---|---|---|---|
| Pod | HPA | CPU/記憶體超過閾值 | kubectl autoscale |
| Pod | VPA | 資源 request 不合適 | VerticalPodAutoscaler CRD |
| Node | Cluster Autoscaler | Pod 無法排程 | --enable-autoscaling |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
# 啟用 HPA(CPU 達 70% 時擴展,2-10 個 Pod)
# --cpu 是 kubectl 1.34 起的寫法;舊版 kubectl 改用 --cpu-percent=70(已開始棄用但仍可使用)
kubectl autoscale deployment web-app --cpu=70% --min=2 --max=10
# 啟用 Cluster Autoscaler
gcloud container clusters update my-cluster \
--enable-autoscaling --min-nodes=1 --max-nodes=10 \
--zone us-central1-a

HPA 會根據指標調整 Deployment 的 Pod 數。負載剛下降時,不會立刻把 Pod 全收掉,以免流量一波動就反覆擴縮。HPA 只管 Pod;如果節點已經放不下新 Pod,還得靠 Cluster Autoscaler。
Cloud Monitoring for GKE
GKE 跟 Cloud Monitoring 是整合好的,可以分好幾層來看:
- Infrastructure:節點 CPU、記憶體、磁碟使用率
- Workloads:Pod 重啟次數、容器資源使用
- Services:請求延遲、錯誤率、吞吐量
可以從這幾類告警開始(門檻是示意值,請依服務調整;GKE 的 Observability 分頁也能直接建立官方建議的告警政策):
- Pod 重啟次數 > 5 次/小時
- 節點 CPU 使用率 > 85%
- Pod 處於非 Ready 狀態超過 5 分鐘
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 24, "rankSpacing": 32}}}%%
flowchart TD
ALERT["告警觸發:先確認時間窗、<br/>影響比例與最近變更"] --> SCOPE{"訊號主要落在哪一層?"}
SCOPE -->|"Service"| SERVICE["看延遲、錯誤率與流量<br/>對照部署、Trace 與依賴服務"]
SCOPE -->|"Pod"| POD["看 Restart、NotReady、Events<br/>與 Logs,檢查 Probe 和 Requests"]
SCOPE -->|"Node"| NODE["看 Pressure、Unschedulable、<br/>Allocatable 與 Autoscaler"]
SERVICE --> SERVICE_ACTION["回滾版本或修復依賴<br/>再以服務 SLO 驗證"]
POD --> POD_ACTION["修正 Image、Config 或資源<br/>再驗證 Readiness"]
NODE --> NODE_ACTION["擴容、修復或升級 Node Pool<br/>並遵守 PDB"] 節點池管理
# 建立新節點池
gcloud container node-pools create high-mem-pool \
--cluster=my-cluster --machine-type=n2-highmem-4 --num-nodes=2 \
--zone us-central1-a
# 設定維護視窗(每週日 02:00–06:00 UTC,等於台灣時間週日 10:00–14:00)
# 星期幾一律以 UTC 計;想排在台灣時間週日凌晨 2–6 點,要改成週六 18:00–22:00 UTC、BYDAY=SA
gcloud container clusters update my-cluster \
--maintenance-window-start=2026-01-01T02:00:00Z \
--maintenance-window-end=2026-01-01T06:00:00Z \
--maintenance-window-recurrence="FREQ=WEEKLY;BYDAY=SU" \
--zone us-central1-a

Surge Upgrade 先增加容量,再逐台 Cordon 與 Drain;PDB 若判斷驅逐會超出可用性預算,就暫停等待,但 GKE 最多等一小時,逾時會強制驅逐。替代 Pod 到新 Node 並通過 Readiness 後,舊 Node 才能安全移除。
實作重點
- 開啟 Workload Identity Federation for GKE 取代 service account key,更安全
- 使用 namespaces 隔離不同團隊或環境的工作負載
- GKE 預設會自動升級控制層與節點,用維護視窗控制升級時機;想提前升級時再手動執行
gcloud container clusters upgrade - 設定 PodDisruptionBudget 降低升級時的中斷;GKE 排空節點時最多遵守 PDB 一小時,逾時剩下的 Pod 仍會被強制驅逐
Skill Badge 指引
Lab 連結:Manage Kubernetes in Google Cloud — 完成此 lab 可獲得 Skill Badge
延伸學習
- PCA 認證相關:運算與儲存配置
- PCA 認證相關:可觀測性與 SRE
- 回到起點:GCP 運算服務基礎
讀完後,留一個學習紀錄
試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。
文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。