使用kubebuilder结合code-generator开发k8s controller(1)

为了开了controller,先后分析和尝试了几周,现把步骤和踩的坑记录分享一下。

使用kubebuilder结合code-generator开发k8s controller(1)

使用kubebuilder结合code-generator开发k8s controller(2)

本篇记录准备工作及遇到的问题和解决方法

问题一: kubebuilder安装

参考网上安装kubebuilder方法,但以下方式在curl的时候并无法下载对应安装包,因此放弃该方式,如有兄弟尝试成功,可分享成功经验

os=$(go env GOOS)
arch=$(go env GOARCH)
curl -L https://go.kubebuilder.io/dl/2.3.1/${os}/${arch} | tar -xz -C /tmp/
mv /tmp/kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder
export PATH=$PATH:/usr/local/kubebuilder/bin

尝试一:下载kubebuilder源码自己编译

git clone https://gitee.com/henrywangx/kubebuilder.git
cd kubebuilder
make build
cp bin/kubebuilder $GOPATH/bin

结果又出现新的问题,kubebuilder生成的controller,依赖的sigs.k8s.io/controller-runtime的版本v0.4.0,而我们的工程依赖sigs.k8s.io/controller-runtime v0.7.0,导致依赖冲突,用go mod replace也没有解决问题,故放弃该kubebuilder版本,如知道解决方法或问题根因的,请帮忙指出,谢谢。

尝试二:下载kubebuilder release

地址:Releases · kubernetes-sigs/kubebuilder · GitHubKubebuilder - SDK for building Kubernetes APIs using CRDs - Releases · kubernetes-sigs/kubebuilderhttps://github.com/kubernetes-sigs/kubebuilder/releases我参考其他文章,下载2.3.1版本的kubebuilder验证

wget https://github.com/kubernetes-sigs/kubebuilder/releases/download/v2.3.1/kubebuilder_2.3.1_linux_amd64.tar.gz

结果还是出现依赖冲突

重新下载新版本的kubebuilder,直接下了最新版本v3.1.0

wget https://github.com/kubernetes-sigs/kubebuilder/releases/download/v3.1.0/kubebuilder_linux_amd64

注:此时下载的文件并没有后缀,一开始都不知道怎么用。可以通过file命令查看文件格式

#file kubebuilder_linux_amd64 
kubebuilder_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

可以看到文件是64位可执行文件,因此直接把文件放到/usr/local/sbin里即可使用

mv  kubebuilder_linux_amd64  /usr/local/sbin/kubebuilder

使用kubebuilder v3.1.0后直接解决了前面的问题。

问题二:kustomize安装

这部分没有遇到问题,直接执行下面命令成功安装

mkdir -p $GOPATH/bin
cd $GOPATH/bin
GOBIN=$(pwd)/ GO111MODULE=on go get sigs.k8s.io/kustomize/kustomize/v3

问题三:code-generator使用

参考https://cloud.tencent.com/developer/article/1656317

使用kubebuilder生成crd,因此如果改了apis/app/v1/{crd}_type.go文件,则需要重新执行make && make manifests重新刷新crd和deepcopy

但是在配置了code-generator后,make &&make manifests时会出现如下错误:

Error: go [list -e -json -compiled=true -test=false -export=false -deps=true -find=false -tags ignore_autogenerated -- ./...]: exit status 1: go build k8s.io/code-generator: build constraints exclude all Go files in /dcos/ksj/develop/vpc-gateway/vendor/k8s.io/code-generator

解决方法:把hack/tools.go文件删掉

rm -rf /hack/tools.go

测试发现该文件对功能没影响,而且后面还会自动重新生成。具体原因未知,请知道的同学指导一下,谢谢。

你可能感兴趣的:(k8s,linux)