K8S实现发布和回滚三种方案对比

蓝绿部署、灰度发布、金丝雀发布和 A/B 测试的 K8S 实现方案

1. 蓝绿部署

  • 特点:蓝绿部署的核心思想是同时部署两个版本的应用(蓝环境和绿环境),但在某一时刻只有一个环境对外提供服务,另一环境处于待命状态,准备随时切换。
  • 缺点:一套环境空跑,资源浪费。

K8S实现蓝绿发布方案

  1. 基于控制器创建蓝版本的应用。
  2. 为蓝版本的 Pod 创建 Service(xiuxian-svc)。
  3. 基于控制器创建绿版本的应用。
  4. 修改 Service 的标签选择器指向绿版本。

部署步骤

  1. 部署蓝版本应用

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: xiuxian-blue
    spec:
      replicas: 3
      selector:
        apps: xiuxian
      template:
        metadata:
          labels:
            apps: xiuxian
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
            name: xiuxian
    
  2. 访问测试
    使用以下命令测试蓝版本的 Service:

    kubectl get svc
    while true; do curl 10.200.138.186; sleep 0.5; done
    
  3. 部署绿版本
    创建绿版本的配置:

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: xiuxian-green
    spec:
      replicas: 3
      selector:
        apps: green
      template:
        metadata:
          labels:
            apps: green
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
            name: xiuxian
    
  4. 切换版本
    修改 xiuxian-svc 的选择器指向 green 版本:

    apiVersion: v1
    kind: Service
    metadata:
      name: xiuxian-svc
    spec:
      type: ClusterIP
      selector:
        apps: green
      ports:
      - port: 80
        targetPort: 80
    
  5. 删除测试环境
    使用以下命令删除创建的应用:

    kubectl delete -f .
    

2. 灰度发布 | 金丝雀发布

  • 特点:灰度发布是逐步替换旧版本,不会一次性全量替换,而是逐步升级一部分应用进行测试,最终完成替换。
  • 缺点:无法细粒度控制更新范围。

K8S实现灰度发布方案

  1. 部署旧版本:创建并设置副本数为 3。
  2. 创建 Service:将 xiuxian-svc 与旧版本关联。
  3. 部署新版本:创建并设置副本数为 1。
  4. 更新副本数:逐步将旧版本副本数减少,增加新版本副本数。

部署步骤

  1. 部署旧版本

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: xiuxian-old
    spec:
      replicas: 3
      selector:
        apps: v1
      template:
        metadata:
          labels:
            apps: v1
            school: oldboyedu
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
            name: xiuxian
    
  2. 部署新版本

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: xiuxian-new
    spec:
      replicas: 1
      selector:
        apps: v2
      template:
        metadata:
          labels:
            apps: v2
            school: oldboyedu
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
            name: xiuxian
    
  3. 逐步替换旧版本
    修改副本数,逐步减少旧版本副本数并增加新版本副本数:

    kubectl edit rc xiuxian-old # 修改旧版本副本数
    kubectl edit rc xiuxian-new # 修改新版本副本数
    
  4. 观察 Pod 访问情况
    在这一过程中,新版本和旧版本会共存,逐步替换。

3. A/B 测试

  • 特点:A/B 测试允许一部分用户访问新版本,主要用于测试不同版本的效果。
  • 缺点:需要额外的组件支持,例如 Istio 插件来进行流量分配和管理。

K8S实现 A/B 测试
使用 Istio 或其他流量管理工具,可以根据不同的请求路径或其他条件将流量分发到不同版本的应用。


posted on 2025-01-18 20:09  Leo_Yide  阅读(108)  评论(0)    收藏  举报