-
kubebuilder实战之一:准备工作
关于kubebuilder
在实际工作中,对kubernetes的资源执行各种个性化配置和控制是很常见的需求,例如自定义镜像的pod如何控制副本数、主从关系,以及各种自定义资源的控制等;
对于上述需求,很适合使用Operator 模式来解决,这里有官方对Operator的介绍:https://kubernetes.io/zh/docs/concepts/extend-kubernetes/operator/ ,Operator模式的执行流程如下图所示:
为了简化Operator开发,我们可以选用一些已有的开源工具,kubebuilder就是其中之一,《kubebuilder实战》系列就是对此工具由浅入深的实践;
本篇概览
作为《kubebuilder实战》系列的开篇,除了前面对kubebuilder的简单说明,还会列出整个实战的通用环境信息,以及涉及到的软件版本,然后再搭建好kubebuilder开发环境,总的来说需要做好以下准备工作,才能顺利开始kubebuilder的开发工作:
kubectl安装和配置,这样可以在kubebuilder电脑上操作kubernetes环境;
安装golang
安装docker
安装kustomize
安装kubebuilder
环境信息
如下图,整个实战环境一共由两台电脑组成:
kubernetes电脑:hostname是k8s,上面运行着1.20版本的kubernetes,关于kubernetes的部署不是本文重点,请参考其他教程完成,需要确保kubernetes正常可用;
kubebuilder电脑:操作系统是CentoOS-7.9.2009,hostname是kubebuilder,咱们的实战就在这台电脑上操作;
kubebuilder版本:2.3.1
go版本:1.15.6
docker版本:19.03.13
为了省事儿,所有操作都是用root帐号执行的;
kubectl安装和配置
执行以下命令在线安装:
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
1
如果您无法访问上述地址,可以在此下载(0积分):https://download.csdn.net/download/boling_cavalry/14925948
kubectl文件下载到linux机器后,执行命令chmod +x ./kubectl,给文件可执行权限;
执行以下命令,将kubectl移动到可以全局访问的目录下:
mv ./kubectl /usr/local/bin/kubectl
1
新建~/.kube/目录;
登录k8s电脑,在~/.kube/目录下有个config文件,将此文件复制到kubebuilder电脑的~/.kube/目录下;
回到kubebuilder电脑,此时执行kubectl命令可以直接操作k8s电脑上的kubernetes了:
[root@kubebuilder ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s Ready control-plane,master 33m v1.20.2 192.168.133.211 <none> CentOS Linux 7 (Core) 3.10.0-1160.11.1.el7.x86_64 docker://19.3.13
[root@kubebuilder ~]#
[root@kubebuilder ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7f89b7bc75-fw928 1/1 Running 0 33m
kube-system coredns-7f89b7bc75-tv7tk 1/1 Running 0 33m
kube-system etcd-k8s 1/1 Running 0 33m
kube-system kube-apiserver-k8s 1/1 Running 0 33m
kube-system kube-controller-manager-k8s 1/1 Running 0 33m
kube-system kube-flannel-ds-q9f64 1/1 Running 0 32m
kube-system kube-proxy-clmbf 1/1 Running 0 33m
kube-system kube-scheduler-k8s 1/1 Running 0 33m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
安装golang
安装必要应用:
yum install unzip tree wget gcc gcc-c++ kernel-devel -y
1
用我准备好的脚本安装golang并设置好环境变量:
curl -o install-go.sh \
https://raw.githubusercontent.com/zq2599/blog_demos/master/files/install-go.sh \
&& chmod a+x ./install-go.sh \
&& ./install-go.sh
1
2
3
4
执行完上述命令后,控制台会输出类似下面的内容,可见hello.go文件可以被成功执行,表示go环境部署成功,并且输出的环境变量也是正常的:
...
5. create go source file
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
6. run hello.go
Hello world!
go1.15.6 install and check finished
1
2
3
4
5
6
7
8
9
10
11
12
执行source .bashrc确保当前shell环境中的环境变量已经生效;
安装docker
执行以下命令完成docker的安装和启动:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum -y install docker-ce-19.03.13
systemctl start docker
systemctl enable docker
1
2
3
4
5
6
验证安装是否成功:
[root@kubebuilder ~]# docker version
Client: Docker Engine - Community
Version: 20.10.2
API version: 1.40
Go version: go1.13.15
Git commit: 2291f61
Built: Mon Dec 28 16:17:48 2020
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:21 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.3
GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc:
Version: 1.0.0-rc92
GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
docker-init:
Version: 0.18.0
GitCommit: fec3683
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
设置镜像加速,否则下载镜像慢并且时常超时,执行以下命令完成镜像加速的设置并使其生效:
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
1
2
3
4
5
6
7
8
9
安装kustomize
后面的操作中需要使用kustomize去做配置管理,执行以下命令即可安装:
mkdir -p $GOPATH/bin
cd $GOPATH/bin
GOBIN=$(pwd)/ GO111MODULE=on go get sigs.k8s.io/kustomize/kustomize/v3
1
2
3
安装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
1
2
3
4
5
执行命令确认安装成功:
[root@kubebuilder ~]# kubebuilder version
Version: version.Version{KubeBuilderVersion:"2.3.1", KubernetesVendor:"1.16.4", GitCommit:"8b53abeb4280186e494b726edf8f54ca7aa64a49", BuildDate:"2020-03-26T16:42:00Z", GoOs:"unknown", GoArch:"unknown"}
1
2
至此,kubebuilder开发环境的准备工作就完成了,接下来的章节咱们正式进入开发实战,一起去学习精彩的kubernetes operator;
————————————————
版权声明:本文为CSDN博主「程序员欣宸」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/boling_cavalry/article/details/113035349
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比