Back to Docker Practice

13.5 Practice

13_kubernetes_concepts/13.5_practice.md

1.11.02.4 KB
Original Source

13.5 实战练习

本章将通过一个具体的案例:部署一个 Nginx 网站,并为其配置 Service,来串联前面学到的知识。

开始前请先准备好可用的 Kubernetes 集群和 kubectl 上下文。你可以先完成 14.3 Docker Desktop14.4 Kind,并确认:

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://<NodeIP>: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