github地址: https://github.com/kubernetes-sigs/kubebuilder
官方文档地址: https://book.kubebuilder.io/quick-start.html
命令tips:
source <(kubectl completion bash)
alias k=kubectl
complete -F __start_kubectl k
export GO111MODULE=on
export GOPROXY="https://goproxy.cn/"
source <(kubebuilder completion bash)
alias kb=kubebuilder
complete -F __start_kubebuilder kb
初探-基本使用流程
安装
通过 https://github.com/kubernetes-sigs/kubebuilder/releases 查找要安装的版本
os=$(go env GOOS)
arch=$(go env GOARCH)
curl -sLJS -o /usr/local/bin/kubebuilder https://github.com/kubernetes-sigs/kubebuilder/releases/download/v3.0.0-beta.0/kubebuilder_${os}_${arch}
创建项目
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
mkdir -p tutorial && cd tutorial
go mod init example.com/m
kubebuilder init --domain my.domain
创建 API
kubebuilder create api --group webapp --version v1 --kind Guestbook
测试一下
make install
make run
创建自定义对象实例
kubectl apply -f config/samples/
k get guestbooks.webapp.my.domain
k edit guestbooks.webapp.my.domain guestbook-sample
在集群上运行Controller
controller_image_and_tag=""
make docker-build docker-push IMG=${controller_image_and_tag}
controller_image_and_tag=""
make deploy IMG=${controller_image_and_tag}
k logs -n tutorial-system tutorial-controller-manager-5df46878c9-m8k54 -f --all-containers
如果连接的是远端k8s,本地没有etcd的bin文件
解决: 修改 Makefile
, 将 docker-build: test
改成 docker-build:
Dockerfile中的镜像如果不能pull
解决: 修改 Dockerfile
, 将其中的相关镜像修改成可以pull的镜像,
例如
golang:1.15
可以修改成 ~/show-istio-repo.sh ryygo _
gcr.io/distroless/static:nonroot
可以修改成 ~/show-istio-repo.sh knative _ | grep gcr_distroless_static_nonroot
执行docker build时go mod download失败
解决: 修改 Dockerfile
, 增加 ENV GOPROXY="https://goproxy.cn/"
部署后的controller中的container用的镜像不能pull
解决: 修改 config/default/manager_auth_proxy_patch.yaml
, 将其中的相关镜像修改成可以pull的镜像,
例如
gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0
可以修改成 ~/show-istio-repo.sh kubebuilder gz | grep kb_rbac_proxy
部署后的controller deployment的imagePullPolicy不是Always
TODO
加快docker build
docker build
每次都要编译很长时间, 所以修改 Makefile
, 直接在本地编译且不强制rebuilding , 如下所示:
#docker-build: test ## Build docker image with the manager.
docker-build:
go mod download -x
#CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -v -o manager main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -v -o manager main.go
docker build -t ${IMG} .
修改 Dockerfile
如下所示:
FROM 10.172.49.246/istio/knative:gcr_distroless_static_nonroot
WORKDIR /
COPY manager .
USER 65532:65532
ENTRYPOINT ["/manager"]
卸载 CRDs
make uninstall
稍微做一些修改
kubebuilder init
出来的初始脚手架没有任何逻辑,为了有一个最初始的感性认识,我们稍微的增加一点代码
vi controllers/guestbook_controller.go
找到 Reconcile
方法中的 // your logic here
增加一行 fmt.Println("Reconciler")
别忘了在 import
中增加 fmt
引入
然后再来一遍 make && make install && make run
现在你再执行 kubectl delete -f config/samples/ ; kubectl apply -f config/samples/
的时候,你会在日志中看到 Reconciler
输出信息
有疑问加站长微信联系(非本文作者)