首页 > 其他分享 >Argo Rollouts 基础

Argo Rollouts 基础

时间:2023-12-19 13:01:47浏览次数:32  
标签:Kubernetes ReplicaSet 部署 基础 Argo Rollout Rollouts

Argo Rollouts 概述

Argo Rollouts 是一个 Kubernetes 控制器和一组 CRD,为 Kubernetes 提供高级部署功能,例如蓝绿、金丝雀、金丝雀分析、experimentation和渐进式交付功能。
Argo Rollouts(可选)与Ingress Controller和服务网格集成,利用其流量治理功能在更新期间逐渐将流量转移到新版本。此外,Rollouts可以查询和解释来自指标多种指标系统,以验证关键 KPI 并在更新期间推动自动升级或回滚。

Argo Rollouts 功能

1. 蓝绿更新策略
2. 金丝雀更新策略
3. 细粒度、加权流量转移
4. 自动回滚和迁移
5. 可定制的业务KPI指标查询与分析
6. Ingress Controller集成:NGINX、ALB、Apache APISIX
7. 服务网格集成:Istio、Linkerd、SMI
8. 指标系统集成:Prometheus、Wavefront、Kayenta、Web、Kubernetes Jobs、Datadog、New Relic、Graphite、InfluxDB
...

Argo Rollouts 概念

Rollout

Rollout 是 Kubernetes 工作负载资源,相当于 Kubernetes Deployment 对象。它的目的是在需要更高级的部署或渐进式交付功能的情况下替换 Deployment 对象。Rollout 提供了 Kubernetes Deployment 无法提供的以下功能:
1. 蓝绿部署
2. 金丝雀部署
3. 与Ingress Controller和服务网格集成以实现高级流量路由
4. 与蓝绿和金丝雀分析的指标系统集成
5. 根据成功或失败的指标自动升级或回滚
6. 渐进式交付

渐进式交付

渐进式交付是以受控、渐进的方式发布产品更新的过程,从而降低发布风险,通常结合自动化和指标分析来驱动更新的自动升级或回滚。
渐进式交付通常被描述为持续交付的演变,将 CI/CD 中的速度优势扩展到部署过程。这是通过将新版本的曝光限制在一小部分用户、观察和分析正确行为,然后逐步增加对越来越广泛的受众的曝光,同时不断验证正确性来实现的。

Argo Rollouts 部署策略

滚动更新

RollingUpdate 会慢慢用新版本替换旧版本。随着新版本的出现,旧版本的规模会缩小,以维持应用程序的总体数量。这是 Deployment 对象的默认策略。

重新创建

重新创建部署会在启动新版本之前删除应用程序的旧版本。因此,这可以确保应用程序的两个版本永远不会同时运行,但在部署期间会出现停机。

Blue-Green

蓝绿部署(有时称为Red-Black)同时部署应用程序的新版本和旧版本。在此期间,只有旧版本的应用程序才会收到生产流量。这允许开发人员在将实时流量切换到新版本之前对新版本运行测试。

Argo Rollouts 基础_应用程序

Canary

金丝雀部署将一部分用户暴露给新版本的应用程序,同时将其余流量提供给旧版本。一旦新版本被验证正确,新版本就可以逐步替代旧版本。Ingress Controller和服务网格(例如 NGINX 和 Istio)可以为金丝雀提供比本地可用的更复杂的流量治理模式(例如,实现非常细粒度的流量分割,或基于 HTTP 标头的分割)。

Argo Rollouts 基础_应用程序_02

Argo Rollouts 架构

 

Argo Rollouts 基础_新版本_03

Argo Rollouts 架构组件

Argo Rollout主要由Argo Rollout Controller、Rollout CRD、ReplicaSet、Ingress/Service、AnalysisTemplate/AnalysisRun、Metric providers和CLI/GUI等组件构成

Argo Rollout Controller

这是监视集群事件的主控制器,并在 Rollout 类型的资源发生更改时做出反应。控制器将读取所有详细信息,并使集群达到定义中描述的相同状态。

Rollout resource

Rollout 资源是由 Argo Rollouts 引入和管理的自定义 Kubernetes 资源。它主要与原生 Kubernetes 部署资源兼容,但具有控制高级部署方法(例如金丝雀和蓝/绿部署)的阶段、阈值和方法的额外字段
并不会对Kubernetes Deployment施加任何影响,或要使用Rollout的功能,用户需要手动将资源从Deployment迁移至Rollout。

Replica sets for old and new version

这些是标准 Kubernetes ReplicaSet 资源的实例。 Argo Rollouts 在其上添加了一些额外的元数据,以便跟踪应用程序的不同版本。
另请注意,参与 Rollout 的副本集完全由控制器以自动方式管理。不应该使用外部工具篡改它们。

Ingress/Service

这是来自实时用户的流量进入集群并重定向到适当版本的机制。 Argo Rollouts 使用标准 Kubernetes 服务资源,但需要一些额外的元数据进行管理。
针对 Canary 部署,Argo Rollouts 支持多种服务网格和Ingress解决方案,用于按特定百分比分割流量,而不是基于 Pod 数量进行简单平衡,并且可以同时使用多个路由providers。

AnalysisTemplate and AnalysisRun

Analysis是将 Rollout 连接到Metric Provider并为某些指标定义特定阈值的功能,这些阈值将决定更新是否成功。对于每项分析,您可以定义一个或多个指标查询及其预期结果。如果指标查询良好,则rollout将自行进行;如果指标显示失败,则自动回滚;如果指标无法提供成功/失败的结果,则暂停推出。
为了执行Analysis,Argo Rollouts 提供两个自定义 Kubernetes 资源:AnalysisTemplate 和 AnalysisRun。
AnalysisTemplate 包含有关要查询哪些指标的说明。附加到 Rollout 的实际结果是 AnalysisRun 自定义资源。您可以在特定 Rollout 上定义 AnalysisTemplate,也可以在集群上全局定义 AnalysisTemplate,以供多个 Rollout 共享作为 ClusterAnalysisTemplate。 AnalysisRun 资源的范围仅限于特定的部署。

Metric providers

Argo Rollouts 包括多个流行指标系统的集成,可以在分析资源中使用这些指标系统来自动升级或回滚部署。

CLI 和 UI

可以使用Argo Rollouts CLI或集成 UI查看和管理 Rollouts。

Argo Rollouts 工作机制

与Deployment相似,Argo Rollouts控制器借助于ReplicaSet完成应用的创建、缩放和删除;这些 ReplicaSet 由 Rollout 资源内的 spec.template 字段定义,该字段使用与deployment对象相同的 pod 模板。
当spec.template发生变化时,会向Argo Rollouts控制器发出信号,表明将引入新的ReplicaSet。控制器将使用spec.strategy字段中设置的策略来确定从旧ReplicaSet到新ReplicaSet的部署将如何进行。一旦新的 ReplicaSet 被扩展(并且可以选择通过分析),控制器会将其标记为“stable”。
如果在从稳定的 ReplicaSet 过渡到新的 ReplicaSet 期间,spec.template 发生另一个更改(即,您在rollout过程中更改应用程序版本),则之前的新 ReplicaSet 将缩小,控制器将尝试继续反映更新后的spec.template字段的ReplicasSet。

参考文档

https://argoproj.github.io/argo-rollouts/



标签:Kubernetes,ReplicaSet,部署,基础,Argo,Rollout,Rollouts
From: https://blog.51cto.com/wangguishe/8886973

相关文章

  • (三十五)C#编程基础复习——C#预处理器指令
    预处理指定的作用主要是向编译器发出指令,以便在程序编译开始之前对信息进行一些预处理操作。在C#中,预处理器指令均以#开头,并且预处理器指令之前只能出现空格不能出现任何代码。另外,预处理器指令不是语句,因此它们不需要分好;结尾。在C#中,预处理指令用于帮助条件编译。不同于C和C++......
  • C++基础 -9- 函数的默认参数
     ———————函数的默认参数——————— ......
  • 【沁恒 CH58x 应用】BLE相关知识基础
    大纲:1.什么是ble,ble与传统蓝牙的区别,ble与蓝牙4.0的区别2.ble的基本概念:协议层(协议框架)、服务(Service)、特征(Characteristic)。什么是配对(pair)、通知(notify)。 介绍低功耗蓝牙1.什么是低功耗蓝牙?图1BLE介绍低功耗蓝牙,简称BLE,是蓝牙的一种省电变体。BLE的主要应......
  • java基础语法之二维数组1
    一:概述在前面的博文中,已经说明了一维数组相关的基础知识和案例,接下来就是对二维数组的介绍。首先介绍二维数组的相关基础介绍。二:具体说明二维数组:元素为一维数组的数组。<1>二维数组的定义格式数据类型[][]变量名; int[][]arr; 数据类型变量名[][]; intarr[][];数据类型[]......
  • Python基础知识
    一、先置知识1、标识符标识符由字母、数字、下划线组成。所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。标识符是区分大小写的。以下划线开头的标识符是有特殊意义的。以单下划线开头_foo的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用**......
  • 65道Go基础高频题整理(附答案背诵)
    说明一下Golang中make和new的区别?好的,关于make和new在Go语言中的区别,我来解释一下。new函数的作用:new(T)函数会为T类型的新项分配零值内存,并返回其地址,即一个*T类型的值(指针)。这种方法适用于各种类型,包括基本类型如int、float、bool等,以及数组、结构体等......
  • pandas基础
    pandas基础df:任意的PandasDataFrame对象s:任意的PandasSeries对象读写文件读取文件#读入文件filename=""url=""json_string=""pd.read_csv(filename); #从CSV文件导入数据pd.read_table(filename); #从限定分隔符的文本文件导入数据pd.read_ex......
  • (三十四)C#编程基础复习——C#命名空间(namespace)
    在C#中,可以将命名空间看做是一个范围,用来标注命名空间成员的归属,一个命名空间中类与另一个命名空间中同名的类互不冲突,但在同一个命名空间中类的名称必须是唯一的。举个简单的例子,在一个简单的C#程序中,假如我们要输出某些数据,就需要用System.Console.WriteLine(),其中System就是......
  • JavaWeb - Day09 - Mybatis - 基础操作、XML映射文件、动态SQL
    01.Mybatis-基础操作-环境准备需求需求说明:根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。通过分析以上的页面原型和需求,我们确定了功能列表:查询根据主键ID查询条件查询新增更新删除根据主键ID删除根据......
  • 通过 Sysbench 在低配置低数据基础上分别压测 MySQL 和 TiDB,实际结果 TiDB 出乎我的想
    作者:tidb菜鸟一只背景最近要上一个新项目,原来提供的是一个主从mysql数据库,两台16C64G的主机(还有个预发环境也是mysql主从,2个4C8G主机),感觉不是很靠谱,所以想要切换成tidb,所以对两边进行了压测(包括预发),两边磁盘都是垃圾机械盘,性能不说了,但是两边都垃圾,对比数据还是比较靠谱的。......