Post

使用Kubebuilder创建Operator

使用Kubebuilder创建Operator

1. 目标

  • 创建 CRD(自定义资源)
  • 创建 Controller(调谐逻辑)
  • 本地运行调试(make run)
  • 明确工具链(controller-gen)

2. 安装 Go(>=1.23)

1
2
3
cd /work/src
wget https://mirrors.aliyun.com/golang/go1.23.7.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.23.7.linux-amd64.tar.gz

配置环境变量:

1
2
3
4
5
6
7
cat >> ~/.bashrc <<'EOF'
export GOROOT=/usr/local/go
export GOPATH=/work/go
export PATH=$GOROOT/bin:$GOPATH/bin:/work/bin:$PATH
EOF

source ~/.bashrc

3.安装kubebuilder

1
2
3
4
cd /work/bin
curl -fLo kubebuilder https://files.m.daocloud.io/github.com/kubernetes-sigs/kubebuilder/releases/download/v4.5.2/kubebuilder_linux_amd64
chmod +x kubebuilder
kubebuilder version

4.安装 controller-gen

作用:

  • 生成 CRD(make manifests 依赖)
  • 解析 kubebuilder 注解
    1
    2
    
    GOBIN=/work/bin go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.16.5
    controller-gen --version
    

5.创建Operator工程

1
2
3
4
5
6
cd /work/src/operators
mkdir -p guestbook-operator
cd guestbook-operator

go mod init alphabethub.com/guestbook-operator
kubebuilder init --domain alphabethub.com --repo alphabethub.com/guestbook-operator

6.创建API(CRD+Controller)

1
kubebuilder create api --group apps --version v1alpha1 --kind Guestbook --resource --controller

7.生成代码

1
2
make manifests
make generate

8.安装CRD

1
make install

验证

1
kubectl get crd | grep guestbook

9.本地运行controller

1
make run

说明:

  • 使用当前 kubeconfig(kind)
  • 不需要构建镜像
  • 最适合开发调试

10.创建资源(触发Reconcile)

1
2
kubectl apply -f config/samples/apps_v1alpha1_guestbook.yaml
kubectl get guestbooks -A

11.验证

观察controller日志,确认Watch 生效,Reconcile 正常执行,Operator 工作正常

12.调试建议

终端1(controller):

1
make run

终端2(资源操作):

1
2
kubectl apply -f ...
kubectl get guestbooks -A

终端3(观察集群):

1
2
kubectl get pods -A
kubectl get events -A

13.可选工具

envtest(本地 API Server 测试)

1
GOBIN=/work/bin go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest

ginkgo(测试框架)

1
GOBIN=/work/bin go install github.com/onsi/ginkgo/v2/ginkgo@latest
This post is licensed under CC BY 4.0 by the author.