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實戰中有所幫助;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM