Kubernetes code-generator使用

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

准备环境

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

准备初始化代码

由于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版本为准。api

生成代码

默认的生成脚本在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。如图:3d

遗留问题

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

相关文章
相关标签/搜索