controller-runtime总览可参考
- examples 官方给出的例子
- hack 官方给出的可执行文件,代码检查,ci等
- pkg controller-runtime 的具体代码实现
examples
builtins
本示例为已存在的ReplicaSet资源实现自定义控制器和webhooks
-
main.go 例子的入口函数
-
创建一个manager(pkg/manager)
-
通过上面创建的manager创建controller来监视ReplicaSets和Pods,并reconciles对应的kind
-
注册变更和验证控制器
-
启动manager
-
-
controller.go 基于pkg/reconcile实现的controller-reconcile,注册到controller中
-
mutatingwebhook.go 准入控制器一种(变更钩子),基于pkg/webhook实现,为每个传入的pod添加特定注释
-
validatingwebhook.go 准入控制器的一种(验证钩子),基于pkg/webhook实现,验证是否存在特定注释
crd
实现了一个自定义的Kubernetes资源ChaosPod,并创建了一个监视它的自定义控制器以及变异和验证的Webhooks
- pkg
- resource.go: 定义ChaosPod API的schem,并实现验证和突变webhooks
- groupversion_info.go: 定义ChaosPod API的GVK
- zz_generated.deepcopy.go: 由kubebuilder生成的深度复制功能
- main.go 类似上面基于已有类型的main.go
- 创建一个manager(pkg/manager)
- 注册ChaosPod到mgr的schema
- 实现reconcile以执行ChaosPod API的所需操作
- 通过上面创建的manager创建controller来监视ChaosPod,并reconciles对应的kind
- 注册ChaosPod webhooks到mgr
- 启动manager
pkg
- builder builder包提供包装其他controller-runtime库,暴漏简单模式用于构建通用Controllers。
- cache cache包提供对象缓存,充当client的Reader实例并帮助驱动基于Kubernetes对象的事件处理程序。
- client client包用于与Kubernetes API服务器进行交互的功能
- controller controller包用于构建自定以的controller
- conversion 为API类型转换提供实现的接口定义 (基准类型v1 其他版本v2 v2–v1)
- envtest 用于集成测试crd
- event 包事件包含由source.Sources生成并由handler.EventHandler转换为reconcile.Requests的Event类型的定义。
一般不需要自己程序处理,而是再调用Controller.Watch的时候自动处理了。 - handler EventHandlers.Requests响应从Watching Kubernetes API中观察到的Create,Update,Deletion事件来enqueue reconcile.Requests
- healthz 和apiserver的健康检查类似,但是做了一些调整,使其符合controller-runtime的风格
- leaderelection 用于领导者选举资源锁的构造函数。可以使用一个controller manager来运行controllers。
- log 提供日志
- manager 创建controller所必须的,包括client cache scheme等
- metrics 暴漏普罗米修斯的采集指标
- predicate 使用在controller.watch,用于过滤事件,然后再将其提供给EventHandlers
- reconcile 定义了实现reconcile的接口,提供给controller调用
- recorder 定义用于Kubernetes事件记录器的接口
- runtime 一般我们用户不需要调用,是在内部controller-runtime调用的,包含inject/log/scheme/signals
- scheme 用于构建Go类型(Kubernetes 组,版本和种类)相关联的信息
- source 使用Controller.Watch挂载到Controllers,watch对应source,reconcile对应的资源
- webhook 提供构建和引导Webhook服务器的方法(目前只支持准入webhook,以后会支持version conversion webhook)