为了开了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
测试发现该文件对功能没影响,而且后面还会自动重新生成。具体原因未知,请知道的同学指导一下,谢谢。