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

25 | 深入解析声明式API(二):编写自定义控制器

你好,我是张磊。今天我和你分享的主题是:深入解析声明式 API 之编写自定义控制器。
在上一篇文章中,我和你详细分享了 Kubernetes 中声明式 API 的实现原理,并且通过一个添加 Network 对象的实例,为你讲述了在 Kubernetes 里添加 API 资源的过程。
在今天的这篇文章中,我就继续和你一起完成剩下一半的工作,即:为 Network 这个自定义 API 对象编写一个自定义控制器(Custom Controller)。
正如我在上一篇文章结尾处提到的,“声明式 API”并不像“命令式 API”那样有着明显的执行逻辑。这就使得基于声明式 API 的业务功能实现,往往需要通过控制器模式来“监视”API 对象的变化(比如,创建或者删除 Network),然后以此来决定实际要执行的具体工作。
接下来,我就和你一起通过编写代码来实现这个过程。这个项目和上一篇文章里的代码是同一个项目,你可以从这个 GitHub 库里找到它们。我在代码里还加上了丰富的注释,你可以随时参考。
总得来说,编写自定义控制器代码的过程包括:编写 main 函数、编写自定义控制器的定义,以及编写控制器里的业务逻辑三个部分。
首先,我们来编写这个自定义控制器的 main 函数。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(55)

  • 最新
  • 精选
  • mgxian
    Informer 和控制循环分开是为了解耦,防止控制循环执行过慢把Informer 拖死

    作者回复: 是的

    3
    101
  • Joe Black
    看了这两天的文章,感觉k8s的机制实在是太具有普适性了,可以基于它构建各种分布式业务平台。本质上它就是一个分布式对象管理平台。

    作者回复: 说对了。所以说把kubernetes跟swarm mesos各种paas等横向比较没啥实际意义

    3
    44
  • 如果一个master 管理的node非常多 通过ListAndWatch 会对master的性能有影响吧

    作者回复: 所以说kubernetes 当前规模是5000

    3
    30
  • 勤劳的小胖子-libo
    一般这种工作队列结构主要是为了匹配双方速度不一致,也为了decouple双方。比如典型生产者消费者问题

    作者回复: 对的

    17
  • gogo
    请问老师,如果用deployment部署一个tag是latest的镜像,怎样进行滚动更新呢?set image的话tag不变,不能出发更新呢

    作者回复: 要用滚动更新就不要用latest tag,否则你准备怎么知道当前在用的是哪个版本的镜像?

    2
    11
  • jssfy
    请问这个控制器是跑在node节点上的?一般哪些控制器是跑在node上哪些是跑在master上呢

    作者回复: 无所谓,哪都行

    5
  • Monokai
    处理完api对象的事件后就直接存储在etcd里了么?需不需要再和apiserver打交道?

    作者回复: 需要,所有对etcd的操作都要走apiserver

    4
  • LinYongRui
    张老师您好,请问如果在这个框架下,有人手动删除了一个实际的neutron network,但是本地缓存和apiserver的状态是一致的,那么在period sync的时候,是不是就不会去真正检查实际状态和本地缓存的差别了呢?因为我看到eventhandler的update那边会直接return了? 谢谢

    作者回复: 这个逻辑可以自己在handler里处理一下,我没cover这种情况而已

    4
  • sonald
    看起来自定义的控制器是独立运行的,而不能像一个API对象一样注册到master,并且部署到master上之类的?

    作者回复: 那个就变成aggregator api sever了?

    3
  • xfan
    我在读完后,和学习的期间,发现不仅仅CRD有Informer,workqueue构成的自定义控制器,而且client-go中也有个类似的,这两者之间有什么联系吗,还是就是一个东西

    作者回复: 一个东西

    3
收起评论
显示
设置
留言
55
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部