13.5 實戰練習

本章將透過一個具體的案例:部署一個 Nginx 網站,併為其設定 Service,來串聯前面學到的知識。

開始前請先準備好可用的 Kubernetes 叢集和 kubectl 上下文。你可以先完成 14.3 Docker Desktop14.4 Kind,並確認:

kubectl get nodes

13.5.1 目標

  1. 部署一個 Nginx Deployment。
  2. 建立一個 Service 暴露 Nginx。
  3. 透過連接埠轉發或 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
第 112 页,共 196 页
使用 mdPress 构建