kubernetes 下的 Nginx 加 Tomcat 三部曲之三
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
本章是《kubernetes 下的 Nginx 加 Tomcat 三部曲系列》的终篇,今天咱们一起在 kubernetes 环境对下图中 tomcat 的数量进行调整,再修改 tomcat 中 web 工程的源码,并将现有的 tomcat 的 pod 全部替换成新代码构建的结果:
往期章节
列举步骤
在线扩容 Tomcat;
验证扩容结果;
修改 web 工程源码;
构建 web 工程的新镜像;
让 kubernetes 的机器用上 web 工程的 Docker 镜像
在线更新 Tomcat 的 pod 的镜像;
验证更新结果;
Nginx&Tomcat 方式和 SpringCloud 方式扩容对比;
kubernetes 环境基本情况
一个 master,一个 node;
master 的 IP 地址:192.168.119.148;
node1 的 IP 地址:192.168.119.153;
在线扩容 Tomcat
在装好 kubectl 工具的机器上执行 kubectl get pods,查看当前 pod 情况:
如上所示,目前是三个 tomcat 的 pod;
执行扩容命令 kubectl scale deployment tomcathost --replicas=5,将 tomcat 的 pod 从 3 个增加到 5 个,如下:
tomcat 的 pod 已经增加到 5 个了,创建时间都只有 18 秒;
去 dashboard 页面看以下 tomcathost 这个 deployment 的详情,可以看到 tomcat 数量已经上升到 5 个了,扩容成功:
点击上图红框 1,再点击 tomcathost 这个服务,可以看到上图中的详情;
上图红框 2 中是 5 个 tomcat 的 pod 的容器 IP 地址;
点击上图红框 3 中的每个容器名,可以查看容器详情;
上图红框 4 显示了刚才的扩容事件;
验证扩容结果
nginx 服务所在的 node 机器的 IP 地址是 192.168.119.153,所以在浏览器上访问:http://192.168.119.153:30006/getserverinfo ,反复刷新此页面,看到返回的 IP 地址在不断的更新,都是 tomcat 所在 pod 的 IP 地址,5 个都会出现,如下图:
扩容实战就到这里,接下来我们修改 web 工程的源码,验证在线升级的能力;
修改 web 工程源码
tomcat 上运行的 web 工程源码,可以 GitHub 下载,地址和链接信息如下表所示:
这个 git 项目中有多个目录,本次的 web 工程源码放在 k8stomcatdemo,如下图红框所示:
打开工程中的 ServerInfo.java,web 接口的源码如下:
修改返回的字符串内容,在前面加上"From new version,":
构建 web 工程的新镜像
修改 pom.xml 中的工程版本,从<font color="blue>0.0.1-SNAPSHOT 改为<font color="blue>0.0.3,如下所示:
在 pom.xml 所在目录执行 mvn clean package -DskipTests docker:build,会编译构建工程,并且在本地制作好镜像文件,如下:
让 kubernetes 的机器用上 web 工程的 Docker 镜像
现在的镜像只存在于开发和构建 web 工程的电脑上,为了让 kubernetes 的 node 机器能用上这个镜像,可以用以下几种方式实现:
用 docker push 命令将本机镜像推送到 hub.docker.com 网站,这样其他机器都可以通过 docker pull 命令取得了,我就是用的这种方法,需要在 hub.docker.com 上注册,下图是正在 push 中:
用 docker save 命令导出镜像文件,再用 docker load 命令导入;
kubernetes 所在机器安装 java 和 maven 环境,将工程在这里编译构建;
使用 docker 私有仓库,例如搭建局域网私有仓库或者阿里云私有仓库,参考《maven构建docker镜像三部曲之三:推送到远程仓库(内网和阿里云)》;
在线更新 Tomcat 的 pod 的镜像
在 kubernetes 上执行以下命令,即可升级镜像,当前的 5 个 tomcat 的 pod 会被销毁,然后用新的镜像创建 pod:
控制台提示的信息如下:
此刻反复执行 kubectl get pod,会看到新容器创建,旧容器正在被销毁,如下:
Nginx&Tomcat 方式和 SpringCloud 方式扩容对比
在之前的文章中,我们实战了 SpringCloud 环境下服务提供方的扩容,由于是“注册 &发现”的方式,扩容只需要往 SpringCloud 环境添加 provider 机器,不需要做什么设置,请求就会被落到新的 provider 上,相关实战的地址如下:
在 Nginx 加 Tomcat 环境中,如果不是在 kubernetes 环境,我们增加 Tomcat 之后需要修改 Nginx 配置,否则到达 Nginx 的请求不会被转发到新的机器上去,幸运的是 kubernete 帮我们解决了这个问题,扩容缩容都只需要控制副本数即可,不用修改 Nginx 配置了;
doceker-compose 虽然可以修改副本数,但是 Nginx 的配置仍然需要修改,否则新创建的 Tomcat 容器都有自己的 IP 地址,Nginx 还是感知不到;
至此,kubernetes 下的 Nginx 加 Tomcat 三部曲就全部结束了,希望能在您的 kubernetes 实战中有所帮助;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/f745fb835b64a18e39309cc72】。文章转载请联系作者。
评论