掌握 K8s 发布管理!小新 Day4 实战:模拟生产环境的发布流程
·
Kubernetes 发布管理实战:模拟生产环境发布流程
核心概念
在 Kubernetes 中,发布管理需保证服务零中断,常用策略:
- 蓝绿部署:$新版本(蓝色)$与$旧版本(绿色)$同时运行,流量切换瞬间完成
- 金丝雀发布:$流量比例控制$,逐步将用户导流到新版本
- 滚动更新:$Pod逐批替换$,默认策略但存在版本共存的过渡期
实战步骤:金丝雀发布模拟
1. 初始环境准备
# 创建v1版本部署
kubectl create deployment myapp --image=myapp:v1 --replicas=3
kubectl expose deployment myapp --port=80 --type=ClusterIP
2. 部署v2版本(金丝雀)
# canary-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-v2-canary
spec:
replicas: 1 # 初始仅1个副本
selector:
matchLabels:
app: myapp
version: v2
template:
metadata:
labels:
app: myapp
version: v2
spec:
containers:
- name: app
image: myapp:v2
readinessProbe:
httpGet:
path: /health
port: 80
3. 配置流量分割(Nginx Ingress示例)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "10" # 10%流量到v2
spec:
rules:
- http:
paths:
- path: /
backend:
service:
name: myapp
port:
number: 80
4. 监控关键指标
watch -n 2 "kubectl get pods -l app=myapp && \
kubectl get svc myapp && \
kubectl describe ingress myapp-ingress | grep 'Canary'"
监控重点:
- $错误率 < 0.5%$
- $P99延迟 < 200ms$
- $CPU使用率 < 70%$
5. 渐进式流量调整
# 分阶段调整流量权重
kubectl annotate ingress myapp-ingress \
nginx.ingress.kubernetes.io/canary-weight="25%" --overwrite
kubectl annotate ingress myapp-ingress \
nginx.ingress.kubernetes.io/canary-weight="50%" --overwrite
# 最终全量切换
kubectl scale deployment myapp-v2-canary --replicas=3
kubectl delete deployment myapp # 下线旧版本
生产环境最佳实践
-
自动回滚机制:
# deployment.yaml spec: strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 0 type: RollingUpdate -
健康检查强化:
livenessProbe: httpGet: path: /live port: 80 initialDelaySeconds: 5 periodSeconds: 3 readinessProbe: httpGet: path: /ready port: 80 initialDelaySeconds: 10 periodSeconds: 5 -
流量染色追踪:
# 通过Header区分版本 annotations: nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"
验证流程
- 使用测试工具模拟流量:
hey -z 5m -c 50 -H "X-Canary: true" http://myapp.example.com - 日志追踪:
kubectl logs -l version=v2 --tail=100 | grep "ERROR" - 最终验证:
curl -I http://myapp.example.com/version | grep "v2"
关键提示:生产发布需遵循$变更窗口期$,建议在低峰时段操作,并准备$回滚预案$。通过逐步流量切换,可将$故障影响半径$控制在最小范围。
更多推荐
所有评论(0)