kubebuilder初探-基本使用流程

坚持到底v2 · · 1708 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


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 输出信息


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:坚持到底v2

查看原文:kubebuilder初探-基本使用流程

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1708 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传