随笔 - 296  文章 - 0  评论 - 5  阅读 - 3751

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   Leo-Yide  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示