当Kubernetes应用遇到阿里分批发布模式

对于熟悉Kubernetes的用户来说,应该知道当你的应用程序一旦部署到Kubernetes以后,Kubernetes能够自动帮你管理应用程序,当Pod发生故障后可以自动调度重建,确保服务的持续可用。但Kubernetes的原生发布策略难以满足生产级别的发布要求。 本文将介绍一种在阿里巴巴常用的应用发布模式:分批发布,以及在云效是如何在Kubernetes是如何实现这种发布模式的。

Kubernetes的滚动升级

Kubernetes的RollingUpdate(滚动更新)是Kubernetes提供的原生服务升级策略。意图通过该方式在不停止对外服务的前提下完成对应用的更新。

在原生RollUpdate中用户可以设置升级策略,如maxSurge和maxUnavailable控制Pod启动策略以及最大不可用Pod数,来确保可以Pod能够在滚动升级中不出现没有可用Pod的情况。

对于Kubernetes老手来说,肯定也会加上livenessProbe与readinessProbe探针,来确认服务是否可用。

但是,理想总是丰满,现实总是骨干。在现实的发布过程中,服务升级成功了镜像也启动成功了。 但是并不意味着你这次的“发布”完成了。

关注持续交付领域的朋友,可能会听过各种发布策略,比如蓝绿发布、灰度发布等等。 这些发布策略,寻根溯本,都是为了将部署与发布进行分离,在服务真正上线之前能够有人工介入的机会确保这次升级是是真正的满足业务需求的。

阿里巴巴分批发布模式

分批发布是在阿里巴巴内部大量使用的一种服务发布上线方式。分批发布简单来说就是按照一定的批次,每次只对服务的一部分实例进行升级。

分批发布一个很重要的动作就是暂停,在暂停后,用户可以手动对新升级的实例进行验证,如果确认一切无误后,再继续后批次服务实例的升级动作。

分批发布的重要的意义在于提供了人工或自动(无人值守发布)介入发布过程验证的功能,以及一旦发现问题快速回滚的能力。

在Kubernetes上实现分批发布

在Kubernetes的应用模型中,Pod和Pod之间一般不进行直接的通讯,所有内部应用之间的流量或者集群外部的流量都需要通过一个单独的Serviec对象。

在云效的部署模型中,我们将Service抽象为一个部署的目标应用。 在执行分批发布过程中,我们会自动为当前Service关联的Deployment对象创建一个新版本的副本。用户可以为整个分批发布过程中定义一个执行批次。

如下所示,在分批发布过程中,云效通过控制当前版本以及新版本Deployment对象的副本数,来控制不同版本Pod的实例数:

在第一批发布完成后,整个过程将会自动暂停。 此时,用户可以直接到集群中对部署结果进行验证,在验证无误的情况下确认是否继续后续的发布过程,而如果用户判断发布存在异常,则可以直接对整个发布过程进行回滚,应用自动回滚到发布前状态:

在整个分批发布过程中为了确保Service流量不会进行到启动中的Pod实例,结合使用LivenessProbe和ReadinessProbe可以确保整个发布过程中服务的持续可用。

使用Istio增强分批发布发布能力

在Kubernetes原生的Service负载均衡实现中,其通过iptable实现从ClusterIP到PodIP的流量路由,其中利用了iptables的--probability的特性来实现分流。

在上面的例子中,如果分批发布为2批,那么新版和旧版Pod会各有50%左右的流量进入。在基于原生Kubernetes的分批发布策略中可以通过增加应用的副本数(Replicas)来控制新版本和旧版本之间的流量比例。

而云效的分批发布策略对于已经使用Istio的用户,则可以轻松实现更精细化的流量控制规则。云效在发布过程中会自动为Deployment实例添加版本标签。

基于版本标签,Istio用户可以通过RouteRule轻松控制不同版本之间的流量比例或者是基于Cookie直接实现AB Test的能力。

当然,后续云效会直接将这部分能力集成到整个流水线过程中,让整个过程变的更加顺滑。

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一分钟搭建、运行、测试SSM项目

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

1 io口 stm32_从STM32分享各种硬件以及总线之GPIO简介

今天有网友私信我&#xff0c;问我怎么没有更新文章&#xff0c;我有点惭愧没有能够及时更新文章。因为都没有太多时间准备&#xff0c;所以更新的有点慢&#xff0c;但是我还是决定每天给大家分享一点知识。之前我们讲了STM32的时钟&#xff0c;讲完时钟之后我开始为大家讲一些…

亚太CDN年度盛典:阿里云姚伟斌发表《场景化的CDN技术》主题演讲

在11月14日的2018亚太CDN年度盛典上&#xff0c;阿里云资深技术专家姚伟斌&#xff08;文景&#xff09;发表了《场景化的CDN技术》主题演讲&#xff0c;他认为&#xff0c;当下的CDN&#xff0c;需要根据过去CDN的发展历程&#xff0c;更清晰地分析客户不同场景下的不同需求&a…

IBM在中国发布Cloud Paks,牵手神州数码,助力企业云转型步入“第二篇章”

2019年11月5日&#xff0c;北京盘古大观IBM大中华区总部&#xff0c;2501会议室。不到80平的会议室里挤了50多人&#xff0c;包括记者、分析师&#xff0c;以及来自IBM中国和神州数码的高管和专家—— 参会记者&#xff1a;通常是开会的地方越小&#xff0c;事儿越大…… 神州…

Vue 快速集成ElementUI

App.vue作为Vue项目的主窗口<router-view></router-view>让路由生效 main.js负责加载插件组件等 views&#xff1a;放页面 components&#xff1a;放组件 router&#xff1a;路由配置&#xff1a;相当于springmvc的视图解析器将url和组件进行关联Element UI 后台管…

双11个性化推荐背后,阿里云“舜天”如何应对百亿次挑战?

2018天猫双11在技术世界&#xff0c;创下不少新记录&#xff0c;其中有一个记录是11日当天阿里全平台共为用户做个性化推荐453亿次&#xff0c;这些推荐的图片长度加起来可以绕地球70圈。 当你在天猫/手淘上买买买的时&#xff0c;图片会以不同格式或分辨率来转码呈现&#xf…

重磅发布!阿里云推PostgreSQL 10 高可用版

2015年&#xff0c;阿里云宣布正式推出RDS for PostgreSQL服务,届时&#xff0c;阿里云成为国内首家同时支持MySQL、SQL Server 和PostgreSQL关系型数据库的云计算服务商。 用户在云上就能享受PostgreSQL引擎带来的对SQL标准和NoSQL的高度兼容、强大的处理复杂查询能力、以及丰…

axios专栏

axios 基于promise用于浏览器和node.js的http客户端 支持浏览器和node.js 支持promise 能拦截请求和响应 自动转换JSON数据 能转换请求和响应 数据 axios基础用法 get和 delete请求传递参数 通过传统的url 以 ? 的形式传递参数 restful形式传递参数 通过params 形式传递参数…

【双11】阿里云边缘节点ENS助力淘宝构建音视频通信网络

前言 淘宝在2016年推出直播平台&#xff0c;和娱乐直播性质不同&#xff0c;电商直播的主角多为网红店铺及网红达人&#xff0c;以直播带动产品售卖。在淘宝的双11流量加持之下&#xff0c;淘宝直播平台关注度持续攀升&#xff0c;通常的网红店主一场直播带来的收益不亚于一场…

护航Lazada双11购物节 阿里云CDN全球化火力全开

2018年11月12日零点——东南亚最大的电子商务公司Lazada 2018双11购物节正式收官。这是一场超过2000万的消费者在Lazada网站上及APP上浏览和疯狂抢购的盛会。 Lazada是东南亚最大B2C平台&#xff0c;业务范围覆盖印度尼西亚、马来西亚、菲律宾、新加坡、泰国和越南六个东南亚国…

AI行业真实现状:做芯片没工作,做视觉、语音血赚

最近&#xff0c;深圳前瞻产品研究院发布了《2019年人工智能行业现状和发展趋势报告》&#xff0c;笔者看过之后&#xff0c;感觉真是用了心&#xff0c;这不仅是一份数据报告&#xff0c;更像一本“扫盲手册”。众人皆知&#xff0c;AI血赚&#xff0c;当我们谈人工智能&#…

JSON数据从OSS迁移到MaxCompute最佳实践

本文为您介绍如何利用DataWorks数据集成将JSON数据从OSS迁移到MaxCompute&#xff0c;并使用MaxCompute内置字符串函数GET_JSON_OBJECT提取JSON信息。 数据上传OSS 将您的JSON文件重命名后缀为TXT文件&#xff0c;并上传到OSS。本文中使用的JSON文件示例如下。 {"store&…

在MaxCompute上分析IP来源的方法

淘宝IP库 淘宝IP地址库官网地址http://ip.taobao.com/&#xff0c;其查询接口[http://ip.taobao.com/service/getIpInfo.php?ip[ip地址字串]](http://ip.taobao.com/service/getIpInfo.php?ip[ip地址字串])&#xff0c;如下所示&#xff1a; 但是在MaxCompute中禁止使用http…

egg直接取req_Egg服务器基础功能

1. 框架约定目录规则1.1 app/router.js&#xff1a;用于配置URL路由规则&#xff1b;1.2 app/controller/** &#xff1a;用于解析用户的输入&#xff0c;处理后返回相应的结果&#xff1b;1.3 app/service/**&#xff1a; 用于编写业务逻辑层&#xff1b;1.4 app/public/**&am…

我和 Spring 大神的一天

先介绍一下故事的5位主人公。 Josh Long 龙之春&#xff1a; Spring 技术布道师&#xff0c;撰写过5部著作&#xff0c;录制过3部畅销的培训视频&#xff0c;是一位开源软件贡献者。 Spencer Gibb&#xff1a; Spring 技术布道师&#xff0c;Spring Cloud核心项目的联合创始人…

Android开发中解决自定义弹窗获取不到控件对象的问题

最近做期末作业的时候遇到一个功能需要在弹窗里修改账号密码&#xff0c;弹窗里面含有两个edittext控件&#xff0c;经过查阅资料我通过setView添加了一个view在弹窗里实现了&#xff0c;但是获取的控件对象一直为空导致我取不到输入的值&#xff0c;找了好久的错误原来获取对象…

是什么样的骚操作让应用上线节省90%的时间

优秀的程序员 总会想着 如何把花30分钟才能解决的问题 在5分钟内就解决完 例如在应用上线这件事上 通常的做法是 1. 构建项目 在本地用maven打包 每次需要clean一次&#xff0c;再build一次 2. 部署包 在本地ide、git/svn、maven/gradie 及代码仓库、镜像仓库和云平…

阿里程序员工作小技巧 | 理解CPU分支预测,提高代码效率

技术传播的价值&#xff0c;不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径&#xff0c;加速业务的上线速率&#xff0c;也会体现在优秀程序员在工作效率提升、产品性能优化和用户体验改善等小技巧方面的分享&#xff0c;以提高我们的工作能力。 从本期开始&am…