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


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

    这里写图片描述

    列举步骤

    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实战中有所帮助;

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/yhaing/p/8568751.html
Copyright © 2020-2023  润新知