docker微服務部署之:6、Rancher管理部署微服務html
Rancher有兩個特點用起來很方便,那就是擴容和縮容。java
爲了能直觀的查看效果,須要修改下demo_article項目的代碼。web
修改demo_article項目中ArticleController中的三處代碼:docker
1.注入HttpServletRequest;2在findAll()方法的message參數後面加上request.getLocalAddr(),用於顯示從調用的是哪一個ip的容器的服務;3.註釋掉pom中的instance-id瀏覽器
@Autowired private ArticleService articleService; @Autowired private HttpServletRequest request; @RequestMapping(method = RequestMethod.GET) public Result findAll(){ return new Result(true, "查詢成功"+request.getLocalAddr(), articleService.findAll()); }
instance: prefer-ip-address: true # instance-id: article.com #若是須要在eureka註冊多個服務,不能寫死instance-id
修改完成以後,在Idea中,經過DockerMaven插件,從新打包並部署article鏡像。bash
點擊Idea界面左小角的Terminal,輸入cd demo_article,進入demo_article項目下,再輸入mvn clean package docker:build,從新將demo_article打成java包,並構建article鏡像,並上傳到docker本地倉庫(192.168.31.181)中app
在docker中,查看article鏡像,能夠看到article鏡像在10秒前發生了變化,表示article鏡像更新成功。負載均衡
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE article latest c92e406bc72a 10 seconds ago 651MB
...
在瀏覽器輸入http://192.168.31.181:8080,進入rancher管理界面,而後在頂部導航欄中選擇test環境,再點擊頂部導航欄中的應用—所有,在點擊進入microservice應用內:微服務
以須要擴容article爲例。post
擴容article服務,簡單理解就是同一個article服務,要複製並運行多個article服務。那麼問題來了,運行的article服務,都是9001端口,而一個容器內,甚至一個系統內只有一個9001端口,這明顯是有問題的。因此,須要把該article服務刪除點,修改成不指定端口。
刪除article服務,點擊article服務那行最右邊豎着的三點,選擇刪除便可。
刪除以後,article服務就沒了,此時咱們須要再建立一個沒有指定端口的article服務。除不指定端口外,其餘都同樣。
點擊右上角的添加服務,配置圖中紅色框中的四處外,而後滾動到頁面底部,點擊建立
注意下圖中紅色框中的部分,端口號9001已經沒了。
在瀏覽器中訪問article服務,看看咱們前面demo_article打包並構建後的鏡像是否已經更新。因爲沒了端口,因此咱們不能再經過http://192.168.31.181:9001/article訪問,而是隻能經過zuul網關去訪問,也就是http://192.168.31.181:8888/myarticle/article。可能會500錯誤,因爲發佈article以後,rancher容器須要一個解析的過程。耐心等待大概一到兩分鐘,再刷新,便可看到訪問成功。(若是仍是訪問不成功,可查看zuul、article等服務的運行日誌,查看是否有錯誤)。
能夠看到界面返回的結果中有查詢成功,而後跟了一個ip地址:10.42.113.8,該ip地址是哪裏來的呢?可在microservice應用列表管理界面中,點擊article,打開article服務的詳情界面,能夠看到10.42.113.8,即爲剛剛建立的沒有帶端口的article服務的ip地址。以下圖所示。
仍是以article服務爲例。擴容前,先看看microservice應用列表管理界面中的全部服務。能夠看到只有4個服務,其中article服務只有一個,並且沒有指定端口號。
再來看看eureka註冊中心歡迎頁中,註冊了哪幾個服務。能夠看到只註冊了兩個服務,一個DEMO-ARTICLE和DEMO-ZUUL
下面進行擴容操做。擴容操做,其實很簡單。
點擊頂部導航欄中的API,點擊Webhooks
打開Webhooks的列表頁面
點擊添加接收器,新增一個接收器
配置詳解:
名稱:本身根據相關隨便取,此處爲文章擴容。
類型:選擇擴縮容服務
操做:選擇擴容
目標服務:選擇microservice/article
步長:每次擴容多少個服務,可一次或1個或2個或3個,可自由選擇擴容個數,此處設置爲2個。
最小數量:article服務最小不能小於多少個,此處設置爲默認的1個。
最大數量:article服務擴容到多少個就再也不擴容了,此處設置爲默認的100個。
點擊建立,完成擴容接受器的添加操做。
添加完擴容觸發器後,此時microservice應用中,仍是隻有一個article服務。由於還須要一個觸發操做才能生效。
怎麼觸發呢?點擊上圖中的觸發地址的複製圖標,複製出觸發地址。觸發地址,其實就一個URL,須要利用POST請求,去調用一次該URL。
利用POSTMAN,新建一個REQUEST,粘貼觸發地址,選擇請求類型爲POST,而後點擊SEND
請求完成以後,點擊頂部導航欄的應用,點所有,在打開的應用列表中,點microservice微服務,進入microservice應用列表管理界面
能夠看到article服務,已經由之前的單容器,變成了3個容器。
若是須要再擴容兩個容器怎麼辦呢?此時有個快捷操做,不須要再在webhooks中添加接收器,只須要複製剛剛的擴容觸發地址,在postman中多send幾回便可。
由於擴容的步長的2,因此每send一次請求,容器數量會增長2個。
點擊article進入該服務看一下article服務詳情。能夠看到有了三個不一樣ip地址的容器(記住這三個IP地址)。
等待三個容器都啓動完成(由於是在虛擬機中,機器性能有限,可能須要好幾分鐘,甚至十多分鐘到半個小時,由於虛擬機的性能畢竟有限)。訪問eureka,看看eureka註冊中心中,註冊了幾個article服務。能夠看到已經註冊了三個article服務。
利用POSTMAN,經過zuul網關來訪問article服務,多訪問幾回,看看是否達到負載均衡的效果
運行結果,會依次出現以下結果,這複合預期結果(zuul網關,默認採用的負載均衡機制就是輪詢機制):
縮容操做,和擴容操做很類似。
點擊頂部導航欄中的API,點擊Webhooks
打開Webhooks的列表頁面
點擊添加接收器,新增一個接收器
配置詳解:
名稱:本身根據相關隨便取,此處爲文章縮容。
類型:選擇擴縮容服務
操做:選擇縮容
目標服務:選擇microservice/article
步長:每次縮容多少個服務,可一次或1個或2個或3個,可自由選擇縮容個數,此處設置爲1個。最大縮容步長不能大於先有容器數。
最小數量:article服務最小不能小於多少個,此處設置爲默認的1個。
最大數量:article服務縮容到多少個就再也不縮容了,此處設置爲默認的100個。
點擊建立,完成縮容接受器的添加操做。
添加完縮容觸發器後,還須要一個觸發操做才能生效。點擊上圖中文章縮容後面的觸發地址下的的複製圖標,複製出觸發地址。觸發地址,其實就一個URL,須要利用POST請求,去調用一次該URL。
在POSTMAN,新建一個REQUEST,粘貼觸發地址,選擇請求類型爲POST,而後點擊SEND
請求完成以後,點擊頂部導航欄的應用,點用戶,在打開的應用列表中,點microservice微服務,進入microservice應用列表管理界面,能夠看到article服務的容器數已經由3個變成了2個。
若是須要再縮容一個容器怎麼辦呢?此時有個快捷操做,不須要再在webhooks中添加接收器,只須要複製剛剛的縮容觸發地址,在postman中多send幾回便可。
由於縮容的步長的1,因此每send一次請求,容器數量會減小1個。
訪問eureka註冊中心,查看註冊了幾個article服務。能夠看到,也只是註冊了兩個article服務。