欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
系列文章链接kubebuilder实战之一:准备工作
kubebuilder实战之二:初次体验kubebuilder
kubebuilder实战之三:基础知识速览
kubebuilder实战之四:operator需求说明和设计
kubebuilder实战之五:operator编码
kubebuilder实战之六:构建部署运行
kubebuilder实战之七:webhook
kubebuilder实战之八:知识点小记
本篇概览作为《kubebuilder实战》系列的第六篇,前面已完成了编码,现在到了验证功能的环节,请确保您的docker和kubernetes环境正常,然后咱们一起完成以下操作:
部署CRD
本地运行Controller
通过yaml文件新建elasticweb资源对象
通过日志和kubectl命令验证elasticweb功能是否正常
浏览器访问web,验证业务服务是否正常
修改singlePodQPS,看elasticweb是否自动调整pod数量
修改totalQPS,看elasticweb是否自动调整pod数
删除elasticweb,看相关的service和deployment被自动删除
构建Controller镜像,在kubernetes运行此Controller,验证上述功能是否正常
看似简单的部署验证操作,零零散散加起来居然有这么多...好吧不感慨了,立即开始吧;
部署CRD从控制台进入Makefile所在目录,执行命令make install,即可将CRD部署到kubernetes:
zhaoqin@zhaoqindeMBP-2 elasticweb % make install /Users/zhaoqin/go/bin/controller-gen "crd:trivialVersions=true" rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases kustomize build config/crd | kubectl apply -f - Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition customresourcedefinition.apiextensions.k8s.io/elasticwebs.elasticweb.com.bolingcavalry configured
从上述内容可见,实际上执行的操作是用kustomize将config/crd下的yaml资源合并后在kubernetes进行创建;
可以用命令kubectl api-versions验证CRD部署是否成功:
zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl api-versions|grep elasticweb elasticweb.com.bolingcavalry/v1 本地运行Controller先尝试用最简单的方式来验证Controller的功能,如下图,Macbook电脑是我的开发环境,直接用elasticweb工程中的Makefile,可以将Controller的代码在本地运行起来里面:
进入Makefile文件所在目录,执行命令make run即可编译运行controller:
zhaoqin@zhaoqindeMBP-2 elasticweb % pwd /Users/zhaoqin/github/blog_demos/kubebuilder/elasticweb zhaoqin@zhaoqindeMBP-2 elasticweb % make run /Users/zhaoqin/go/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..." go fmt ./... go vet ./... /Users/zhaoqin/go/bin/controller-gen "crd:trivialVersions=true" rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases go run ./main.go 2021-02-20T20:46:16.774+0800 INFO controller-runtime.metrics metrics server is starting to listen {"addr": ":8080"} 2021-02-20T20:46:16.774+0800 INFO setup starting manager 2021-02-20T20:46:16.775+0800 INFO controller-runtime.controller Starting EventSource {"controller": "elasticweb", "source": "kind source: /, Kind="} 2021-02-20T20:46:16.776+0800 INFO controller-runtime.manager starting metrics server {"path": "/metrics"} 2021-02-20T20:46:16.881+0800 INFO controller-runtime.controller Starting Controller {"controller": "elasticweb"} 2021-02-20T20:46:16.881+0800 INFO controller-runtime.controller Starting workers {"controller": "elasticweb", "worker count": 1} 新建elasticweb资源对象
负责处理elasticweb的Controller已经运行起来了,接下来就开始创建elasticweb资源对象吧,用yaml文件来创建;
在config/samples目录下,kubebuilder为咱们创建了demo文件elasticweb_v1_elasticweb.yaml,不过这里面spec的内容不是咱们定义的那四个字段,需要改成以下内容:
apiVersion: v1 kind: Namespace metadata: name: dev labels: name: dev --- apiVersion: elasticweb.com.bolingcavalry/v1 kind: ElasticWeb metadata: namespace: dev name: elasticweb-sample spec: # Add fields here image: tomcat:8.0.18-jre8 port: 30003 singlePodQPS: 500 totalQPS: 600对上述配置的几个参数做如下说明:
使用的namespace为dev
本次测试部署的应用为tomcat
service使用宿主机的30003端口暴露tomcat的服务
假设单个pod能支撑500QPS,外部请求的QPS为600
执行命令kubectl apply -f config/samples/elasticweb_v1_elasticweb.yaml,即可在kubernetes创建elasticweb实例:
zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl apply -f config/samples/elasticweb_v1_elasticweb.yaml namespace/dev created elasticweb.elasticweb.com.bolingcavalry/elasticweb-sample created