在 Kubernetes 上实现零停机蓝绿部署的完整方案
从理论到实践,详解如何通过蓝绿部署实现真正的零停机发布。
什么是蓝绿部署
蓝绿部署是一种降低发布风险的策略。在任何时刻,只有一组环境(蓝色或绿色)处于活跃状态。当需要发布新版本时,我们先在非活跃环境上完成部署和测试,然后通过负载均衡器将流量切换到新环境。
Kubernetes 中的实现
1. 使用 Service Selector
yaml
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
slot: blue # 切换这个标签来改变流量
ports:
- port: 80
targetPort: 80802. 部署配置
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-blue
spec:
replicas: 3
selector:
matchLabels:
app: my-app
slot: blue
template:
metadata:
labels:
app: my-app
slot: blue
spec:
containers:
- name: my-app
image: my-app:1.0.0切换流程
- 部署新版本到绿色环境
- 在绿色环境运行冒烟测试
- 更新 Service selector 从蓝切换到绿
- 监控流量和错误率
- 保留蓝色环境作为回滚备选
总结
蓝绿部署是实现零停机发布的关键技术,配合 Kubernetes 的滚动更新特性,可以显著降低发布风险。