Kubernetes code-generator使用

4,830 阅读1分钟

Kubernetes目前常使用CRD+Controller的方式扩展API,官方提供了CRD代码的自动生成器code-generator,主要介绍下如何使用code-generator去生成CRD中重复的代码。

准备环境

首先准备go语言环境,配置好环境变量。以我当前为例,GOPATH如下:

准备初始化代码

因为code-generator是在kubernetes官网代码中截取的,所以按照kubernetes的代码生成规则,在$GOPATH/src/下新建文件夹k8s.io,在k8s.io文件夹下载code-generator代码库,git clone https://github.com/kubernetes/code-generator, cd code-generator/,git checkout kubernetes-1.13.3,当前以最新版的1.13.3版本为准。

生成代码

默认的生成脚本在code-generator下的generate-groups.sh,如我想生成./generate-groups.sh all github.com/nevermore/project/pkg/client github.com/nevermore/project/pkg/apis "foo:v1 bar:v1beta1",则需要在$GOPATH/src/新建好相应的路径,mkdir -p $GOPATH/src/github.com/nevermore/project/pkg/clientmkdir -p $GOPATH/src/github.com/nevermore/project/pkg/apis/foo/v1,进入到v1路径下,新建三个文件touch doc.go types.go regsiter.go,修改每个文件开头为package v1;同理配置apis/bar/v1beta1相应的文件。 最终生成相应的clientsetlistersinformers。如图:

遗留问题

由于在doc.go types.go regsiter.go三个文件中,只是声明了package,并未在代码中添加一些初始化的定义,所以目前看到目录下没有生成listersinformers。后续补充如何生成相应的代码。