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

posted on 2021-10-25 15:38  j.liu windliu  阅读(666)  评论(0编辑  收藏  举报