首页 > 其他分享 >在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?

在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?

时间:2024-02-25 09:02:05浏览次数:24  
标签:金丝雀 流量 发布 灰度 版本 Deployment K8s

在Kubernetes (K8s) 中,可以通过不同的策略来实现金丝雀发布(灰度发布)和蓝绿发布。以下是两种发布方式在K8s中的基本实现方法:

金丝雀发布(灰度发布)

金丝雀发布是一种逐步将新版本应用推送给部分用户群体,以收集反馈并监控新版本表现的方式。在K8s中,可以通过以下步骤实现:

  1. 基于Deployment

    • 创建一个 Deployment 对象用于运行现有应用版本(稳定版本)。
    • 修改 Deployment 的副本集规格(replicas),增加一部分副本数,并指定新版本镜像。
    • 使用kubectl set image命令更新部分Pod至新版本,或者在Deployment YAML文件中定义多个版本的Pod模板并通过标签选择器(label selectors)及权重(weight)分配流量。

    另外,也可以结合K8s的Rollout特性,设置maxUnavailable参数来保证总是有一定数量的旧版本Pod在线,然后逐渐替换为新版本。

  2. 使用Istio或Envoy代理

    • 如果集群中部署了服务网格(如Istio),则可以通过配置VirtualService和DestinationRule来实现更精细的流量路由。
      • 在VirtualService中配置路由规则,将一小部分流量(例如10%)导向新版本的Pod。
      • 随着验证新版本的稳定性和性能,逐渐调整流量比例直至所有流量都流向新版本。
蓝绿发布

蓝绿发布是指同时运行两个独立的环境(例如“蓝”环境代表旧版本,“绿”环境代表新版本),在新版本验证无误后,一次性将所有流量切换到新版本。

  1. 独立的Deployment

    • 先创建一个Deployment运行当前的稳定版本(蓝)。
    • 新版本准备就绪后,创建另一个Deployment(绿),但此时并不向其发送流量。
    • 使用K8s Service或Ingress资源,初始时将所有流量指向“蓝”Deployment。
    • 测试“绿”Deployment,验证无误后,更改Service或Ingress的配置,将所有流量从“蓝”切换到“绿”。
    • 若新版本验证失败,可迅速将流量重新切换回“蓝”Deployment。
  2. 借助Kubernetes中的网络策略和服务发现机制

    • 通过改变Service的selector指向新版本的Pod标签,或者使用Ingress Controller提供的路由规则调整流量分配。
    • 当确定新版本正常工作后,停用旧版本的Deployment,释放其资源。

综上所述,金丝雀发布侧重于逐步且可控地将新版本引入生产环境,而蓝绿发布则是平行运行两个版本,通过快速切换整体流量的方式来完成发布。这两种方式都可以配合K8s的原生功能以及其他工具如Istio等实现复杂的流量管理和发布策略。

标签:金丝雀,流量,发布,灰度,版本,Deployment,K8s
From: https://www.cnblogs.com/huangjiabobk/p/18031921

相关文章

  • 推出新款H7-TOOL 2024版,同时发布新版固件V2.25(2024-02-24)
     H7-TOOL2024版介绍1、开模定制外壳,取消了侧面的IO接口,汇集到一个主端口(2*17P排针)。2、显示屏升级为2.8寸(分辨率320*240)。3、两个按键升级为4个按键:上键、下键,OK确认键和C取消键。4、预留一个电源开关按键,目前功能为HOME(返回初始界面)。5、新增4-20mA电流采集功能。6、......
  • 创纪录:英伟达市值一日增 2770 亿美元;Xiaomi 14 Ultra 正式发布丨 RTE 开发者日报 Vol.
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表......
  • Visual Studio 2022 .Net 8 启用AOT publish enabled 发布失败
    .Net8NativeAOT的优势: 我使用VisualStudio2022创建了一个面向.NET8的控制台应用程序。我在创建项目时选中了启用本机AOT发布选项。它给出了以下错误: 错误文本:发布遇到错误。发布遇到错误。我们无法确定错误的原因。检查输出日志以获取更多详细信息。诊断......
  • LiRank: LinkedIn在2月新发布的大规模在线排名模型
    LiRank是LinkedIn在2月份刚刚发布的论文,它结合了最先进的建模架构和优化技术,包括残差DCN、密集门控模块和Transformers。它引入了新的校准方法,并使用基于深度学习的探索/利用策略来优化模型,并且通过压缩技术,如量化和词表压缩,实现了高效部署。LinkedIn将其应用于Feed、职位推荐和......
  • Java Solon v2.7.0 发布
    JavaSolon是什么框架?Java"生态级"应用开发框架。从零开始构建,有自己的标准规范与开放生态。(历时七年,具备全球第二级别的生态规模)相对于Spring,有什么特点?启动快5~10倍。(更快)每秒并发数高2~3倍。(更高)初始内存节省1/3~1/2。(更省)打包缩小到1/2~1/10;比如,300Mb......
  • Apache DolphinScheduler 3.2.1 版本发布:增强功能与安全性的全面升级
    近期,ApacheDolphinScheduler社区激动地宣布3.2.1版本的发布。此次更新不仅着力解决了前一版本(3.2.0)中遗留的问题,而且引入了一系列的功能增强和优化措施。原先的问题主要源于部分重要代码在发布过程中未能成功合并(cherry-pick),加之这部分代码的合并过程较为复杂,因此,3.2.1版本......
  • 在k8S中,Jenkins发布详细流程是什么?
    在Kubernetes(k8S)中,使用Jenkins进行发布流程通常涉及以下步骤:环境准备:在Kubernetes集群中部署Jenkins服务,可以是通过HelmChart、Operator或直接创建Deployment等方式部署。如果需要,配置Jenkins的持久化存储以保存构建记录和数据。安装并配置与Kubernetes......
  • 多人协同开发场景,如何做到高效发布
    微服务架构下,每个应用服务独立开发、独立发布,小步快跑,持续快速交付业务需求。多人协同开发同一个应用时,分支开发模式是一个适合的协同方案。该模式下一个需求或任务通常对应一个feature分支,多个需求一起合并到release分支进行集成测试验证并发布。期间可能遇到以下问题:痛点......
  • 多人协同开发场景,如何做到高效发布
    微服务架构下,每个应用服务独立开发、独立发布,小步快跑,持续快速交付业务需求。多人协同开发同一个应用时,分支开发模式是一个适合的协同方案。该模式下一个需求或任务通常对应一个feature分支,多个需求一起合并到release分支进行集成测试验证并发布。期间可能遇到以下问题:痛点......
  • vite快速安装vue,及项目打包发布
    原文地址:https://mp.weixin.qq.com/s/xdEqyhfmW8P0R_wktymb3wvite快速安装vue,及项目打包发布1.下载、安装VScode,下载地址:https://code.visualstudio.com/2.下载、安装node.js,国内下载地址:http://www.nodejs.com.cn/3.创建空文件夹,用VScode打开,在左侧空白处点击鼠标右键,选择在......