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

你好,我是张磊。今天我和你分享的主题是:深入解析声明式 API 之编写自定义控制器。
在上一篇文章中,我和你详细分享了 Kubernetes 中声明式 API 的实现原理,并且通过一个添加 Network 对象的实例,为你讲述了在 Kubernetes 里添加 API 资源的过程。
在今天的这篇文章中,我就继续和你一起完成剩下一半的工作,即:为 Network 这个自定义 API 对象编写一个自定义控制器(Custom Controller)。
正如我在上一篇文章结尾处提到的,“声明式 API”并不像“命令式 API”那样有着明显的执行逻辑。这就使得基于声明式 API 的业务功能实现,往往需要通过控制器模式来“监视”API 对象的变化(比如,创建或者删除 Network),然后以此来决定实际要执行的具体工作。
总得来说,编写自定义控制器代码的过程包括:编写 main 函数、编写自定义控制器的定义,以及编写控制器里的业务逻辑三个部分。
首先,我们来编写这个自定义控制器的 main 函数。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》,新⼈⾸单¥68
《深入剖析 Kubernetes》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(55)
- 最新
- 精选
- mgxianInformer 和控制循环分开是为了解耦,防止控制循环执行过慢把Informer 拖死
作者回复: 是的
3101 - Joe Black看了这两天的文章,感觉k8s的机制实在是太具有普适性了,可以基于它构建各种分布式业务平台。本质上它就是一个分布式对象管理平台。
作者回复: 说对了。所以说把kubernetes跟swarm mesos各种paas等横向比较没啥实际意义
344 - 超如果一个master 管理的node非常多 通过ListAndWatch 会对master的性能有影响吧
作者回复: 所以说kubernetes 当前规模是5000
330 - 勤劳的小胖子-libo一般这种工作队列结构主要是为了匹配双方速度不一致,也为了decouple双方。比如典型生产者消费者问题
作者回复: 对的
17 - gogo请问老师,如果用deployment部署一个tag是latest的镜像,怎样进行滚动更新呢?set image的话tag不变,不能出发更新呢
作者回复: 要用滚动更新就不要用latest tag,否则你准备怎么知道当前在用的是哪个版本的镜像?
211 - 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
收起评论