在 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: 8080

2. 部署配置

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

切换流程

  1. 部署新版本到绿色环境
  2. 在绿色环境运行冒烟测试
  3. 更新 Service selector 从蓝切换到绿
  4. 监控流量和错误率
  5. 保留蓝色环境作为回滚备选

总结

蓝绿部署是实现零停机发布的关键技术,配合 Kubernetes 的滚动更新特性,可以显著降低发布风险。