部署應用到 Kubernetes
課程概述
Kubernetes 最初是 Google 開源出來的,而 GKE(Google Kubernetes Engine)就是 Google Cloud 幫你全託管的 Kubernetes 服務。這堂課我們從建立叢集開始,一路把應用容器化、部署、再把服務暴露出去。

層級要分清楚:Container 裝在 Pod,Pod 排到 Node,Node 屬於 Node Pool,整體才是 Cluster。 Deployment 是維持副本數與版本的控制器,Service 則提供穩定入口;下方更新序列顯示新 Pod 必須先通過 Readiness,才逐步取代舊 Pod,否則 Rollback 回上一版。
你將學到
- 建立與配置 GKE 叢集
- 使用 kubectl 管理工作負載
- 建立 Deployment 與 Service
- 實作滾動更新與回滾
- 理解 Pod、Node、Cluster 的關係
核心概念
Kubernetes 核心元件
Cluster(叢集)
├── Control Plane(控制面)— API Server、Scheduler、etcd
└── Node Pool(節點池)
└── Node(節點)
└── Pod(容器組)
└── Container(容器)

kubectl 只把期望狀態送到 API Server;Controller 建立需要的 Pod,Scheduler 負責選 Node,真正讓 容器啟動的是該 Node 上的 kubelet。狀態持續回報,控制器才能反覆修正實際狀態。
常用 kubectl 指令
# 建立 GKE 叢集
gcloud container clusters create my-cluster \
--zone us-central1-a --num-nodes 3
# 取得叢集認證
gcloud container clusters get-credentials my-cluster --zone us-central1-a
# 部署應用
kubectl create deployment nginx --image=nginx:latest
# 暴露服務
kubectl expose deployment nginx --type=LoadBalancer --port=80
# 擴展副本數
kubectl scale deployment nginx --replicas=3
# 查看 Pod 狀態
kubectl get pods -o wide
# 滾動更新
kubectl set image deployment/nginx nginx=nginx:1.25
# 回滾
kubectl rollout undo deployment/nginx
%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 24, "rankSpacing": 32}}}%%
flowchart TD
SYMPTOM["先用 get pods/svc/endpointslices<br/>界定症狀與影響範圍"] --> STATE{"目前最明顯的症狀?"}
STATE -->|"Pod Pending"| PENDING["describe Pod 與 Events<br/>查資源、配額、Taint 與 Node"]
STATE -->|"CrashLoopBackOff"| CRASH["logs --previous + describe<br/>查命令、設定、Secret 與 OOM"]
STATE -->|"Running 但 NotReady"| READY["檢查 Readiness Probe<br/>路徑、Port 與依賴服務"]
STATE -->|"Service 沒有流量"| ROUTE["核對 Selector、EndpointSlice、<br/>port/targetPort 與 Load Balancer"]
流程圖暫時無法顯示,請重新整理頁面後再試。
Deployment YAML 範例
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: us-central1-docker.pkg.dev/PROJECT/repo/app:v1
ports:
- containerPort: 8080
resources:
requests:
cpu: '250m'
memory: '128Mi'

Label selector 找到候選 Pod,但 Readiness 才決定它能否進入 EndpointSlice 接收流量。滾動更新時 先等 v2 通過 Readiness,再讓 v1 退出,可避免把請求送到仍在啟動或已故障的容器。
實作重點
- GKE Autopilot 模式不用自己管節點,按 Pod 用掉的資源計費,剛入門很省事
- Standard 模式可以完整控制節點,比較進階的需求才用得到
- 建立叢集時挑對機器類型,大多數工作負載用 e2-medium 就夠了
- Pod 起不來時,用
kubectl describe pod來查問題出在哪
Skill Badge 指引
Lab 連結:Deploy to Kubernetes in Google Cloud — 完成此 lab 可獲得 Skill Badge
延伸學習
- 本系列下一課:管理 Kubernetes 叢集
- PCA 認證相關:運算服務選擇
Study Jam:雲端基礎實作 — 9/10 完成
查看系列全覽 →