kubernetes 项目中一些通用的代码,比如资源的 DeepCopy 函数、ClientSet、Informer 等是通过脚本自动生成的,相关脚本是 hack/update-codegen.sh。kubernestes 的 Makefile 以及 hack 中脚本内容比较繁杂,这里直接跳过,只需要知道他们最终使用 github.com/kubernetes/code-generator 中的命令生成代码。
code-generator 实现代码位于 kubernetes/staging/src/k8s.io/code-generator 中,跟随 kubernetes 的版本发布被同步到独立的 repo github.com/kubernetes/code-generator。
code-generator 提供了多个命令,分别用于生成不同代码:
code-generator 中一部分比较通用的代码生成是通过 gengo 实现的。gengo 中给出了几个代码生成示范: