## 13.5 实战练习 本章将通过一个具体的案例:部署一个 Nginx 网站,并为其配置 Service,来串联前面学到的知识。 开始前请先准备好可用的 Kubernetes 集群和 `kubectl` 上下文。你可以先完成 [14.3 Docker Desktop](../14_kubernetes_setup/14.3_docker-desktop.md) 或 [14.4 Kind](../14_kubernetes_setup/14.4_kind.md),并确认: ```bash kubectl get nodes ``` ### 13.5.1 目标 1. 部署一个 Nginx Deployment。 2. 创建一个 Service 暴露 Nginx。 3. 通过端口转发或 NodePort 访问服务。 ### 13.5.2 步骤 1:创建 Deployment 创建一个名为 `nginx-deployment.yaml` 的文件: ```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 ``` 应用配置: ```bash kubectl apply -f nginx-deployment.yaml ``` ### 13.5.3 步骤 2:创建 Service 创建一个名为 `nginx-service.yaml` 的文件: ```yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: NodePort # 使用 NodePort 方便本地测试 ``` 应用配置: ```bash kubectl apply -f nginx-service.yaml ``` 查看分配的端口: ```bash kubectl get svc nginx-service ``` 如果输出端口是 `80:30080/TCP`,你可以通过 `http://:30080` 访问 Nginx。Docker Desktop、Kind 等本地集群中,NodePort 到宿主机的可达性取决于集群实现;更稳定的本地访问方式是端口转发: ```bash 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`。 ```bash kubectl apply -f nginx-deployment.yaml ``` 观察更新过程: ```bash kubectl rollout status deployment/nginx-deployment ``` ### 13.5.5 步骤 4:清理资源 练习结束后,记得清理资源: ```bash kubectl delete -f nginx-service.yaml kubectl delete -f nginx-deployment.yaml ```