周志明的软件架构课
周志明
博士,远光软件研究院院长,《深入理解 Java 虚拟机》《凤凰架构》等书作者
54203 人已学习
免费领取
课程目录
已完结/共 74 讲
架构师的视角 (24讲)
周志明的软件架构课
15
15
1.0x
00:00/00:00
登录|注册

49 | 以容器构建系统(下):韧性与弹性

你好,我是周志明。今天,我们接着上节课“隔离与协作”的话题,继续来讨论容器编排的另一个目标:韧性与弹性。
我曾经看过一部电影,叫做《Bubble Boy》,主要讲了一个体内没有任何免疫系统的小男孩,每天只能生活在无菌的圆形气球里,对常人来说不值一提的细菌,都会直接威胁到他的性命。小男孩尽管能够降生于世,但并不能真正地与世界交流,这种生命是极度脆弱的。
真实世界的软件系统,跟电影世界中的小男孩所面临的处境其实差不多。
要知道,让容器能够相互连通、相互协作,仅仅是以容器构建系统的第一步,我们不仅希望得到一个能够运行起来的系统,而且还希望得到一个能够健壮运行的系统、能够抵御意外与风险的系统。
当然,在 Kubernetes 的支持下,你确实可以直接创建 Pod 将应用运行起来,但这样的应用就像是电影中只能存活在气球中的小男孩一样脆弱,无论是软件缺陷、意外操作或者硬件故障,都可能导致在复杂协作的过程中某个容器出现异常,进而出现系统性的崩溃。
为了解决这个问题,架构师专门设计了服务容错的策略和模式(你可以回顾复习第3637讲)。而 Kubernetes 作为云原生时代的基础设施,也尽力帮助我们以最小的代价来实现容错,为系统健壮运行提供底层支持。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了容器编排系统中的韧性与弹性问题,并以Kubernetes为例,介绍了控制器设计模式在实现具有韧性与弹性的系统中的应用。通过生动的比喻和具体的案例,文章深入浅出地介绍了Kubernetes中的资源对象与控制器的关系,以及声明式API的概念。具体以部署控制器、副本集控制器和自动扩缩控制器为例,阐述了它们在实现故障恢复、滚动更新和自动扩缩等特性中的作用。此外,文章还强调了在学习Kubernetes或其他云原生技术时,应该站在解决问题的角度去理解资源和控制器的设计理念,而不是死记硬背。总的来说,本文为读者提供了深入了解容器编排系统的技术特点和实际应用的视角,是一篇值得阅读的技术文章。

该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 松小鼠
    用这么简短的语言总结k8s的设计理念,对初学者帮助很大啊,这就是众里寻他千百度的文章啊。
    2021-03-17
    24
  • zhanyd
    控制器设计模式贯彻的是以人为本的思想,我们只需要告诉机器我们想要什么,而不需要告诉它具体该怎么做,它就会用自己的方式向目标值靠拢,有点人工智能的影子。 假设我想限制某个 Pod 持有的最大存储卷数量,应该如何设计? 应该有个控制器实时的监测存储卷的数量,使得数量不超过最大值。 假设集群中某个 Node 发生硬件故障,Kubernetes 要让调度任务避开这个 Node,应该如何设计? 应该有个控制器监测到这个有故障的Node,把它加入黑名单,或者直接下线。 假设一旦这个 Node 重新恢复,Kubernetes 要能尽快利用上面的资源,又该如何去设计? 应该有个控制器监测到这个Node,把它从黑名单中恢复,或者重新上线。
    2021-03-17
    13
  • Jxin
    只说要什么,不说怎么做。这就是我们提倡的面向意图而非过程编程。心里有这条准则,便能更好的发现编码的坏味道,能察觉更好的抽象视角。可惜的是,理解面向意图而非过程没有任何难处,但真的get到这个点的开发实属少数。归根揭底,这种对极致的追求在日常工作中实在不易进行,而大部分开发又缺少业余时间的刻意训练。
    2021-03-22
    2
    12
  • 迷失的小伙伴
    之前看了k8s的专栏,感觉有点直接深入细节,看得有点处理。但是读了这篇,有了个宏观的概念之后,再深入细节,感觉原来如此!就喜欢这种高视角度,站在上帝视角一览众生的文章。
    2021-04-21
    1
    4
  • 徐海浪
    假设我想限制某个 Pod 持有的最大存储卷数量,应该如何设计? 答: 通过声明Pod的最大存储卷配额的来实现,配额是元数据,在新增存储卷加现有的存储卷小于等于最大值。 假设集群中某个 Node 发生硬件故障,Kubernetes 要让调度任务避开这个 Node,应该如何设计? 假设一旦这个 Node 重新恢复,Kubernetes 要能尽快利用上面的资源,又该如何去设计? 答:配置node的健康检查,不健康时给节点打污点,恢复后取消污点,允许该节点加入调度。这个污点标签,是节点的元数据。
    2021-11-08
    2
  • 南琛一梦
    真正的大佬就是能把复杂的问题简单化,为周老师点赞,向周老师看齐
    2023-01-13归属地:浙江
    1
  • Geek1691
    有状态服务如何利用云原生呢
    2022-05-22
  • 花儿少年
    知道有什么,做了什么是可以很容易看清的;但是知道为什么这么做很难; 知道为什么对我们的理解却很重要
    2021-06-25
  • Demon.Lee
    老师,场景五里面的 “Pod 出现故障时,能够自动恢复,不中断服务;”,这个是理想情况吧,假设服务有2个pod,如果2个pod同时挂了,新的副本创建需要一定的时间(比如1分钟),那这1分钟内服务应该是中断的,所以我们只能说服务的SLA达到了多少个9。
    2021-04-19
    2
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部