Win10基于docker的centos镜像搭建kubebuilder
主要分为
- docker安装centos
- centos安装go
- win10启动minikube
- centos中配置kubeconfig
- 安装kubebuilder
- 初始化项目及create api
1.docker容器下载centos image并安装
docker pull centos:7
docker images
查看imageid,基于该镜像创建容器
#指定容器名称为centos7
#-d 后台运行,返回容器ID
#-i交互式运行 -t为容器分片一个伪输入终端
#-v 绑定一个卷
docker run --name centos7 -d -i -t -v /d/workspace/docker/data:/data eeb6ee3f44bd /bin/bash
#查看容器id,进入容器
docker exec -it bc76a bash
#安装ifconfig,并查看ip
yum install net-tools -y
2.安装go
由于kubebuilder对go语言版本很敏感,因此不适于yum install golang的方式,采用自己下载对应版本
在/usr/local目录下载并解压
#先yum install wget
wget https://dl.google.com/go/go1.16.9.linux-amd64.tar.gz --no-check-certificate
tar -zxf go1.16.9.linux-amd64.tar.gz
编辑环境变量配置
vi /etc/profile
#golang env config
export GO111MODULE=on
export GOROOT=/usr/local/go
export GOPATH=/home/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY=https://goproxy.cn,direct
#切换proxy,解决下载代码x509问题
#go env -w GOPROXY=https://goproxy.cn,direct
source /etc/profile使之生效
使用go version命令查看版本
[root@d7b3fb5aa6ce guestbook]# go version
go version go1.16.9 linux/amd64
同时创建GO Path目录/home/gopath
安装kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
win10启动minikube
minikube不推荐在局域网中使用,因此,默认的集群只能使用127.0.0.1来访问,因此centos7容器中的kubebuilder是无法访问的,因此,启动minikube的方式需要调整
#指定non-local traffic可访问,并指定ip(xxx换成本机局域网ip)
minikube start --driver=docker --listen-address=0.0.0.0 --apiserver-ips=xxx
#minikube start --driver=docker 常规方式启动
启动minikube后,使用以下命令获取config
kubectl config view --minify --flatten
将其内容中clusters/server中的127.0.0.1改为本机ip,此时的config可以被centos中的kubebuilder访问到了
centos中配置kubeconfig
将minikube config中的内容拷贝到centos的~/.kube/config中
使用命令测试
sh-4.2# kubectl get ns
NAME STATUS AGE
default Active 18m
kube-node-lease Active 18m
kube-public Active 18m
kube-system Active 18m
ok,连接minikube成功
安装kubebuilder
curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) -k
chmod +x kubebuilder && mv kubebuilder /usr/local/bin/
使用kubebuilder version查看版本
[root@d7b3fb5aa6ce guestbook]# kubebuilder version
Version: main.version{KubeBuilderVersion:"3.1.0", KubernetesVendor:"1.19.2", GitCommit:"92e0349ca7334a0a8e5e499da4fb077eb524e94a", BuildDate:"2021-05-27T17:54:28Z", GoOs:"linux", GoArch:"amd64"}
初始化项目
我们在启动容器时挂载了目录,因此工作目录需创建到/data中
mkdir -p /data/guestbook
cd /data/guestbook
kubebuilder init --domain my.domain --repo my.domain/guestbook
#先安装make
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
kubebuilder create api --group webapp --version v1 --kind Guestbook
此时win10的文件目录下可看到刚才生成的代码
此时就可以用Win10上的IDE工具打开这个项目了
run
使用make install安装crd
sh-4.2# kubectl get crd
NAME CREATED AT
guestbooks.webapp.my.domain 2021-10-21T12:28:28Z
run程序
sh-4.2# make run
/data/guestbook/bin/controller-gen "crd:trivialVersions=true,preserveUnknownFields=false" rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
/data/guestbook/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
go fmt ./...
go vet ./...
go run ./main.go
2021-10-21T12:30:01.475Z INFO controller-runtime.metrics metrics server is starting to listen {"addr": ":8080"}
2021-10-21T12:30:01.476Z INFO setup starting manager
2021-10-21T12:30:01.476Z INFO controller-runtime.manager starting metrics server {"path": "/metrics"}
2021-10-21T12:30:01.476Z INFO controller-runtime.manager.controller.guestbook Starting EventSource {"reconciler group": "webapp.my.domain", "reconciler kind": "Guestbook", "source": "kind source: /, Kind="}
2021-10-21T12:30:01.577Z INFO controller-runtime.manager.controller.guestbook Starting Controller {"reconciler group": "webapp.my.domain", "reconciler kind": "Guestbook"}
2021-10-21T12:30:01.577Z INFO controller-runtime.manager.controller.guestbook Starting workers {"reconciler group": "webapp.my.domain", "reconciler kind": "Guestbook", "worker count": 1}
#部署一个测试的CRD
kubectl apply -f config/samples/webapp_v1_guestbook.yaml
make run控制台打印对应log