kubebuilder 简介
自定义资源 CRD(Custom Resource Definition)可以扩展 Kubernetes API,掌握 CRD 是成为 Kubernetes 高级玩家的必备技能,本文将介绍 CRD 和 Controller 的概念,并对 CRD 编写框架 Kubebuilder 进行深入分析,通过本文可以真正理解并能快速开发 CRD。
- 在实际工作中,对kubernetes的资源执行各种个性化配置和控制是很常见的需求,例如自定义镜像的pod如何控制副本数、主从关系,以及各种自定义资源的控制等;
- 对于上述需求,很适合使用Operator 模式来解决,这里有官方对Operator的介绍:https://kubernetes.io/zh/docs/concepts/extend-kubernetes/operator/ ,Operator模式的执行流程如下图所示:
- 为了简化Operator开发,我们可以选用一些已有的开源工具,kubebuilder就是其中之一,《kubebuilder实战》系列就是对此工具由浅入深的实践;
开发环境搭建
开发架构
开发环境一共由两台电脑组成的架构:
软件依赖
- kubernetes集群环境;
- kubebuilder电脑(CENTOS7);
- kubebuilder版本:2.3.1
- go版本:1.15.6
- docker版本:19.03.13
配置部署
- kubectl安装和配置,这样可以在kubebuilder电脑上操作kubernetes环境;
自行安装部署即可,参照本次的开发设计,此次开发为了便于项目的部署和实施,k8s 和 kubebuilder 的开发环境为同一台虚拟机即可。 - 安装golang;
# 安装必要应用
yum install unzip tree wget gcc gcc-c++ kernel-devel -y
# 脚本安装golang并设置好环境变量:
chmod a+x ./install-go.sh \
&& ./install-go.sh
其中 install-go.sh 脚本如下:
#!/bin/bash
# 下载 go
wget -P /tmp https://golang.google.cn/dl/go1.15.6.linux-amd64.tar.gz
tar -C /usr/local -xzf /tmp/go1.15.6.linux-amd64.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
# 配置 GOPATH & GOROOT
echo "export GOROOT=/usr/local/go" >> /etc/profile
mkdir -p /home/gowork
echo "export GOPATH=/home/gowork" >> /etc/profile
source /etc/profile
go env
go version
echo $GOPATH
echo $GOROOT
- 安装docker;
环境默认存在,因为开发环境为 k8s 默认就会存在 docker,所以无需安装,默认使用即可;
设置镜像加速,执行以下命令完成镜像加速的设置并使其生效:
tee /etc/docker/daemon.json <<-EOF
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
# 重启加载 docker
systemctl daemon-reload
systemctl restart docker
- 安装kustomize;
# 配置 Go 代理
export GO111MODULE=on
export GOPROXY=https://goproxy.io/
# 安装 kustomize 模块
mkdir -p $GOPATH/bin
cd $GOPATH/bin
GOBIN=$(pwd)/ GO111MODULE=on go get sigs.k8s.io/kustomize/kustomize/v3
- 安装kubebuilder;
# 以下脚本通过go命令确定当前系统和CPU架构,再去服务器下载对应的kubebuilder文件,然后设置环境变量:
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 version
说明:如果因为无法下载网络资源导致的部署失败,请自觉想办法;