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模式的执行流程如下图所示:
image
-
为了简化Operator开发,我们可以选用一些已有的开源工具,kubebuilder就是其中之一,《kubebuilder实战》系列就是对此工具由浅入深的实践;
开发环境搭建
开发架构
开发环境一共由两台电脑组成的架构:
image
软件依赖
- 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
image
说明:如果因为无法下载网络资源导致的部署失败,请自觉想办法;
扩展阅读
kubebuilder开发环境的准备工作就完成了,接下来的章节正式进入开发实战,一起去学习精彩的kubernetes operator;
operator 版本迭代还是比较快的,当前的文章也不一定可以支持 未来某一时刻你的参考和使用的技巧,先进技术的学习和掌握,往往需要春江水暖鸭先知的思维意识呢!万不可人云亦云,尤其针对社区快速迭代的开发和设计我们往往需要掌握的是便捷无碍的网络通信,还有软件开发版本的问题,每一篇文档都是基于作者的时代和应用场景进行开发设计出来的,所谓思想是具有每个人的独特性的,所以我喜欢每次交流时总会事先说明一下。
网友评论