深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者
116705 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
再谈开源与社区 (1讲)
结束语 (1讲)
深入剖析 Kubernetes
15
15
1.0x
00:00/00:00
登录|注册

16 | 编排其实很简单:谈谈“控制器”模型

调谐(Reconcile)
期望状态
实际状态
“控制器模式”与“事件驱动”的区别和联系
核心原理
不同类型的容器编排功能
控制器模式的设计方法
被控制对象的模板
控制器定义
实现方式
面向API对象编程
控制循环
kube-controller-manager
思考题
总结
Deployment控制器
控制器模式
Pod的抽象和封装
主题:编排其实很简单之谈谈“控制器”模型
介绍人:张磊
编排其实很简单之谈谈“控制器”模型

该思维导图由 AI 生成,仅供参考

你好,我是张磊。今天我和你分享的主题是:编排其实很简单之谈谈“控制器”模型。
在上一篇文章中,我和你详细介绍了 Pod 的用法,讲解了 Pod 这个 API 对象的各个字段。而接下来,我们就一起来看看“编排”这个 Kubernetes 项目最核心的功能吧。
实际上,你可能已经有所感悟:Pod 这个看似复杂的 API 对象,实际上就是对容器的进一步抽象和封装而已。
说得更形象些,“容器”镜像虽然好用,但是容器这样一个“沙盒”的概念,对于描述应用来说,还是太过简单了。这就好比,集装箱固然好用,但是如果它四面都光秃秃的,吊车还怎么把这个集装箱吊起来并摆放好呢?
所以,Pod 对象,其实就是容器的升级版。它对容器进行了组合,添加了更多的属性和字段。这就好比给集装箱四面安装了吊环,使得 Kubernetes 这架“吊车”,可以更轻松地操作它。
而 Kubernetes 操作这些“集装箱”的逻辑,都由控制器(Controller)完成。在前面的第 12 篇文章《牛刀小试:我的第一个容器化应用》中,我们曾经使用过 Deployment 这个最基本的控制器对象。
现在,我们一起来回顾一下这个名叫 nginx-deployment 的例子:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kubernetes容器编排中的“控制器”模型是本文的核心内容。文章以Deployment为例,详细介绍了控制器模式的设计方法,统一实现对各种不同的对象或资源的编排操作。控制器模式通过控制循环完成编排逻辑,最终执行结果要么是创建、更新一些Pod或其他API对象,要么是删除已存在的Pod或其他API对象。这一实现思路是Kubernetes容器编排的核心原理,不同的控制器可以在具体执行过程中设计不同的业务逻辑,从而达到不同的编排效果。文章还提出了思考题,探讨了Kubernetes使用的“控制器模式”与常说的“事件驱动”之间的区别和联系。整体而言,本文通过深入浅出的方式,向读者介绍了Kubernetes容器编排中的核心技术特点,为读者提供了全面的概览。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(40)

  • 最新
  • 精选
  • jasine
    除了上面朋友提到的主动与被动区别,事件往往是一次性的,如果操作失败比较难处理,但是控制器是循环一直在尝试的,更符合kubernetes申明式API,最终达到与申明一致,这样理解对吗

    作者回复: 厉害。这个就说到点子上了。

    2018-09-28
    6
    463
  • uncleli
    相当于select和epoll的区别

    作者回复: 太专业啦

    2018-09-28
    6
    129
  • 小小笑儿
    deployment会创建rs,然后由rs创建pod,所以pod的owner应该是rs?

    作者回复: 明白人。

    2018-09-28
    3
    92
  • 龙坤
    老师,大概可以这样理解吧。一个是主动,一个被动 “事件驱动”,对于控制器来说是被动,只要触发事件则执行,对执行后不负责,无论成功与否,没有对一次操作的后续进行“监控” “控制器模式”,对于控制器来说是主动的,自身在不断地获取信息,起到事后“监控”作用,知道同步完成,实际状态与期望状态一致

    作者回复: 基本正确。

    2018-09-28
    2
    40
  • Pixar
    有一个疑问没太弄清楚, 比如Deployment, 是我创建一个Deployment 就会生成一个对应的 Deployment-Controller 实例来管理该它 还是整个k8s系统只有一个 Deployement-Controller 来同一管理该系统的所有Deployment呢?

    作者回复: 当然只有一个controller

    2018-10-07
    30
  • 包子
    控制器主动获取pod状态,在这个集群中,有那么多pod,某个pod在某一时刻状态有变,怎样及时通知到控制器呢?

    作者回复: informer机制,后面会讲到

    2018-09-28
    24
  • chf007
    我可以先写Pod,再写Deployment,不写 template,只靠标签控制 Pod 么? K8s只靠标签进行match控制,如果万一写错便签会不会直接调度了以前就存在的Pod,但是 不是我想要操作的 Pod 呢?

    作者回复: 不可以,控制器需要使用模版。的确会有重合的可能。

    2018-10-10
    5
    17
  • Vincen
    后面文章会讲watch机制吗?

    作者回复: 会的

    2018-09-28
    5
  • Spark
    老师,我是初学者,这个课程让我获益匪浅,但每次都有很多问题想问但无人解答。请问能不能建一个交流群,大家共同讨论学习。

    作者回复: 极客时间好像马上要上线这个功能

    2018-09-29
    5
    3
  • 择动
    老师,明白人说明白之后,我想明白deployment的owner又是谁?

    作者回复: 这个字段可以为nil啊

    2018-09-28
    2
收起评论
显示
设置
留言
40
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部