zkcrescent 的木屋

K8S oerator-generator

K8S code gen & kube builder

code gen

这是一个从提供的SPEC自动帮助生成 informer + deepcopyFile + clientset 的 k8s 标准 operator 的代码生成工具,可以减少用户去编写大量复杂繁琐的k8s interafce, 竟可能的将逻辑放在事件的处理上,但是 即便如此,该工具生成的代码也需要关注很多K8S基础代码,包括WATCH,LIST资源,CREATE,UPdate,DELETE事件的函数绑定,OWNS 的手动注册等等,整体上来说,是很底层的K8S封装,只是解决了如何接入 K8S controller 体系 的问题, 并没有做更上层的封装

代码分析参考官方示例即可

kube builder

对比 code gen 的更高级封装,通过runtime pkg 暴露很多简易接口,包括连接配置,注册 kube spec(已生成的带有deepcopy能力的spec),own objs, watch 的更高级抽象封装,reconciler 作为其中的关键部分,是其中的核心价值, 每一次有新的spec变动带来的事件触发时,reconciler 会给出该事件的req, 描述该事件的meta,同时可以通过 runtime的方法通过 req 获取到对应的资源细节,从而进行相关的CURD,对资源的更新删除操作亦或是提供了一个很简单的接口即可使用, 在SPEC更新完成后,可以通过make manifests产出给出的spec的相关crd定义文件,spec的相关示例文件,对用户使用的spec编写对应crd定义文件繁琐易错这个问题上提供了极大地帮助,同时也封装了在kube集群中部署时的多实例部署,主备能力等

kube buidler 源代码主要pkg分析

/cmd

该目录下主要是 通过 cobra 做的命令行工具,绑定一些相关属性到对应的生成器属性上

/pkg/scaffold

该 pkg 主要是定义了 Scoflod 的 Interface 以及其工作时渲染文件的一个template interafce 定义,scofold 上绑定了多个渲染框架(v1, v2),每个框架下包括了多个 template interface, 通过给出渲染 resource 将对应的实际template渲染输出

/pkg/scaffold/resource

定义传递给 tempalate interface 的 resource

/pkg/scaffold/v1 / /pkg/scaffold/v2

定义 v1, v2两个不同版本的大框架

/pkg/plugin

可以通过该pkg能将自己需要的一些模板渲染功能做相关的调整,但是目前没有可以从 cmd 层面直接更新 args 的方法,导致了在需要对 cmd 做增强的时候只能通过重写 cmd 的方法引入新的 cmd 能力