确保满足以下环境条件,否则无法完成后续操作
依次执行以下命令,无报错即通过
```bash 验证kubectl版本与集群版本兼容性 kubectl version --client --output=yaml kubectl version --server --output=yaml 验证集群节点状态 kubectl get nodes 验证本地镜像拉取能力 docker pull nginx:1.24.0 docker pull nginx:1.25.3 ```创建两个Deployment,分别对应蓝环境(nginx-blue,初始版本1.24.0)和绿环境(nginx-green,升级版本1.25.3),通过不同的标签区分
以下为完整可复制内容
```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-blue namespace: default spec: replicas: 3 selector: matchLabels: app: nginx version: blue template: metadata: labels: app: nginx version: blue spec: containers: - name: nginx image: nginx:1.24.0 ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "200m" memory: "256Mi" ```以下为完整可复制内容
```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-green namespace: default spec: replicas: 3 selector: matchLabels: app: nginx version: green template: metadata: labels: app: nginx version: green spec: containers: - name: nginx image: nginx:1.25.3 ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "200m" memory: "256Mi" ```新建nginx-service.yaml,初始selector指向蓝环境
```yaml apiVersion: v1 kind: Service metadata: name: nginx-service namespace: default spec: type: NodePort selector: app: nginx version: blue ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30080 ```必须确保所有Pod状态为Running且READY列显示3/3(对应每个Deployment的3副本)
```bash 实时查看Pod状态 kubectl get pods -w -l app=nginx ```获取集群任意节点IP(以192.168.1.100为例),用curl或浏览器访问
```bash 替换为你的集群节点IP curl -H "Host: test.nginx.com" http://192.168.1.100:30080/ ```正常返回Nginx 1.24.0默认页面或对应的响应头即可

执行以下命令快速替换,也可直接编辑nginx-service.yaml后apply
```bash kubectl patch service nginx-service -p '{"spec":{"selector":{"version":"green"}}}' ```正常情况下所有响应的Server字段应为nginx/1.25.3
若绿环境出现问题,执行以下命令快速切回蓝环境
```bash kubectl patch service nginx-service -p '{"spec":{"selector":{"version":"blue"}}}' ```执行切换后的连续curl命令,确认所有请求返回nginx/1.24.0
NodePort仅适用于测试,生产环境推荐安装Nginx Ingress Controller后使用Ingress规则切换流量,安装命令如下
```bash kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.4/deploy/static/provider/cloud/deploy.yaml ```新建Ingress资源nginx-ingress.yaml,通过annotations和hostname区分初始流量,切换时修改path的backend
```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress namespace: default annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx rules: - host: test.nginx.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: number: 80 ```若不需要完全隔离的环境,可通过调整两个Deployment的副本数实现50%、10%等比例的流量切换
```bash 调整蓝环境副本为2,绿环境为1,实现1/3流量到绿环境 kubectl scale deployment nginx-blue --replicas=2 kubectl scale deployment nginx-green --replicas=1 ```生产环境切换后不要立即删除旧环境,观察应用日志、监控指标无异常后再操作
```bash 观察应用日志(绿环境) kubectl logs -f deployment/nginx-green 若部署了Prometheus+Grafana,可查看访问量、响应时间等指标 ```确认无误后执行
```bash kubectl delete deployment nginx-blue ```易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图