【大话云原生】kubernetes灰度发布篇-从步行到坐缆车的自动化服务升级
此文系【大话云原生】系列第四篇,该系列文章期望用最通俗、简单的语言说明白云原生生态系统内的组成、架构以及应用关系。从这篇开始我们要开始针对Kubernetes进行介绍了,本文内容如下:
一、Kubernetes的Pod概念解析
前文说到老婆过生日了我们一起出去旅游,上了团体服务班车,小娜同学(老婆)闲聊到:“这服务还不错哈,2个跟车导游,1个司机”。三句不离老本行,我无聊的说到:“他们三个人就是一个Pod,提供一天的旅游服务内容,有主有次不可分割"。
小娜同学又上套了:“什么是Pod啊?英文单词豌豆荚?”,让老婆增加对老公崇拜感的机会不可多得,那就开讲,反正坐车也是闲着。
- 一般来说一个Pod提供一种服务(微服务),“哎?之前说容器的时候你也是这么说的”。是的,容器是提供服务的最小单元,那么Pod是什么概念?这是因为我们现在讨论的是k8s,Pod是k8s服务调度的最小单元。
- “为什么引入Pod的概念?”,因为有的时候你会发现:一个服务通常包含辅助它的服务。比如这个车上,一个导游长得漂亮口才好作为主导游提供核心讲解服务,还有一个辅助她的导游负责发帽子、统计人数、统计消费等。同理回到架构技术角度,一个nginx提供web服务容器作为核心服务容器,负责收集nginx日志的服务容器作为辅助服务和它部署在一起,这样方便日志收集与连接。
- 一个Pod存在一个基础容器Infra,基础容器Infra提供了网络共享的能力,就像主导游和辅助导游必须在一辆车(基础容器Infra)上,或者基于这辆车组成了一个组合,否则他们之间无法对话及资源共享。
- 一个Pod下的容器共享网络及数据卷,所以将容器服务间具有相当强的捆绑关系的服务容器放到一个Pod里面,通常一个容器提供核心服务,其他的容器提供辅助服务,如:日志收集、监控告警等。
二、Pod标签与Service服务
聊着聊着很快车就到了旅游目的地,一下车发现X公司的团队还真不少。导游都统一都带上了深红色的帽子(游客带上蓝色遮阳帽),浩浩荡荡出发。深红色的帽子为导游打上了标签,他们面向游客(用户)提供了统一的一种服务叫做:“导游服务”。
对于K8s中的服务架构也是一样的:
- 一个Pod通常提供一种服务,如nginx web访问服务
- 多个提供同样服务的Pod通常打上一样的标签
- 创建Service:具备同一种标签的Pod组成一个Service,对外提供服务。
三、自动化服务升级-灰度发布
我们今天的项目是爬山,提供了两种方式:一是直接爬(即步行),二是坐缆车,当然如果你中途爬不动了也可以在缆车换乘站上缆车。
- 步行到缆车可以理解为一次服务升级(1.0版本服务升级为2.0版本服务)。从技术角度,服务升级等同于新版本服务的部署被称为Deployment。K8s同样使用Deployment这个术语代表服务升级部署。
- ReplicaSet代表一个版本的Pod服务组合,1.0步行版本的Pod服务组合,2.0为缆车版本的Pod服务组合,这样理解是不是容易多了呢?
- 在服务容器部署Deployment的过程中,不希望服务中断(即:不希望对步行1.0的用户的服务出现中断情况),所以停掉一个1.0的Pod,再启动一个2.0的Pod2.0,这个过程被称为灰度发布。整个过程高度依赖Kubernetes提供的自动化运维能力。
上面的图每个RS只有2个Pod,还不能那么直观的理解灰度发布,看下面这张图
- 圆形代表Pod,分为v1版本和v2版本,虚线标识的Pod表示即将下线的Pod
- v1版本的Pod减一,v2版本的pod加一
- 逐渐ReplicaSet:v1的Pod全部销毁,ReplicaSet:v2的Pod逐渐被创建并启动提供服务
- 整个的灰度发布过程,在k8s种通过一个Deployment进行定义。
此专栏《大话云原生》的前三篇文章如下
- 《【大话云原生】煮饺子与docker、kubernetes之间的关系》
- 《【大话云原生】负载均衡篇-小饭馆的流量变大了》
- 《【大话云原生】微服务篇-五星级酒店的服务方式》
如果您读完了觉得有收获,期待您能转发分享,您的支持是我不竭的创作动力!
欢迎关注我的博客,更多精品知识合集
本文转载注明出处(必须带连接,不能只转文字):字母哥博客 - zimug.com
觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力!。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。
- 《kafka修炼之道》
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端分离RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
【大话云原生】kubernetes灰度发布篇-从步行到坐缆车的自动化服务升级的更多相关文章
- 干货分享|使用 Istio 实现灰度发布
Kubernetes 作为基础平台,提供了强大的容器编排能力.但是在其上部署业务和服务治理上,仍然会面对一些复杂性和局限性.在服务治理上,已经有许多成熟的 ServiceMesh 框架用于扩充其能力, ...
- 【转】Spring Framework灰度发布
今天简单介绍下SpringFramework微服务中几种服务发布策略以及实现方式.我接触过的有蓝绿.滚筒和灰度发布. 蓝绿发布: 简单说就像美帝选总统投票一样,非蓝即绿一刀切,这个其实也是传统软件架构 ...
- 【从小白到专家】收官!Istio技术实践之九:路由控制与灰度发布
本期是Istio技术实践专题的最后一个模块,主题是Istio的路由控制与灰度发布.上一期我们讲到,虚拟服务(Virtual Service)以及目标规则(Destination Rule)是 Isti ...
- 【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
写在前面 在<[高并发]面试官问我如何使用Nginx实现限流,我如此回答轻松拿到了Offer!>一文中,我们主要介绍了如何使用Nginx进行限流,以避免系统被大流量压垮.除此之外,Ngin ...
- 基于 Istio 与 Kubernetes 对应用进行灰度发布与 Tracing
灰度发布,是指在黑与白之间,能够平滑过渡的一种发布方式.通俗来说,即让产品的迭代能够按照不同的灰度策略对新版本进行线上环境的测试,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以对新版本进行测试 ...
- Kubernetes 使用 Ingress 实现灰度发布功能
使用 Ingress 实现灰度发布 一.Canary 规则说明 Ingress-Nginx 是一个K8S ingress工具,支持配置 Ingress Annotations 来实现不同场景下的灰度发 ...
- 【大话云原生】煮饺子与docker、kubernetes之间的关系
云原生的概念最近非常火爆,企业落地云原生的愿望也越发强烈.看过很多关于云原生的文章,要么云山雾罩,要么曲高和寡. 所以笔者就有了写<大话云原生>系列文章的想法,期望用最通俗.简单的语言说明 ...
- Nginx详解二十四:Nginx深度学习篇之灰度发布
实战场景 - 灰度发布 灰度发布的作用:按照一定的关系区别,分部分的代码进行上线,使代码的发布能平滑过渡上线实现方式: 1.用户的信息cookie等信息区别 2.根据用户的IP地址 安装memcach ...
- Istio最佳实践:在K8s上通过Istio服务网格进行灰度发布
Istio是什么? Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司.它提供了完整的非侵入式的微服务治理解决方案,包含微服务的管 ...
随机推荐
- 【ASP.NET Core】MVC模型绑定:非规范正文内容的处理
本篇老周就和老伙伴们分享一下,对于客户端提交的不规范 Body 如何做模型绑定.不必多说,这种情况下,只能自定义 ModelBinder 了.而且最佳方案是不要注册为全局 Binder--毕竟这种特殊 ...
- springboot实现热部署的几种方式
原理:使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在 ...
- Jquery是什么?有什么作用?
Jquery是继prototype之后又一个优秀的Javascrīpt框架.它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safar ...
- 什么是内部类?Static Nested Class和Inner Class的不同?
内部类就是在一个类的内部定义的类,内部类中不能定义静态成员,内部类可以直接访问外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中.在方法外部定义的内部类前面可以加上st ...
- memcached 如何处理容错的?
不处理! 在 memcached 节点失效的情况下,集群没有必要做任何容错处理.如 果发生了节点失效,应对的措施完全取决于用户.节点失效时,下面列出几种方 案供您选择: 忽略它! 在失效节点被恢复或替 ...
- 转载:C++快速排序
快速排序的基本实现 转载至:https://www.cnblogs.com/miracleswgm/p/9199124.html 快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想: 1 ...
- 编译器如何处理C++不同类中同名函数(参数类型个数都相同)
转载请注明出处,版权归作者所有 lyzaily@126.com yanzhong.lee 作者按: 从这篇文章中,我们主要会认识到一下几点: 一.不类中的特征标相同的同名函数,它们是不同的函数,原因就 ...
- activity-alias属性的使用
activity-alias是Android里为了重复使用Activity而设计的.1. 含义和作用: 对于activity-alias标签,它有一个属性叫android:targen ...
- java中请给出一个return this的例子。
[新手可忽略不影响继续学习]下面例子中setYear中的return this;返回了一个指向对象的指针,this.setMonth(8).setDay(20);是合法的,如果像原来的例子一样什么都不 ...
- 如何在jsp界面进行判断再输出不同的值
C标签的out <td> <c:if test="${nowtime eq returntime}"> <c:out value="逾期&q ...