关闭

kubernetes下的Nginx加Tomcat三部曲之三:实战扩容和升级

标签: kubernetesdockernginxtomcatk8s
632人阅读 评论(0) 收藏 举报
分类:

本章是《kubernetes下的Nginx加Tomcat三部曲系列》的终篇,今天咱们一起在kubernetes环境对下图中tomcat的数量进行调整,再修改tomcat中web工程的源码,并将现有的tomcat的pod全部替换成新代码构建的结果:

这里写图片描述

往期章节

  1. 《kubernetes下的Nginx加Tomcat三部曲之一:极速体验》
  2. 《kubernetes下的Nginx加Tomcat三部曲之二:细说开发》

列举步骤

  1. 在线扩容Tomcat;
  2. 验证扩容结果;
  3. 修改web工程源码;
  4. 构建web工程的新镜像;
  5. 让kubernetes的机器用上web工程的Docker镜像
  6. 在线更新Tomcat的pod的镜像;
  7. 验证更新结果;
  8. Nginx&Tomcat方式和SpringCloud方式扩容对比;

kubernetes环境基本情况

  1. 一个master,一个node;
  2. master的IP地址:192.168.119.148;
  3. node1的IP地址:192.168.119.153;

在线扩容Tomcat

  • 在装好kubectl工具的机器上执行kubectl get pods,查看当前pod情况:
root@master:~# kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
ng-59b887b8bc-jzcv5           1/1       Running   3          2d
tomcathost-7f68566795-8pl29   1/1       Running   3          2d
tomcathost-7f68566795-mvg5f   1/1       Running   3          2d
tomcathost-7f68566795-trscg   1/1       Running   3          2d

如上所示,目前是三个tomcat的pod;

  • 执行扩容命令kubectl scale deployment tomcathost –replicas=5,将tomcat的pod从3个增加到5个,如下:
root@master:~# kubectl scale deployment tomcathost --replicas=5
deployment "tomcathost" scaled
root@master:~# kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
ng-59b887b8bc-jzcv5           1/1       Running   3          2d
tomcathost-7f68566795-8kf76   1/1       Running   0          18s
tomcathost-7f68566795-8pl29   1/1       Running   3          2d
tomcathost-7f68566795-mvg5f   1/1       Running   3          2d
tomcathost-7f68566795-tp5xp   1/1       Running   0          18s
tomcathost-7f68566795-trscg   1/1       Running   3          2d

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下载,地址和链接信息如下表所示:

名称 链接 备注
项目主页 https://github.com/zq2599/blog_demos 该项目在GitHub上的主页
git仓库地址(https) https://github.com/zq2599/blog_demos.git 该项目源码的仓库地址,https协议
git仓库地址(ssh) git@github.com:zq2599/blog_demos.git 该项目源码的仓库地址,ssh协议


这个git项目中有多个目录,本次的web工程源码放在k8stomcatdemo,如下图红框所示:

这里写图片描述

  • 打开工程中的ServerInfo.java,web接口的源码如下:
@RequestMapping(value = "/getserverinfo", method = RequestMethod.GET)
    public String getUserInfoWithRequestParam(){
        return String.format("server : %s, time : %s", getIPAddr(), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }
  • 修改返回的字符串内容,在前面加上”From new version,”:
@RequestMapping(value = "/getserverinfo", method = RequestMethod.GET)
    public String getUserInfoWithRequestParam(){
        return String.format("From new version, server : %s, time : %s", getIPAddr(), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }

构建web工程的新镜像

  • 修改pom.xml中的工程版本,从0.0.1-SNAPSHOT改为0.0.3,如下所示:
<groupId>com.bolingcavalry</groupId>
    <artifactId>k8stomcatdemo</artifactId>
    <version>0.0.3</version>
    <packaging>jar</packaging>
    <name>k8stomcatdemo</name>
  • 在pom.xml所在目录执行mvn clean package -DskipTests docker:build,会编译构建工程,并且在本地制作好镜像文件,如下:
root@maven:/usr/local/work/k8s/k8stomcatdemo# docker images
REPOSITORY                                              TAG                 IMAGE ID            CREATED             SIZE
bolingcavalry/k8stomcatdemo                             0.0.3               5f2d27eafd1b        17 seconds ago      658 MB
bolingcavalry/k8stomcatdemo                             latest              5f2d27eafd1b        17 seconds ago      658 MB

让kubernetes的机器用上web工程的Docker镜像

现在的镜像只存在于开发和构建web工程的电脑上,为了让kubernetes的node机器能用上这个镜像,可以用以下几种方式实现:
1. 用docker push命令将本机镜像推送到hub.docker.com网站,这样其他机器都可以通过docker pull命令取得了,我就是用的这种方法,需要在hub.docker.com上注册,下图是正在push中:
这里写图片描述
2. 用docker save命令导出镜像文件,再用docker load命令导入;
3. kubernetes所在机器安装java和maven环境,将工程在这里编译构建;
4. 使用docker私有仓库,例如搭建局域网私有仓库或者阿里云私有仓库,参考《maven构建docker镜像三部曲之三:推送到远程仓库(内网和阿里云)》

在线更新Tomcat的pod的镜像

  • 在kubernetes上执行以下命令,即可升级镜像,当前的5个tomcat的pod会被销毁,然后用新的镜像创建pod:
kubectl set image deployment/tomcathost tomcathost=bolingcavalry/k8stomcatdemo:0.0.3
  • 控制台提示的信息如下:
root@maven:/usr/local/work/k8s/k8stomcatdemo# kubectl set image deployment/tomcathost tomcathost=bolingcavalry/k8stomcatdemo:0.0.3
deployment "tomcathost" image updated
  • 此刻反复执行kubectl get pod,会看到新容器创建,旧容器正在被销毁,如下:
root@maven:/usr/local/work/k8s/k8stomcatdemo# kubectl get pod
NAME                          READY     STATUS              RESTARTS   AGE
ng-59b887b8bc-jzcv5           1/1       Running             3          2d
tomcathost-6dfc87dc8b-9bkfv   1/1       Running             0          50s
tomcathost-6dfc87dc8b-h6gx4   0/1       ContainerCreating   0          50s
tomcathost-6dfc87dc8b-ht2d8   1/1       Running             0          18s
tomcathost-6dfc87dc8b-pfb56   1/1       Running             0          10s
tomcathost-6dfc87dc8b-x8pnn   1/1       Running             0          14s
tomcathost-7f68566795-8pl29   0/1       Terminating         3          2d
tomcathost-7f68566795-trscg   0/1       Terminating         3          2d

验证更新结果

  • nginx服务所在的node机器的IP地址是192.168.119.153,所以在浏览器上访问:http://192.168.119.153:30006/getserverinfo,可以看到”From new version”这个字符串,如下图:
    这里写图片描述

  • 去dashboard页面看服务详情,可以看见一系列的缩容和扩容事件,如下图:
    这里写图片描述

Nginx&Tomcat方式和SpringCloud方式扩容对比

在之前的文章中,我们实战了SpringCloud环境下服务提供方的扩容,由于是“注册&发现”的方式,扩容只需要往SpringCloud环境添加provider机器,不需要做什么设置,请求就会被落到新的provider上,相关实战的地址如下:
1. 《Docker下的Spring Cloud三部曲之一:极速体验》
2. 《Docker下的Spring Cloud三部曲之二:细说Spring Cloud开发》
3. 《Docker下的Spring Cloud三部曲之三:在线横向扩容》

在Nginx加Tomcat环境中,如果不是在kubernetes环境,我们增加Tomcat之后需要修改Nginx配置,否则到达Nginx的请求不会被转发到新的机器上去,幸运的是kubernete帮我们解决了这个问题,扩容缩容都只需要控制副本数即可,不用修改Nginx配置了;

doceker-compose虽然可以修改副本数,但是Nginx的配置仍然需要修改,否则新创建的Tomcat容器都有自己的IP地址,Nginx还是感知不到;

至此,kubernetes下的Nginx加Tomcat三部曲就全部结束了,希望能在您的kubernetes实战中有所帮助;

0
0
查看评论

Kubernetes实战(一)

1. 搭建集群在掌握了Docker的知识后,来尝试下Kubernetes(以下简称k8s) 新手就老老实实看官网的Guide,一步步往下走。 请自备梯子科学上网。 官网推荐我们使用 Google Cloud Platform 来完成集群的搭建,免费使用2个月,送300刀使用券,很良心,而且实际...
  • wyd987100
  • wyd987100
  • 2016-06-15 13:39
  • 4493

kubernetes下的Nginx加Tomcat三部曲之二:细说开发

本文是《kubernetes下的Nginx加Tomcat三部曲》的第二章,在《kubernetes下的Nginx加Tomcat三部曲之一:极速体验》一文我们快速部署了Nginx和Tomcat,达到以下效果: 本文我会详细说明在kubernetes部署上述网络服务时,需要做哪些具体的工作; 列...
  • boling_cavalry
  • boling_cavalry
  • 2018-02-02 20:03
  • 768

kubernetes下的Nginx加Tomcat三部曲之一:极速体验

章节介绍 在生产环境中,常用到Nginx加Tomcat的部署方式,如下图: 原文地址:http://blog.csdn.net/boling_cavalry/article/details/79215453 从本章开始,我们来实战kubernetes下部署上述Nginx和Tomcat服务,...
  • boling_cavalry
  • boling_cavalry
  • 2018-02-01 19:10
  • 435

Python学习笔记-实战篇

前言: 在学习的道路上我相信很多人都会一腔热血的开始,却在一次次碰壁中消磨,直至放弃。从个人经验来讲,无数次的碰壁并不是因为我学不会,而是我不知道学会了有什么用,能用这些知识做什么。因此本系列文章将立足所学即所得的角度阐述Python到底能用来做什么。 背景描述: 本人为编程0基础小白一枚,懂...
  • panwh1982
  • panwh1982
  • 2017-08-10 23:07
  • 136

傅盛认知三部曲之三:战略就是格局+破局

两年前,我写过一篇《一家公司CEO该如何做战略》。应该说,上市以来,我花在战略思考的时间,不少。伴随猎豹前进中遇到的一些问题,我的思考也在不断深入。 我曾经说过战略三部曲是预测-破局点-All in。破局的单点,被很多人讨论。但,预测这件事,给忽略了。然而,预测背后就是格局观。怎么...
  • notOnlyRush
  • notOnlyRush
  • 2017-06-05 11:03
  • 671

升级到Kubernetes1.6需要准备事项

原文:https://www.kubernetes.org.cn/1832.html 1、ETCD集群备份 在更新到1.6之前,强烈建议您备份ETCD集群中的数据。请查阅您正在使用的安装工具(kargo, kops, kube-up, kube-aws, kubeadm)以获得具...
  • qq_34463875
  • qq_34463875
  • 2017-04-18 16:59
  • 1191

centos下Nginx+tomcat整合安装配置

上次我们使用了apache来处理静态,tomcat来处理jsp程序,现在我们尝试使用处理静态更高效的nginx,通过nginx的代理模块,将jsp的处理传递给tomcat。 安装JRE 到http://www.oracle.com下载JRE软件。 wget http://d...
  • hitxiaya
  • hitxiaya
  • 2014-05-05 19:30
  • 6137

[Kubernetes] 容器挂载 ceph rbd 卷的平滑扩容方法

一、 背景介绍         在之前的博客已经介绍了 Kubernetes 集成 ceph 分布式存储实现数据持久化的技术;         本篇介绍如何对已经挂载到容器的rbd卷进行空间扩(缩)容! 二、 操作...
  • shida_csdn
  • shida_csdn
  • 2018-01-29 14:25
  • 100

[static pod部署方式]kubernetes 升级方式

0.prerequisite  1.下载文件:      从Kubernetes的github上下载最新的发布版    :https://github.com/kubernetes/kubernetes/releases 2.测试环境...
  • m1361459098
  • m1361459098
  • 2017-05-04 17:07
  • 909

kubernetes学习记录(7)——弹性伸缩与滚动升级

弹性伸缩弹性伸缩是指适应负载变化,以弹性可伸缩的方式提供资源。Pod的弹性伸缩就是修改Replication Controller的Pod副本数。可以通过Kubectl scale命令实现。创建Replication Controllertest-rc.yamlapiVersion: v1 kind...
  • huqigang
  • huqigang
  • 2017-08-04 15:31
  • 547
    个人资料
    • 访问:107395次
    • 积分:2109
    • 等级:
    • 排名:千里之外
    • 原创:100篇
    • 转载:0篇
    • 译文:0篇
    • 评论:50条
    博客专栏
    最新评论