用kubectl get命令检查pod,可见已经降到1个了:
zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl get pod -n dev NAME READY STATUS RESTARTS AGE elasticweb-sample-56fc5848b7-l5thk 1/1 Running 0 30m记得用浏览器检查tomcat是否正常;
修改总QPS
外部QPS也在频繁变化中,咱们的operator也需要根据总QPS及时调节pod实例,以确保整体服务质量,接下来咱们就修改总QPS,看operator是否生效:
在config/samples/目录下新增名为update_total_qps.yaml的文件,内容如下:
spec: totalQPS: 2600执行以下命令,即可将总QPS从600更新为2600(注意,参数type很重要别漏了):
kubectl patch elasticweb elasticweb-sample \ -n dev \ --type merge \ --patch "$(cat config/samples/update_total_qps.yaml)"此时去看controller日志,如下图,红框1表示spec已经更新,红框2则表示用最新的参数计算出来的pod数量,符合预期:
用kubectl get命令检查pod,可见已经增长到4个,4个pd的能支撑的QPS为3200,满足了当前2600的要求:
zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl get pod -n dev NAME READY STATUS RESTARTS AGE elasticweb-sample-56fc5848b7-8n7tq 1/1 Running 0 8m22s elasticweb-sample-56fc5848b7-f2lpb 1/1 Running 0 8m22s elasticweb-sample-56fc5848b7-l5thk 1/1 Running 0 48m elasticweb-sample-56fc5848b7-q8p5f 1/1 Running 0 8m22s记得用浏览器检查tomcat是否正常;
聪明的您一定会觉得用这个方法来调节pod数太low了,呃...您说得没错确实low,但您可以自己开发一个应用,收到当前QPS后自动调用client-go去修改elasticweb的totalQPS,让operator及时调整pod数,这也勉强算自动调节了......吧
删除验证目前整个dev这个namespace下有service、deployment、pod、elasticweb这些资源对象,如果要全部删除,只需删除elasticweb即可,因为service和deployment都和elasticweb建立的关联关系,代码如下图红框:
执行删除elasticweb的命令:
kubectl delete elasticweb elasticweb-sample -n dev再去查看其他资源,都被自动删除了:
zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl delete elasticweb elasticweb-sample -n dev elasticweb.elasticweb.com.bolingcavalry "elasticweb-sample" deleted zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl get pod -n dev NAME READY STATUS RESTARTS AGE elasticweb-sample-56fc5848b7-9lcww 1/1 Terminating 0 45s elasticweb-sample-56fc5848b7-n7p7f 1/1 Terminating 0 45s zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl get pod -n dev NAME READY STATUS RESTARTS AGE elasticweb-sample-56fc5848b7-n7p7f 0/1 Terminating 0 73s zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl get pod -n dev No resources found in dev namespace. zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl get deployment -n dev No resources found in dev namespace. zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl get service -n dev No resources found in dev namespace. zhaoqin@zhaoqindeMBP-2 elasticweb % kubectl get namespace dev NAME STATUS AGE dev Active 97s 构建镜像前面咱们在开发环境将controller运行起来尝试了所有功能,在实际生产环境中,controller并非这样独立于kubernetes之外,而是以pod的状态运行在kubernetes之中,接下来咱们尝试将controller代码编译构建成docker镜像,再在kubernetes上运行起来;
要做的第一件事,就是在前面的controller控制台上执行Ctrl+C,把那个controller停掉;
这里有个要求,就是您要有个kubernetes可以访问的镜像仓库,例如局域网内的Harbor,或者公共的hub.docker.com,我这为了操作方便选择了hub.docker.com,使用它的前提是拥有hub.docker.com的注册帐号;
在kubebuilder电脑上,打开一个控制台,执行docker login命令登录,根据提示输入hub.docker.com的帐号和密码,这样就可以在当前控制台上执行docker push命令将镜像推送到hub.docker.com上了(这个网站的网络很差,可能要登录好几次才能成功);
执行以下命令构建docker镜像并推送到hub.docker.com,镜像名为bolingcavalry/elasticweb:002:
make docker-build docker-push IMG=bolingcavalry/elasticweb:002hub.docker.com的网络状况不是一般的差,kubebuilder电脑上的docker一定要设置镜像加速,上述命令如果遭遇超时失败,请重试几次,此外,构建过程中还会下载诸多go模块的依赖,也需要您耐心等待,也很容易遇到网络问题,需要多次重试,所以,最好是使用局域网内搭建的Habor服务;