阿里云云效技术专家:一文详解kubernetes下5种常见发布模式如何选择

简介: Kubernetes下5场场景应用发布方式的选择,每种发布模式适合什么样的场景,以及如何在阿里云云效上高效落地。

作者:郑云龙,阿里云云效技术专家

Kubernetes面向通用场景提供了非常灵活的应用管理和运维方式,而作为云效CI/CD平台的开发同学,在日常和用户交流过程中,我们经常会被用户问到关于发布的问题,比如不同职能团队之间应该如何配合、发布的最佳实践应该是什么样子的等等。

今天我们就来聊聊Kubernetes下应用发布方式的选择,每种发布模式适合什么样的场景,以及如何在云效上高效落地。

Kubernetes应用

首先我们来看看一般情况下Kubernetes是如何管理应用的。 Kubernetes通过声明式的API,并提供了一系列的资源来满足各种各样的应用运维场景:

• 从应用的角度我们会关注应用容器(Pod),应用配置(ConfigMap/Secret),应用需要持久化的信息(Volume),应用与应用之间的服务发现(Service),以及如何将应用服务暴露给集群外的用户(Ingress)等。

• 从集群运维的角度看,由于应用运行在集群中我们需要控制应用在集群中的权限(ServiceAccount/ClusterRole/Role)使得应用能够以最小所需权限原则在集群中运行,同时运维要管理和配置集群的存储资源(PV/PVC),同时对于资源有限的情况我们还需要管理和控制应用本身的资源暂用以及配额(quata)等等等。

1.png

而在实际场景中由于应用使用的框架(Doubbo/Spring Cloud)的不同,应用对外提供的服务场景不同(后端或者前端),不同的应用可能只需要关注其中的一小部分资源
比如当你采用了像Spring Cloud或者Doubbo这类自带了服务发现的应用开发框架,你可能并不关心Kubernetes所提供的服务发现能力(Service),只需要通过Deployment来部署和管理这些应用实例。 又比如说如果你采用了单独的配置管理中心,那ConfigMap/Secret这些可能也不会出现在你的Kubernetes资源清单中。
又比如说,如果是一个面向用户前端应用,在应用部署是除了Deployment实例以外,你还要关系如何将这个服务暴露给外部用户,这是就需要相应的Ingress以及Service的资源来描述。

同时在单个应用在整个系统中所处的位置不同又会导致我们对于发布的验证方式也会产生差异,比如一个后端微服务的发布,我们可能只需要确保发布过程系统不中断即可,而对于前端应用我们可能希望发布能够现在一小部分用户上进行验证,在线上流量充分测试后,再完成整个版本升级。

如上所示,对于应用而言采用的技术架构不同,提供的服务的方式不同,对发布验证方式要求的不同都会导致Kubernetes的使用上产生各种各样的差异,而云效为了能够支持这些不同的差异提供了多种多样的发布模式,接下来我们就来看看云效下常用的这些发布模式,以及他们所适用的场景。

Kubernetes发布模式

最原生:YAML发布

顾名思义,这是我们在使用Kubernetes时最直接的应用部署方式,而在持续交付流水线中我们一般将这些用于描述Kubernetes资源的YAML文件通过Git进行统一版本管理,通过云效CI/CD平台监听代码库的变更事件,并通过流水线将这些YAML变更同步到集群当中。这种方式也被称为GitOps模式。

在云效当中,我们除了支持直接同步YAML到Kubernetes集群以外,还扩展了基本的模板能力,你可以通过在YAML文件中定义变量占位符如${IMAGE},通过流水线运行是通过Docker镜像构建或者阿里云镜像仓库触发器(帮助文档:阿里云镜像仓库触发器触发流水线),动态产生要发布的镜像版本

如下所示:

2.png

YAML发布支持任意资源类型,因此适用于如下场景:

1、开发自运维,团队并充分理解和掌握Kubernetes原生的发布策略,希望通过YAML完成应用的升级与发布以及回滚,一般来说应用Git库会包含应用源码,Dockerfile以及部署应用所需的所有YAML文件(在某些情况下,YAML可能是由单独的Git仓库进行管理,以进行细粒度的权限控制)。

2、基础设施运维:运维团队通过Git管理集群的所有基础设施配置,并通过流水线完成集群的统一管理以及配置的同步

更多详细使用介绍请参考:云效Kubernetes YAML发布

最简单:镜像升级

3.png

在和一些云效用户的交流场景中,在也会有用户希望开发团队能够尽可能少的理解Kubernetes相关概念,在这种情况下由专职的运维团队负责完成应用环境的部署和初始化。而开发团队只负责完成代码开发,并通过流水线自动化完成应用镜像构建,并使用该镜像对集群中已有的应用进行升级。开发团队只关心应用的工作负载实例资源。

如下图所示,在云效流水线中我们监听应用代码库的变化,并构建出相应的Docker镜像,而发布阶段只需要指定对集群中实例并关联前序任务产生的镜像即可完成应用的升级发布:
4.png

如上所述,该场景适用于:

• 开发和运维分离:运维团队充分理解Kubernetes的原生发布策略,开发团队只负责产出代码以及应用镜像,由运维团队负责集群中应用的实际运维管理。

关于如何在云效中使用镜像升级能力,请参考:云效Kubernetes镜像升级

过程可控:分批发布

在前面两个小结中,我们都强调用户需要充分理解Kubernetes的原生发布策略,Kubernetes原生的发布策略主要是指RollingUpdate模式,用户通过声明升级策略,如maxSurge和maxUnavailable控制Pod的启动策略以及最大不可用Pod数,来确保即使应用发布出现异常的情况,也能保证服务的基本可用。

5.png

除此,由于应用启动往往有一定的耗时,如果使用了Kubernetes的服务发现机制,我们还需要配置如liveness以及readiness探针,来避免应用还在启动过程中就有不在计划内的流量进入到正在启动的实例当中。同时整个发布过程是不可逆的,假如认定当前发布出现了异常我们只能通过重新发布的方式来使应用回到可用状态。

6.png

而在云效的分批发布中,我们以Service为最小发布单元,在发布开始阶段我们将基于新版镜像创建出应用的版本V2,并根据当前应用的副本总数以及分批数量,对新旧两个版本的应用实例分别进行缩容和扩容,来控制实际进入到新版应用的流量比例,从而可以实现小规模的发布验证,在对发布进行充分验证后再逐步完全下线老版应用。

同时批次之间支持暂停和手动恢复让用户可以充分对针对发布过程进行控制。

7.png

该模式适用于:采用Kubernetes原生的服务发现机制,并希望获得相比于原生Kubernetes发布更好过程控制性以及安全性的用户。

更多详细使用介绍,请参考帮助文档:云效Kubernetes分批发布

外部流量可控:Ingress灰度发布

相比于分批发布灰度发布更强调更加可控和安全的线上验证。而灰度发布在Kubernetes中由于应用的部署模式的不同大致分为两种,我们首先来说第一种,基于Ingress的灰度发布,如下所示,我们通过Ingress将集群内的服务暴露给外部用户:

8.png

在发布过程中我们希望能够通过cookie或者header的方式使得特定的用户或者开发人员,能够在线上对新版本引用进行验证,经过小部分可控的线上流量验证后,我们的发布可靠性更好,如果出现预期外的问题,也可以快速回滚,并且整个灰度验证过程对非灰度用户完全不可感知。

9.png

在云效流水线的Ingress灰度发布中,我们以Ingress作为发布单元,当触发部署后,将会根据当前Ingress以及其关联的Service/Deployment资源,基于新版镜像创建出V2版本的Service/Deployment。 并通过Nginx Ingress的Annoation完成对流量规则声明,从而确保只有满足特定特征的流量才能进入到V2版本中,当处于灰度状态时,流水线将会等待人工验证,以触发发布或者或者回滚操作。

10.png

关于如何在云效流水线中使用灰度发布请参考帮助文档:云效Nginx Ingress灰度发布

该模式适用于:采用Ingress对外暴露应用服务,并且希望能够通过灰度的方式对发布进行验证

内部流量可控:Istio/ASM灰度发布

而在微服务的场景中,并不是所有的服务都需要直接暴露给外部用户,如下所示:

11.png

当采用微服务架构,我们大部分的后端服务是只暴露与集群内,微服务之间通过Kubernetes Service进行相互访问,在这种情况下,当采用灰度发布模式时,我们需要在Service级别进行流量控制,已确保指定的流量才进入到灰度的链路而不对正常用户产生影响。

12.png

不过由于Kubernetes原生在Service级别并不支持任何的流量控制规则,因此我们需要在集群中部署Istio或者采用阿里云ServiceMesh来对服务之间的流量进行细粒度的控制。
13.png

如下图所示,当使用Kubernetes蓝绿发布模式时,可以设置灰度流量规则,从而只有当请求中包含指定的Cookie配置的请求转发到灰度版本当中:

14.png

该模式适用于:采用Istio或者阿里云ServiceMesh的Kubernetes用户,并且希望能够通过灰度的方式对发布进行验证。

小结

在本文中,我们主要介绍了Kubernetes实际中的各种发布模式以及相关的适用场景,希望能够帮助用户快速找到适合自己的发布模式,当然如果你还有更多更好的交付实践,也可以在留言中进行分享。

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

“西部云安全优才计划”落地西安,为云安全高质量发展夯实才智支撑

9月26日,2021首届-西部云安全峰会在西安顺利召开。聚焦西部云安全发展和人才培养需求,在本次峰会上,腾讯安全云鼎实验室、陕西省计算机学会联合西安多所高校发布了“西部云安全优才计划”,凝聚西安以及西部的安全力量,…

如何做一场高质量的分享?

简介: 最近我发现一些同学的分享越来越趋于“念稿”式。我一边看着分享的同学在上面念稿,另一边看着几十号人在下面看电脑看手机,我心里就特别着急。恨不得我自己上去讲,也恨不得没收了大家的电脑手机。但这种粗暴的方法肯定是不解…

matlab knn实现,Matlab之KNN实现

1. 算法流程1) 通过Matlab产生高斯分布产生两类数据,并标明类别2) 数据初始化:设置K某个常数(一般为奇数)3) 对于每个测试数据,计算其到两类数据的所有点的距离对于上述求得的距离,选出K个最小的,检…

matlab 计算 工程,matlab工程计算.doc

您所在位置:网站首页 > 海量文档&nbsp>&nbsp计算机&nbsp>&nbspmatlabmatlab工程计算.doc167页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性,不预览、不比…

matlab制作打地鼠游戏,scratch编程制作打地鼠的游戏教程

scratch编程制作打地鼠的游戏教程Sk1少儿编程网-https://www.pxcodes.comSk1少儿编程网-https://www.pxcodes.com首先,新建背景和角色,从背景库/角色库中分别选择森林和地鼠、锤子Sk1少儿编程网-https://www.pxcodes.com1.角色:洞Sk1少儿编程…

php301重定向跳转,php如何设置301重定向跳转

php设置301重定向跳转的方法:在跳转前设置状态码【header( "HTTP/1.1 301 Moved Permanently" );header("Location:your_dest_url")】。本教程操作环境:windows7系统、PHP5.6版,DELL G3电脑,该方法适用于所有…

华为发布《大交通时代》:开启未来数字交通宏图

9月24日,在华为全联接2021大会期间,华为携手电子工业出版社及行业专家、共同举办了业内首部交通行业数字化转型系统性专著《大交通时代:行业数字化转型之道》(以下简称《大交通时代》)新书发布媒体沟通会。本书理论结合…

树莓派 摄像头 php,树莓派3 之 USB摄像头安装和使用

需求如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头(有点贵)。如果你不想要为摄像头模块花费额外的金钱,那有另外一个方法,就是你常见的USB 摄像头。你可能已经在PC上安装过了。我买的如图的这款本篇文章讲解的就是 在树莓派上使用U…

Gartner发布2021年低代码魔力象限,Mendix名列前位

到2025年,企业所开发的新应用中有70%将使用低代码或无代码技术,而2020年的这一比例还不到25%。低代码应用平台在其技术采用曲线上已从"早期采用者"进入到"早期多数人"阶段;而且低代码是“适合主流业务用例的强大的最佳应…

python爬虫入门心得体会,python爬虫入门和实例

爬虫不外乎是为了获取网络上的信息,要取得信息,你就得给给服务器发请求,然后服务器把信息发给你,这一步一般较为简单。服务器发给你的一般是一个html文件,拿到文件后,你可能会觉得这是什么乱七八糟的东西&a…

python的整数类型_Python int 数字整型类型 定义int()范围大小转换

本文主题是讲python数字类型python int整型使用方法及技巧。它是不可变数据类型中的一种,它的一些性质和字符串是一样的,注意是整型不是整形哦。 Python int有多种数字类型:整型int、长整型、布尔型bool、浮点数float、复数complex&#xff0…

Gartner发布2021年人工智能技术成熟度曲线

编辑 | 宋慧 供稿 | Gartner 全球信息技术研究和顾问公司Gartner 2021年人工智能技术成熟度曲线(Hype Cycle for Artificial Intelligence, 2021)中的四个趋势正在推动近期人工智能创新。这四个趋势是:负责任的人工智能、小而宽数据策略、人…

“低代码”将干掉 70% 的软件开发工作

作者| Mr.K 编辑| Emma来源| 技术领导力(ID:jishulingdaoli)根据Gartner 预测:到 2025 年,70% 的新应用将由低代码/无代码技术完成开发。也就是说,“低代码”将干掉70%的传统软件开发工作。什么是传统软件开发工作?说…

漫画:什么是 “图灵测试” ?

作者| 小灰来源| 程序员小灰艾伦麦席森图灵(1912-1954)在一间小黑屋里,有这样三个角色:一个人类评审员,两个受试者A和B。其中一个受试者是计算机的人工智能程序,另一个受试者是人类。评审员无法直接看到受试…

云原生,智慧营销破圈新利器

如今企业数字化转型进入深水区,我们步入全域精细化营销时代,企业增长和营销需求不断变化,MarTech(营销技术)正紧跟其后。据艾瑞咨询《2021年中国MarTech市场研究发展报告》指出,2021年我国 MarTech 各子场景…

埃森哲携手阿里云共建基于云原生的消费者运营中台解决方案

简介: 作为全球领先的专业服务公司,埃森哲凭借独特的业内经验与专业技能,以及翘楚全球的卓越技术中心和智能运营中心,此次携手阿里云为零售行业客户提供专业的云原生CDPMA解决方案。 在这个充满变革与颠覆的时代,新技…

SuperEdge正式成为CNCF沙箱项目,腾讯云携手六家厂商在边缘计算领域踏入新篇章

刚刚获悉,分布式云原生边缘容器开源项目SuperEdge通过了全球顶级开源基金会云原生计算基金会(CNCF)技术监督委员会评定,正式成为CNCF 沙箱项目。这不仅意味着SuperEdge得到了云原生开源社区的认可,同时也标志着该项目与…

指数级暴增、复杂场景下,揭秘百度云原生湖仓架构等系列数据产品

9月28日,百度智能云2021“云智技术论坛”智能大数据专场在上海举办。本次会议以“云智一体,让大数据发挥大价值”为主题,百度副总裁谢广军携百度多位资深技术专家与行业伙伴出席会议,共同探讨了大数据发展新形势下,企业…

重磅官宣:Nacos2.0发布,性能提升10倍

简介: ​Nacos2.0 作为一个跨代版本,彻底解决了 Nacos1.X 的性能问题,将性能提升了 10 倍。 作者:席翁 继 Nacos 1.0 发布以来,Nacos 迅速被成千上万家企业采用,并构建起强大的生态。 但是随着用户深入使用…