当前位置: 首页 > news >正文

k8s 蓝绿发布、滚动发布、灰度发布

在Kubernetes(k8s)中,蓝绿发布、滚动发布、灰度发布(金丝雀发布)是三种常见的应用部署和更新策略。下面将分别对这几种发布方式进行说明,并给出相应的例子。

蓝绿发布

 

蓝绿发布是一种无缝切换版本的部署策略。它通过在生产环境中同时运行两个相同版本的应用程序实例(蓝色环境和绿色环境),使得新版本的应用可以在不影响旧版本的情况下进行部署和测试。当新版本经过验证并准备好切换时,流量将被重定向到新环境(绿色),同时旧环境(蓝色)被移除或停止。

步骤

  1. 准备两个相同的环境:蓝色环境和绿色环境。这两个环境应该具有相同的配置和基础设施。
  2. 在蓝色环境中部署当前的应用程序版本。
  3. 在绿色环境中部署新的应用程序版本。
  4. 配置K8s Ingress以将部分流量路由到绿色环境,进行新版本测试。
  5. 如果新版本表现良好,逐步增加流量比例,直到将所有流量都切换到绿色环境。
  6. 移除或停止蓝色环境中的旧版本。

优点

  1. 易于设置:蓝绿发布策略相对简单,只需维护两个环境(蓝色和绿色),便于部署和切换。
  2. 流量完全受控:通过调整路由规则,可以轻松控制流量在新旧版本之间的切换,实现零停机时间更新。
  3. 降低风险:由于新版本在切换前已经过充分测试,因此可以降低生产环境出现问题的风险。

缺点

  1. 维护成本高:需要同时维护两个相同的环境,增加了资源消耗和维护成本。
  2. 回滚速度可能较慢:在出现问题时,虽然可以回滚到旧版本,但由于需要切换环境,回滚速度可能相对较慢。

滚动发布

 

滚动发布是按批次停止老版本实例,启动新版本实例的发布方式。这种方式可以节约资源,但部署和回滚速度较慢。

步骤

  1. 假设有一个包含3个副本的Deployment,当前版本为v1。
  2. 更新Deployment的版本为v2,并设置滚动更新策略。
  3. K8s将开始滚动更新,逐个替换v1版本的Pod为v2版本。
  4. 在滚动更新过程中,可以监控新版本的性能和稳定性。
  5. 如果出现问题,可以暂停滚动更新,回滚到旧版本。

优点

  1. 节约资源:滚动发布可以逐步替换旧版本实例,无需同时运行两个完整版本的应用,从而节约资源。
  2. 灵活性高:滚动发布过程中可以暂停、继续或回滚更新操作,提供了较高的灵活性。
  3. 用户体验好:由于更新是逐步进行的,对用户的影响较小,可以保持较高的可用性。

缺点

  1. 部署和回滚速度慢:滚动发布需要逐个替换实例,因此部署和回滚速度相对较慢。
  2. 复杂性高:滚动发布过程中需要监控新版本实例的性能和稳定性,增加了复杂性。

灰度发布(金丝雀发布)

 

灰度发布(又称金丝雀发布)是一种逐步将流量从旧版本迁移到新版本的发布方式。它通常先安排一小部分的用户流量去访问更新的Pod来进行测试,如果测试没问题后再扩大比例,直到全部更新完成为止。

步骤

  1. 创建一个包含旧版本应用的Deployment和Service。
  2. 更新Deployment的版本,并配置暂停Deployment,以便进行金丝雀测试。
  3. 将一小部分流量路由到新版本的Pod,观察其性能和稳定性。
  4. 如果新版本表现良好,逐步调整流量权重比例,使得流量慢慢从旧版本迁移至新版本。
  5. 在迁移过程中,可以根据设置的流量比例对新版本服务进行扩容,同时对旧版本服务进行缩容。
  6. 当所有流量都迁移到新版本后,删除旧版本的Deployment和Service。

金丝雀发布的特别说明

  • 金丝雀发布的思想是将少量的请求引流到新版本上,因此部署新版本服务只需极小数的机器。
  • 验证新版本符合预期后,逐步调整流量权重比例,使得流量慢慢从老版本迁移至新版本。
  • 在金丝雀发布中,将流量分流到新旧版本的这个过程被称为分阶段访问(Staged Access),也可以称为阶段性流量调度(Staged Traffic Shifting)。

优点

  1. 降低风险:通过逐步将流量切换到新版本应用,可以及时发现并修复潜在的问题,降低大规模故障的风险。
  2. 提高发布成功率:灰度发布允许在小范围内测试新版本,确保稳定后再全面推广,从而提高发布成功率。
  3. 用户体验影响小:由于只有部分用户会首先体验到新版本,因此对其他用户的影响较小。

缺点

  1. 自动化要求高:灰度发布需要自动化工具和流程来支持流量的逐步切换和监控。
  2. 发布期间需要人为操作:在某些情况下,灰度发布过程中可能需要人为干预和调整,增加了操作复杂度。
  3. 可能引发服务中断:如果新版本存在问题且未能及时发现,可能会引发服务中断或性能下降。

 

综上所述,蓝绿发布、滚动发布和灰度发布(金丝雀发布)各有优缺点,适用于不同的场景和需求。在实际应用中,应根据具体情况选择合适的发布策略。

相关文章:

k8s 蓝绿发布、滚动发布、灰度发布

在Kubernetes(k8s)中,蓝绿发布、滚动发布、灰度发布(金丝雀发布)是三种常见的应用部署和更新策略。下面将分别对这几种发布方式进行说明,并给出相应的例子。 蓝绿发布 蓝绿发布是一种无缝切换版本的部署策…...

UWB原理:AOA测角原理Angel of Arrival

AOA测角原理Angel of Arrival 准备工作: UWB默认使用channel=9,Frequency = 7987.2mMhz,约8GHz。 波长 天线RX1, RX2间距一般为20mm左右,假如发射端TX离2个RX距离2m=2000mm,大约是100倍天线间距。2个入射角可以近似相同。 测角原理: <...

plus.runtime.install在android10无效

在 Android 10 中&#xff0c;使用 plus.runtime.install 方法来进行动态安装应用或进行其他操作可能会失效。这是因为从 Android 10 开始&#xff0c;操作系统在安全性和隐私方面做了很多改进&#xff0c;特别是与应用安装相关的权限变更。 在 Android 10&#xff08;API 级别…...

7.C++中的函数

C中的函数 在 C 中&#xff0c;函数是一个重要的概念&#xff0c;它是将一段相对独立的、完成特定任务的代码封装起来的程序模块。以下是关于 C 中函数的详细介绍&#xff1a; 函数的定义 函数定义由函数头和函数体组成&#xff0c;其一般形式如下&#xff1a; 返回值类型 …...

上位机知识篇---Python数据图表可视化

文章目录 前言第一部分&#xff1a;Matplotlib1. 图形和轴&#xff08;Figure and Axes&#xff09;FigureAxes创建一个新的图形在图形中添加一个或多个轴 2. 绘图命令绘制折线图绘制散点图绘制条形图绘制饼图绘制直方图等高线图&#xff08;Contour plot&#xff09;&#xff…...

详解:TCP/IP五层(四层)协议模型

一.五层&#xff08;四层&#xff09;模型 1.概念 TCP/IP协议模型分为五层&#xff1a;物理层、数据链路层、网络层、传输层和应用层。这五层每一层都依赖于其下一层给它提供的网络去实现需求。 1&#xff09;物理层&#xff1a;这是最基本的一层&#xff0c;也是最接近硬件…...

【原生记忆能力 怎么让大模型拥有原生的记忆能力】

首先&#xff0c;需要明确“原生记忆能力”具体指的是什么。通常来说&#xff0c;大模型如GPT-3或GPT-4在生成回复时是基于训练数据的模式识别&#xff0c;而不是真正的记忆。所以用户可能希望模型能够持续记住之前的交互信息&#xff0c;或者在多次使用中积累知识&#xff0c;…...

百度APP iOS端磁盘优化实践(上)

01 概览 在APP的开发中&#xff0c;磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长&#xff0c;如何高效管理磁盘空间直接关系到用户体验和APP性能。本文将结合磁盘管理的实践经验&#xff0c;详细介绍iOS沙盒环境下的文件存储规范&#xff0c;探讨业务缓…...

qml Dialog详解

1、概述 Dialog是QML&#xff08;Qt Modeling Language&#xff09;中用于显示对话框的组件&#xff0c;它提供了一个模态窗口&#xff0c;通常用于与用户进行重要交互&#xff0c;如确认操作、输入信息或显示警告等。Dialog组件具有灵活的布局和样式选项&#xff0c;可以轻松…...

2025年的校招管理系统会全面实现智能化吗?

随着科技的不断进步&#xff0c;企业的招聘方式也在不断地演变。特别是在校园招聘领域&#xff0c;传统的招聘方法已经难以满足现代企业的需求。2025年的校招管理系统是否会全面实现智能化&#xff1f;这是一个值得探讨的话题。 想象一下&#xff0c;每年的校招季&#xff0c;…...

【Unity】使用Canvas Group改变UI的透明度

目录 一、前言二、Canvas Group三、结合DOTween达到画面淡进的效果 一、前言 在平时开发中&#xff0c;可以通过控制材质、Color改变UI透明度&#xff0c;除此之外还可以CanvasGroup组件来控制透明度。 二、Canvas Group 官方文档链接&#x1f449;&#x1f449; 点击进入 …...

2024年博客之星主题创作|2024年度感想与新技术Redis学习

Redis工具深入了解 1.引言与感想2.Redis工具了解2.分布式系统了解2.1单机架构2.2分布式是什么2.3应用服务和数据库服务分离2.4引入更多的应用服务器2.5理解负载均衡器2.6数据库读写分离2.7引入缓存2.8数据库分库分表2.9引入微服务2.10分布式系统小结 1.引言与感想 2024学习了很…...

6. 马科维茨资产组合模型+政策意图AI金融智能体(DeepSeek-V3)增强方案(理论+Python实战)

目录 0. 承前1. 幻方量化 & DeepSeek1.1 What is 幻方量化1.2 What is DeepSeek 2. 重写AI金融智能体函数3. 汇总代码4. 反思4.1 不足之处4.2 提升思路 5. 启后 0. 承前 本篇博文是对上一篇文章&#xff0c;链接: 5. 马科维茨资产组合模型政策意图AI金融智能体(Qwen-Max)增…...

Unity自学之旅05

Unity自学之旅05 Unity学习之旅⑤&#x1f4dd; AI基础与敌人行为&#x1f94a; AI导航理论知识&#xff08;基础&#xff09;开始实践 &#x1f383; 敌人游戏机制追踪玩家攻击玩家子弹碰撞完善游戏失败条件 &#x1f917; 总结归纳 Unity学习之旅⑤ &#x1f4dd; AI基础与敌…...

linux中关闭服务的开机自启动

引言 systemctl 是 Linux 系统中用于管理 systemd 服务的命令行工具。它可以用来启动、停止、重启服务&#xff0c;管理服务的开机自启动&#xff0c;以及查看服务的状态等。 什么是 systemd&#xff1f; systemd 是现代 Linux 发行版中默认的 初始化系统&#xff08;init sys…...

Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )

一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化&#xff1a; 文件是存储数据的一种非常基本且重要的方式。通过文件&#xff0c;我们可 以将程序运行时产生的数据永久保存下来&#xff0c;以便将来使用。 跨平台兼容性&#xff1a; 文件是一种通用…...

ubuntu黑屏问题解决

重启Ubuntu后&#xff0c;系统自动进入tty1&#xff0c;无法进入桌面。想到前几天安装了一些主题之类的&#xff0c;然后今天才重启&#xff0c;可能是这些主题造成冲突或者问题了把。 这里直接重新安装ubuntu-desktop解决&#xff1a; 更新源&#xff1a; sudo apt-get upd…...

Java如何实现反转义

Java如何实现反转义 前提 最近做的一个需求&#xff0c;是热搜词增加换一批的功能。功能做完自测后&#xff0c;交给了测试伙伴&#xff0c;但是测试第二天后就提了一个bug&#xff0c;出现了未知词 levis。第一眼看着像公司售卖的一个品牌-李维斯。然后再扒前人写的代码&…...

动态规划(路径问题)

62. 不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 动态规划思想第一步&#xff1a;描述状态~ dp[i][j]&#xff1a;表示走到i&#xff0c;j位置时&#xff0c;一共有多少种方法~ 动态规划思想第二步&#xff1a;状态转移方程~ 动态规划思想第三步&#xf…...

python http调用视觉模型moondream

目录 一、什么是moondream 二、资源地址 三、封装了http进行接口请求 四、代码解析 解释 可能的改进 一、什么是moondream Moondream 是一个针对视觉生成任务的深度学习模型,专注于图像理解和生成,包括图像标注(captioning)、问题回答(Visual Question Answering,…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...