13.5 實戰練習
本章將透過一個具體的案例:部署一個 Nginx 網站,併為其設定 Service,來串聯前面學到的知識。
開始前請先準備好可用的 Kubernetes 叢集和 kubectl 上下文。你可以先完成 14.3 Docker Desktop 或 14.4 Kind,並確認:
kubectl get nodes
13.5.1 目標
- 部署一個 Nginx Deployment。
- 建立一個 Service 暴露 Nginx。
- 透過連接埠轉發或 NodePort 訪問服務。
13.5.2 步驟 1:建立 Deployment
建立一個名為 nginx-deployment.yaml 的檔案:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.28
ports:
- containerPort: 80
應用設定:
kubectl apply -f nginx-deployment.yaml
13.5.3 步驟 2:建立 Service
建立一個名為 nginx-service.yaml 的檔案:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort # 使用 NodePort 方便本地測試
應用設定:
kubectl apply -f nginx-service.yaml
檢視分配的連接埠:
kubectl get svc nginx-service
如果輸出連接埠是 80:30080/TCP,你可以透過 http://<NodeIP>:30080 訪問 Nginx。Docker Desktop、Kind 等本地叢集中,NodePort 到宿主機的可達性取決於叢集實現;更穩定的本地訪問方式是連接埠轉發:
kubectl port-forward svc/nginx-service 8080:80
然後訪問 http://localhost:8080。
Ingress 只有在叢集中已安裝 Ingress controller 且設定了 IngressClass 時才會生效。當前練習只覆蓋 Service;Ingress/Gateway API 建議在完成第 14 章後再單獨練習。
13.5.4 步驟 3:模擬捲動更新
修改 nginx-deployment.yaml,將映象版本改為 nginx:1.28-alpine。
kubectl apply -f nginx-deployment.yaml
觀察更新過程:
kubectl rollout status deployment/nginx-deployment
13.5.5 步驟 4:清理資源
練習結束後,記得清理資源:
kubectl delete -f nginx-service.yaml
kubectl delete -f nginx-deployment.yaml