17 | 经典PaaS的记忆:作业副本与水平扩展
张磊
该思维导图由 AI 生成,仅供参考
你好,我是张磊。今天我和你分享的主题是:经典 PaaS 的记忆之作业副本与水平扩展。
在上一篇文章中,我为你详细介绍了 Kubernetes 项目中第一个重要的设计思想:控制器模式。
而在今天这篇文章中,我就来为你详细讲解一下,Kubernetes 里第一个控制器模式的完整实现:Deployment。
Deployment 看似简单,但实际上,它实现了 Kubernetes 项目中一个非常重要的功能:Pod 的“水平扩展 / 收缩”(horizontal scaling out/in)。这个功能,是从 PaaS 时代开始,一个平台级项目就必须具备的编排能力。
举个例子,如果你更新了 Deployment 的 Pod 模板(比如,修改了容器的镜像),那么 Deployment 就需要遵循一种叫作“滚动更新”(rolling update)的方式,来升级现有的容器。
而这个能力的实现,依赖的是 Kubernetes 项目中的一个非常重要的概念(API 对象):ReplicaSet。
ReplicaSet 的结构非常简单,我们可以通过这个 YAML 文件查看一下:
从这个 YAML 文件中,我们可以看到,一个 ReplicaSet 对象,其实就是由副本数目的定义和一个 Pod 模板组成的。不难发现,它的定义其实是 Deployment 的一个子集。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了Kubernetes中Deployment的控制器模式及实现方法。Deployment实现了Pod的“水平扩展/收缩”和“滚动更新”功能,依赖于ReplicaSet对象的管理。文章通过实例分析了“滚动更新”过程,展示了Deployment Controller的操作和Pod版本升级的流程。同时,介绍了Deployment对应用进行版本控制的具体原理,包括如何回滚到指定版本以及控制“历史”ReplicaSet的数量。此外,还介绍了如何通过kubectl指令实现“水平扩展/收缩”和“滚动更新”,以及如何控制多次更新操作只生成一个ReplicaSet。文章还提到了金丝雀发布、蓝绿发布等应用发布模式,以及对有状态应用的管理。整体而言,本文对于想要深入了解PaaS设计思想和Kubernetes编排能力的读者具有很高的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》,新⼈⾸单¥68
《深入剖析 Kubernetes》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(76)
- 最新
- 精选
- 小龙老师真的是厉害,我在极客时间买了17门课了,这个是含金量最高的一门
作者回复: 17门,你也厉害!
2018-10-0124161 - 胖宝王金丝雀部署:优先发布一台或少量机器升级,等验证无误后再更新其他机器。优点是用户影响范围小,不足之处是要额外控制如何做自动更新。 蓝绿部署:2组机器,蓝代表当前的V1版本,绿代表已经升级完成的V2版本。通过LB将流量全部导入V2完成升级部署。优点是切换快速,缺点是影响全部用户。 本文学习的滚动更新,我觉得就是一个自动化更新的金丝雀发布。
作者回复: 说的没错,可以看看文末的例子实践一下
2018-10-015118 - 黑米老师真的是厉害,我在极客时间买了24门课了,这个是含金量第二高的一门
作者回复: 不是第一高不开心
2018-12-223545 - Pixar关于Pod的状态一直有一些疑问, 学完这节课就更混了, 囧. 还望老师能解答下. `kubectl get deployments` 得到的 available 字段表示的是处于Running状态且健康检查通过的Pod, 这里有一个疑问: 健康检查不是针对Pod里面的Container吗? 如果某一个Pod里面包含多个Container, 但是这些Container健康检查有些并没有通过, 那么此时该Pod会出现在 available里面吗? Pod通过健康检查是指里面所有的Container都通过吗?
作者回复: 都通过
2018-10-0730 - bus801如果我直接edit rs,将image修改成新的版本,是不是也能实现pod中容器镜像的更新?我试了一下,什么反应也没有。既然rs控制pod,为什么这样改不能生效呢?还请指教一下
作者回复: 因为rs controller 不处理rollout逻辑
2020-02-19324 - 阿文注意,在这里,我额外加了一个–record 参数。它的作用,... 这个应该要解释下--record 是只记录当前命令,老师,你下面的命令没有加。history 里面只看到 kubectl create --filename=nginx-deployment.yaml --record=true
作者回复: 对
2019-08-1623 - 王由华有个问题,scale down时,k8s是对pod里的容器发送kill 信号吗?所以应用需要处理好这个信号?
作者回复: 先term 再kill。需要处理。
2018-12-17621 - 我是一根葱请教个问题,如果水平收缩的过程中,某个pod中的容器有正在运行的业务,而业务如果中断的话可能会导致数据库数据出错,该怎么办?如何保证把pod的业务执行完再收缩?
作者回复: 业务需要优雅处理sig term
2018-11-04419 - 千寻在滚动更新的过程中,Service的流量转发会有怎样的变化呢?
作者回复: service只会代理readiness检查返回正确的pod
2018-10-0114 - Tigerfive半夜从火车上醒来,就来看看有没有更新,果然没有让我失望!
作者回复: 国庆可以充电啦
2018-10-0110
收起评论