kubebuilder实战之六:构建部署运行

欢迎访问我的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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwpygj.html