跳至主要內容
Study Jam:雲端基礎實作 — 第 10/10 篇

管理 Kubernetes 叢集

內文字級

管理 Kubernetes 叢集
更新:2026-10-12

課程概述

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

Kubernetes 維運回饋迴路:指標、日誌與告警觀察服務;HPA 增減 Pod、VPA 調整單 Pod 資源、Cluster Autoscaler 增減節點;維護時依中斷預算汰換節點,Workload Identity Federation for GKE(原 Workload Identity)與 Namespace RBAC 隔離存取

流量變多時,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 權限控制

核心概念

三層自動擴展

層級機制觸發條件設定
PodHPACPU/記憶體超過閾值kubectl autoscale
PodVPA資源 request 不合適VerticalPodAutoscaler CRD
NodeCluster AutoscalerPod 無法排程--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 回饋迴路:Pods 的 CPU、Memory 或自訂指標經 Metrics Pipeline 送到 HPA,比較目前值與目標值後更新 Deployment 的 Desired Replicas,並以 Stabilization Window 避免頻繁縮減

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"]
同一個故障可能同時產生多層告警;先從使用者可感知的服務訊號定範圍,再下鑽 Pod 與 Node。每條處置路徑最後都要回到原告警與 SLO 驗證。

節點池管理

# 建立新節點池
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
GKE 節點池安全升級:在維護視窗先建立 Surge Node,再 Cordon 舊節點、Drain Pod 並經 PDB 檢查,Pod 重新排程且 Readiness 通過後才移除舊 Node

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

延伸學習

Study Jam:雲端基礎實作 — 第 10 篇/共 10 篇 查看系列全覽 →

讀完後,留一個學習紀錄

試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。

文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。

留言討論

文章目錄與系列

徽章解鎖!