一. CRD#
1 | # CRD的定义和使用 |
二. 自定义控制器#
自定义控制器
+Informer就是一个自带缓存和索引机制,可以触发 Handler 的客户端库。这个本地缓存在 Kubernetes 中一般被称为 Store,索引一般被称为 Index。
+Informer 使用了 Reflector 包,它是一个可以通过 ListAndWatch 机制获取并监视 API 对象变化的客户端封装。
+Reflector 和 Informer 之间,用到了一个“增量先进先出队列”进行协同。而 Informer 与你要编写的控制循环之间,则使用了一个工作队列来进行协同。
+在实际应用中,除了控制循环之外的所有代码,实际上都是 Kubernetes 为你自动生成的,即:pkg/client/{informers, listers, clientset}里的内容。
+这些自动生成的代码,就为我们提供了一个可靠而高效地获取 API 对象“期望状态”的编程库。
+所以,接下来,作为开发者,你就只需要关注如何拿到“实际状态”,然后如何拿它去跟“期望状态”做对比,从而决定接下来要做的业务逻辑即可。 /// controller.go
参考:#
- 《深入剖析Kubernetes - 23 声明式API与Kubernetes编程范式》 张磊
- 《深入剖析Kubernetes - 24 深入解析声明式API(一):API对象的奥秘》 张磊
- 《深入剖析Kubernetes - 25 深入解析声明式API(二):编写自定义控制器》 张磊
- Kubernetes 准入控制 Admission Controller 介绍
- CRD 代码示例
- k8s自定义controller三部曲之一:创建CRD(Custom Resource Definition) 一、二、三