Kubernetes code-generator使用

Cylon發表於2022-06-20

Kubernetes目前常使用CRD+Controller的方式擴充套件API,官方提供了CRD程式碼的自動生成器code-generator,主要介紹下如何使用code-generator去生成CRD中重複的程式碼。

準備環境

首先準備go語言環境,配置好環境變數。以我當前為例,GOPATH如下:

Kubernetes code-generator使用

準備初始化程式碼

因為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。如圖:

Kubernetes code-generator使用

遺留問題

由於在doc.go types.go regsiter.go三個檔案中,只是宣告瞭package,並未在程式碼中新增一些初始化的定義,所以目前看到目錄下沒有生成listersinformers。後續補充如何生成相應的程式碼。

相關文章