嘉宾 | 赵明山   整理 | 姚圣伟

出品 | CSDN云原生

随着K8s及云原生理念的普及,尤其是在持续部署流水线出现后,渐进式交付为互联网应用提供了基础设施和实现方法。

2022年7月27日,在由开放原子开源基金会主办的“2022开放原子全球开源峰会”上,阿里云技术专家、OpenKruise Maintainer主要贡献者赵明山(立衡)带来了《OpenKruise Rollout:灵活可插拔的渐进式发布框架》的主题演讲。

什么是渐进式发布

渐进式发布(Progressive Rollout)主要区别于全量/一次性发布,主要包括以下特点:

  • 增量式的发布过程,把一次发布分为多个批次,并且可以严格控制每个批次的启动和停止;

  • 实例与流量的双重维度的灰度,如金丝雀发布、A/B Testing发布、蓝绿发布;

  • 阶段性的可验证性,发布的每个批次都可以验证发布的正确性及是否符合预期;

  • 可暂停、可回滚、可继续、可自动化状态流转;

  • 主要应用于提供Service服务的应用,而Job类型一般没有需求。

以一次版本发布为例:Version X ->Version Y

假如线上是X版本,现在需要发布到Y版本。首先会划分发布批次(如第一批只发布10个实例),然后,灰度一定规则的流量到Y版本。如淘宝在进行重大发布变革时,会采用A/B Testing的方式,只将公司员工灰度到新版本,通过日志、监控、测试等方式进行验证,验证通过之后,重复上述过程,完成后续批次的发布。如果在这个过程中发现了任何异常,可以快速回滚到X版本。

渐进式发布与全量发布相比,它最大的优势在于:增加了很多阶段性的验证步骤,极大地提升交付的稳定性及效率。尤其对于大规模场景来说,渐进式发布是必要条件。

Kubernetes工作负载

在Kubernetes中,所有的Pod都是由工作负载来管理的,其中最常见的两个负载是Deployment和StatefulSet。

Deployment对于升级而言提供了maxUnavailable和maxSurge两个参数,但本质上来讲,Deployment只支持流式的一次性发布,用户并不能控制分批。

StatefulSet虽然支持分批,但跟我们想要的渐进式发布的能力还有较大距离。

OpenKruise工作负载

OpenKruise是阿里云开源的云原生应用自动化管理套件,也是当前托管在CNCF下的Sandbox项目。在原有的工作负载、Sidecar管理等领域外,OpenKruise目前正在渐进式交付领域进行尝试。

工作负载feature对比

CloneSet是OpenKruise针对无状态应用扩展的工作负载,与K8s原生组件Deployment相比,它增加了很多额外的能力,如支持PVC、指定扩容顺序、支持分批发布等。

工作负载 VS. 渐进式发布

渐进式发布与基础工作负载,在发布能力上是一种包含关系。除了基础的Pod发布外,还有流量发布与进度控制。

Rollout方案的设计理念

Argo Rollouts的设计理念

Argo Rollouts是一个Kubernetes控制器和一组CRD,包含渐进式发布能力的工作负载(类Deployment),为Kubernetes提供高级部署功能,例如蓝绿部署、金丝雀部署、金丝雀分析、实验和渐进式交付功能。Argo Rllouts适用于定制化能力较强、没有存量Deployment工作负载的公司业务。

优点:

  • 工作负载内置Rollout能力,配置简单;

  • 功能丰富,各种发布策略、流量灰度、Metrics分析。

缺点:

  • 不支持社区Deployment、StatefulSet(存量需要迁移);

  • 独立体系,与社区诸多方案存在Gap(需要定制化)。

Flagger的设计理念

Flagger是一个能使运行在K8s体系上的应用发布流程全自动(无人参与)的工具,它能减少发布的人为关注时间,并且在发布过程中能自动识别一些风险并回滚。

Flagger会创建一个Deployment Primary的工作负载,用户部署的工作负载为原数据,通过Copy Primary方式实现Rollout控制。Flagger适用于规模不大、基于社区方案部署、定制化较小的公司业务。

优点:

  • 支持原生Deployment API,功能丰富;

  • 兼容Helm、Argo-CD等社区方案。

缺点:

  • Rollout过程双倍Deployment资源消耗;

  • 自建容器服务平台需要额外对接(对K8s资源存在修改,如:名字-Primary)。

Kruise Rollouts的设计理念

百花齐放是云原生的一大特点,阿里云容器团队负责整个容器平台云原生架构的演进,在应用渐进式交付领域也有强烈的需求,因此在参考社区方案以及考虑阿里内部场景的基础上,我们在设计Rollout过程中有以下几个目标:

  • 非侵入性,支持原生Deployment API,不修改任何用户定义资源;

  • 可扩展性,支持Ingress、Gateway等多种资源;

  • 易用性,开箱即用,学习成本低,适用于Helm、Vela等多种部署方案。

Kruise Rollout工作机制与演进

Kruise Rollout API设计十分简单,可以分为四个部分。

  • objectRef:表明Kruise Rollout所作用的工作负载,如Deployment Name;

  • Strategy:定义Rollout发布的过程,如上图所示,是一个金丝雀发布的示例,第一批发布5%的实例,并且灰度5%流量到新版本,待人工确认后,再进行后续发布;

  • TrafficRouting:流量灰度所需要的资源Name,如Service、Ingress 或 Gateway API;

  • Status:展示Rollout的过程以及状态。

Kruise Rollout工作机制

首先,用户基于容器平台做一次版本发布(一次发布从本质上讲就是将K8s资源Apply到集群中)。

  • Kruise Rollout包含一个Webhook组件,它会拦截用户的发布请求,通过修改Workload Strategy的方式中止Workload控制器的工作;

  • 随后根据用户的Rollout定义,动态调整Workload参数;

  • 批次发布完成后,调整Ingress、Service配置,将特定的流量导入到新版本;

  • 最后,Kruise Rollout通过Prometheus中的业务指标判断发布是否正常。

支持Gateway API(verifying)

Kruise Rollout已经兼容Gateway API,而K8s集群目前使用最多的仍是Ingress。Ingress虽然协议简单,但会导致大量开源项目自定义Network资源的问题。

Gateway API是Network兴趣小组为了解决这个问题所提供的新的API,以替换Ingress。目前Istio、Nginx、Kong等诸多开源产品都实现了这套接口。

支持Deployment原地分批发布(design)

Deployment本身并不支持分批发布,如何做到支持Deployment原地分批发布呢?可以分为以下三个步骤:

  • 将Deployment的资源发布部署到K8s集群中,由Webhook拦截请求;

  • 由Kruise Rollout接管,根据修改的配置,调整升级策略,完成分批发布;

  • 在Kruise Rollout发布结束后,交还由K8s原生的控制器接管。

小结

随着K8s上面部署的应用日益增多,如何做到业务快速迭代与应用稳定性之间的平衡,是平台建设方必须要解决的问题。Kruise Rollout是OpenKruise在渐进式交付领域的新探索,旨在解决应用交付领域的流量调度以及分批部署问题。

Kruise Rollout目前已经正式发布v0.2.0版本,并且与社区OAM KubeVela项目进行了集成,Vela用户可以通过Addons快速部署与使用Rollout能力。此外,也希望社区用户能够加入进来,一起在应用交付领域做更多的扩展。

阿里云赵明山:详解灵活可插拔的渐进式发布框架OpenKruise Rollout相关推荐

  1. java对接阿里云短信服务详解(验证码,推广短信,通知短信)

    前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...

  2. 阿里云DDoS基础防护详解防护阈值黑洞时间详细说明

    阿里云DDoS基础防护是免费赠送给用户的,每台实例都可以免费试用DDoS基础防护,护云盾分享DDoS基础防护的详细说明,包括防护阈值.防护流量.安全信誉及黑洞时间等: DDoS基础防护详解 阿里云免费 ...

  3. [CentOS Python系列] 六.阿里云搭建Django网站详解

    本篇文章主要介绍讲述部署阿里云服务器Django网站环境,并通过IP地址访问网页的过程.写代码过程中往往第一步需要解决的就是配置开发环境,对于新手来说,这是非常头疼的事情,而当配置好之后或者对于老手来 ...

  4. 阿里云搭建JAVA环境详解(jdk+mysql+tomcat)

    网上的教程现在已经有很多了,我只是记录一下我自己搭建环境的过程 1.首先进入阿里云官网登录之后直接搜索"学生机",然后点击"云翼计划",我购买的是一个服务器EC ...

  5. 阿里云快速网站搭建详解

    一.网站建站流程 主要步骤: 要有一个域名 购买主机 要有数据库,一般购买主机赠送 解析域名 下载网站程序(演示用的WordPress) 上传程序 安装程序(配置数据库.网站基本信息.管理员信息等) ...

  6. Linux下配置yum源为阿里云或网易的详解

    一.yum源概述 yum需要一个yum库,也就是yum源.默认情况下,CentOS就有一个yum源.在/etc/yum.repos.d/目录下有一些默认的配置文件(可以将这些文件移到/opt下,或者直 ...

  7. 阿里云热修复sophix详解

    现在网上有几种常用的app热修复技术,个人感觉阿里云热修复操作比较简单,主要几个步骤,创建app---下载sdk---集成(AS和eclipse)---生成补丁---发布补丁(可以本地调试).下面详细 ...

  8. 阿里云96页报告详解《云上转型》(10个案例、10大趋势/完整版PPT)

    阿里云研究中心云上转型报告:第四次计算革命孕育"数字经济体" 纵观2000年的人类历史,计算与商业始终是一对互相促进的"孪生兄弟",创造出许许多多崭新的商业模式 ...

  9. 阿里云API网关配置详解

    首先讲一下使用API网关的原因: 我想很多公司都因API或开放API的安全性感到苦恼吧,大部分公司都会自己的API进行加密处理,或token验证,可这就能防范,其他人抓取接口进行非法操作了吗?答案是肯 ...

  10. 什么是同城冗余ZRS和本地冗余LRS?阿里云对象存储OSS详解

    阿里云对象存储OSS具有高可靠性,存储空间分为同城冗余ZRS和本地冗余LRS两种,阿里云百科来详细说下阿里云对象存储OSS冗余类型及同城冗余ZRS和本地冗余LRS的价格: 阿里云对象存储OSS 对象存 ...

最新文章

  1. 学习人必看!空军老兵自学编程,仅隔一年成为国土安全部的数据库分析师
  2. 华为首款搭载鸿蒙os 荣耀智慧屏,全球首款搭载鸿蒙OS终端! 荣耀智慧屏将在今天拉开面纱...
  3. java.lang.OutOfMemoryError---at java.lang.StringBuilder.append
  4. 苹果2019新款iPhone售价惊曝:咬牙仍坚持高价位?
  5. 152-Maximum Product Subarray
  6. 《超实用的HTML代码段》阅读笔记1——HTML5自动聚焦
  7. Flink CDC 系列 - 同步 MySQL 分库分表,构建 Iceberg 实时数据湖
  8. 自动驾驶的“天眼”!聊一聊高精地图领域中所有主流的制作方案
  9. 恩智浦智能车摄像头循迹部分
  10. yylabel html不显示图片,YYLabel富文本
  11. C# 身份证图片识别
  12. 中国电信CTWAP和CTNET已经融合
  13. oracle的系统字符集,Oracle操作系统和支持-字符集
  14. Subclass in C++ - C++ 中的子类
  15. mysql 安装版和解压版的区别_Mysql5.7解压版的安装和卸载及常见问题小结
  16. 文件已经删除,但是空间没有释放的异常
  17. MySQL基础--MySQL数据库基本操作
  18. 基于卷积神经网络的高光谱分类 CNN+高光谱+印度松数据集
  19. 【科普贴】SD卡接口协议详解
  20. 为您员工远程工作执行BYOD策略保驾护航

热门文章

  1. 多传感器信息融合及应用(何友等著)一至四章节读书笔记
  2. 细说卷积神经网络(CNN)中所谓的“感受野”(Receptive Field)
  3. 来soul,遇见你的奇妙缘分
  4. 基于WordPress搭建个人网站
  5. 什么是布控球,作用是什么?
  6. wei gwei ether之间的转换关系
  7. 专访 | 为什么中国还没有区块链科技巨头和顶级公链?
  8. 赛码输入输出java_(赛码编程)博弈问题
  9. 原标题:跆拳道在中国斗殴中被武术团灭?韩国人看后表示不服
  10. android_97_TouchSlop