Kubernetes K8s 入門完整教學:從 Pod 到部署微服務應用的完整指南
為什麼要學 Kubernetes?
如果你已經會 Docker,你可能會問:我已經能用 Docker Compose 管理多容器應用了,為什麼還需要 Kubernetes?
答案是:Docker Compose 很適合開發環境和小規模部署,但當你的服務需要處理每天百萬次請求、你需要零停機更新、你需要自動擴縮容,Docker Compose 就力不從心了。
Kubernetes 解決的問題:自動重啟崩潰的容器、流量增加時自動增加副本、更新服務時逐步替換,老版本崩了自動回滾、跨多台機器管理容器。在深入 K8s 之前,建議先確認你熟悉 Docker 基礎和容器化概念,可以參考Docker Compose 多容器部署教學。
K8s 核心概念白話解釋
K8s 概念很多,但理解幾個關鍵物件就能理解大部分操作:
Pod
Pod 是 K8s 最小的部署單位。你可以把它想成一個「宿舍」,裡面住了一個或多個容器,它們共享網路和儲存空間。大多數情況下一個 Pod 只有一個容器(主容器),有時候會加一個 sidecar 容器做輔助工作(如日誌收集)。
Deployment
Deployment 管理一組相同的 Pod(稱為 ReplicaSet)。你告訴 Deployment「我要 3 個副本」,它就確保任何時候都有 3 個 Pod 在跑。某個 Pod 掛掉,Deployment 自動重建一個。
Service
Pod 的 IP 位址會變動,Service 提供穩定的內部 DNS 名稱和負載均衡。你的前端 Pod 連到 backend-service,K8s 自動把流量分配到後端的任一 Pod。
Namespace
用來隔離不同環境或不同專案的資源,像是 dev、staging、production 可以各自在不同 Namespace 裡。
安裝本地環境
學習 K8s 最簡單的方式是在本地跑一個單節點叢集:
# 安裝 minikube(本地 K8s 叢集)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 啟動叢集
minikube start
# 確認狀態
kubectl cluster-info
kubectl get nodesWindows 用戶可以用 Docker Desktop 內建的 Kubernetes 功能,或安裝 minikube。
部署你的第一個應用
讓我們部署一個簡單的 nginx 網頁伺服器:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: NodePort# 套用設定
kubectl apply -f deployment.yaml
# 確認 Pod 都在跑
kubectl get pods
# 確認 Service
kubectl get services
# 在 minikube 開啟瀏覽器
minikube service nginx-service部署微服務應用
實際專案通常有多個服務。以一個包含 API 服務和 PostgreSQL 資料庫的應用為例:
# postgres-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:16
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-secret
key: password
---
apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
selector:
app: postgres
ports:
- port: 5432注意:資料庫密碼用 Secret 而不是直接寫在 YAML 裡。建立 Secret:
kubectl create secret generic postgres-secret \
--from-literal=password=your_password_here自動擴縮容
K8s 最強大的功能之一是 HPA(Horizontal Pod Autoscaler),根據 CPU 或記憶體使用率自動增減 Pod:
# 當 CPU 超過 50%,自動擴展到最多 10 個副本
kubectl autoscale deployment nginx-deployment \
--min=2 --max=10 --cpu-percent=50
# 查看擴縮容狀態
kubectl get hpakubectl 常用指令速查
# 查看資源
kubectl get pods
kubectl get deployments
kubectl get services
kubectl get all # 查看所有
# 查看詳細資訊
kubectl describe pod [pod-name]
kubectl logs [pod-name]
kubectl logs -f [pod-name] # 即時日誌
# 進入容器
kubectl exec -it [pod-name] -- /bin/bash
# 套用/刪除設定
kubectl apply -f [file.yaml]
kubectl delete -f [file.yaml]
# 更新 Deployment 的映像
kubectl set image deployment/[name] [container]=[new-image]K8s 的學習曲線確實比較陡,但一旦掌握了核心概念,後續的叢集管理、監控、CI/CD 整合都會水到渠成。搭配我們的微服務架構入門教學一起學習,可以更好地理解 K8s 在整個架構中的角色。
繼續閱讀
Nginx 反向代理設定教學:從零開始搞懂負載均衡
完整的 Nginx 反向代理與負載均衡設定教學,從基礎安裝到 upstream 配置、健康檢查、SSL 終止一次搞定。附上實用的 nginx.conf 範例和常見踩坑解法。
相關文章
你可能也喜歡
探索其他領域的精選好文