1. 程式人生 > >docker微服務部署之:六、Rancher管理部署微服務

docker微服務部署之:六、Rancher管理部署微服務

關系 本地倉庫 tab 滾動 hce 同學 官網 blog 學習

docker微服務部署之:五、利用DockerMaven插件自動構建鏡像

一、 什麽是Rancher

Rancher是一個開源的企業級容器管理平臺。通過Rancher,企業再也不必自己使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了生產環境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺。

Rancher官網:https://rancher.com

二、Docker中下載Rancher鏡像並運行

#Rancher鏡像下載
$ sudo docker pull rancher/server
$ sudo docker images | grep
rancher/server rancher/server latest aff17b0067db 1 second ago 1.09GB #Rancher安裝 docker run -d --name=rancher -p 8080:8080 rancher/server

在瀏覽器中輸入:http://192.168.31.181:8080,如果能打開歡迎頁,表示安裝成功。(提示:rancher的啟動會有點慢,可能需要等一會兒)

技術分享圖片

全是英文,看不懂?沒關系,可以點擊右下鍵的English,選擇語言為簡體中文。

技術分享圖片

三、Rancher環境管理

Rancher的作用就是用來管理Docker容器的環境。可以通過Rancher的環境管理,來管理不同團隊的Docker環境。每套Ranhcer環境之間,都是隔離的,相互之間沒有影響。

3.1. 添加環境

點擊頂部導航欄的Default,點擊環境管理

技術分享圖片

進入了環境管理界面,點擊添加環境

技術分享圖片

打開了添加環境界面,輸入相應名稱和描述,並選擇環境模板,最後點擊創建,完成環境的添加。

技術分享圖片

在環境列表界面,可以看到已經創建好了一個名為test的環境,並且該環境已經完成了啟動。

技術分享圖片

3.2.在環境中,管理docker中的微服務

首先切換到剛創建的test環境。點擊頂部導航欄的Default,點擊test

技術分享圖片

打開了test中的用戶應用管理界面

技術分享圖片

四、配置主機

切換到了test環境,那個該環境,rancher需要管理哪臺主機docker中的微服務呢?這就是這一步需要做的事情。

點擊頂部導航欄中的基礎架構,點擊主機

技術分享圖片

進入了主機列表界面,點擊添加主機

技術分享圖片

進入添加主機界面,(如果是新安裝的rancher,沒有進行過配置,可能會出現類似如下界面,看看當前站點地址是否為需要被管理的docker的主機的ip地址,如果是,直接點擊下面的保存即可。)

技術分享圖片

進入了添加主機界面,在4處輸入需要管理的docker的主機IP地址,然後點擊5處的復制按鈕,把復制之後的代碼腳本,在填入的主機中執行,執行完成之後,點擊關閉按鈕,完成主機的添加操作。

復制的代碼腳本是幹嘛的呢?其實就是在docker主機中,安裝rancher的代理,以便讓rancher可以管理docker。

技術分享圖片

附上執行上面復制的代碼腳本過程

$ sudo docker run -e CATTLE_AGENT_IP="192.168.31.181"  --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://192.168.31.181:8080/v1/scripts/41FD60E2D772FF772A69:1546214400000:Z2mxv2DC4Id5S34xJIgZaokUpoY

INFO: Running Agent Registration Process, CATTLE_URL=http://192.168.31.181:8080/v1
INFO: Attempting to connect to: http://192.168.31.181:8080/v1
INFO: http://192.168.31.181:8080/v1 is accessible
INFO: Configured Host Registration URL info: CATTLE_URL=http://192.168.31.181:8080/v1 ENV_URL=http://192.168.31.181:8080/v1
INFO: Inspecting host capabilities
INFO: Boot2Docker: false
INFO: Host writable: true
INFO: Token: xxxxxxxx
INFO: Running registration
INFO: Printing Environment
INFO: ENV: CATTLE_ACCESS_KEY=A2ED98628633A662C191
INFO: ENV: CATTLE_AGENT_IP=192.168.31.181
INFO: ENV: CATTLE_HOME=/var/lib/cattle
INFO: ENV: CATTLE_REGISTRATION_ACCESS_KEY=registrationToken
INFO: ENV: CATTLE_REGISTRATION_SECRET_KEY=xxxxxxx
INFO: ENV: CATTLE_SECRET_KEY=xxxxxxx
INFO: ENV: CATTLE_URL=http://192.168.31.181:8080/v1
INFO: ENV: DETECTED_CATTLE_AGENT_IP=172.17.0.1
INFO: ENV: RANCHER_AGENT_IMAGE=rancher/agent:v1.2.11
INFO: Launched Rancher Agent: fea792c5f8413fece7c635f4feaf7127f62911cfb1ef44b38fe0aa5323aba473
[root@localhost ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
zuul                      latest              ffed513f7188        32 hours ago        642MB
article                   latest              b80e1550a5ce        32 hours ago        651MB
eureka                    latest              9b410097b49e        34 hours ago        645MB
jdk1.8                    latest              1f2578d93bd0        2 days ago          598MB
centos                    centos7             9f38484d220f        7 days ago          202MB
centos/mysql-57-centos7   latest              ee80146ff512        5 weeks ago         453MB
rancher/server            latest              aff17b0067db        7 weeks ago         1.09GB
rancher/scheduler         v0.8.6              fbedeaddc3e9        8 weeks ago         248MB
rancher/agent             v1.2.11             1cc7591af4f5        7 months ago        243MB
rancher/net               v0.13.17            f170c38e3763        8 months ago        311MB
rancher/dns               v0.17.4             678bde0de4d2        8 months ago        249MB
rancher/healthcheck       v0.3.8              ce78cf69cc0b        8 months ago        391MB
rancher/metadata          v0.10.4             02104eb6e270        8 months ago        251MB
rancher/network-manager   v0.7.22             13381626c510        8 months ago        256MB
rancher/net               holder              665d9f6e8cc1        23 months ago       267MB

點擊關閉之後,可能需要等待一點點時間,就可以看到在主機列表界面,看到連上了我們剛添加的192.168.31.181主機。

可以看到主機已經出去可用狀態(ACTIVE),並且可以看到主機的一些信息,如操作系統,ip地址,內存一級硬盤等等,還有容器中的服務,以及這些服務的狀態。

技術分享圖片

五、往Docker主機中添加應用

上面已經做了這麽多,那麽如何把自己的服務部署到docker中。

服務都是放在應用中,所以需要先創建一個應用。

創建應用的步驟如下:

首先,點擊頂部導航欄中的應用,點擊全部

技術分享圖片

打開應用列表管理界面,可以看到有4個應用,就是剛剛執行復制的代碼腳本,在docker中運行了這4個應用。並且該4個應用最前面的圖標都是綠色的,表示處於運行狀態。

技術分享圖片

點擊添加應用,給應用取個名字,並添加描述,然後點擊創建,完成應用的添加操作

技術分享圖片

進入microservice服務管理界面技術分享圖片

六、添加服務

把自己的微服務都部署到相應的應用中,便於管理。下面演示如何添加服務到應用中。

=================================================================

提示:

由於下面要演示添加docker微服務部署前面的章節中的eureka、article、zuul服務,如果是按照前面章節一章一章操作的同學,可能現在docker中已經有正在運行的eureka、article和zuul服務。為了和下面要演示的內容有沖突,故需要把這三個服務停止掉,並刪除,只保留鏡像。 刪除的步驟為:

  1. 先通過docker ps -a查看容器中的所有服務,在NAMES下查看是否有eureka等服務,STATUS為該服務對應的狀態(UP為正在運行,Exited為已經停止)
  2. 通過docker stop xx(xx為上一步中NAMES中的名稱),停止正在運行的服務。
  3. 最後通過docker rm xx(xx為第1步中NAMES的名稱),刪除服務。

=================================================================

6.1 添加eureka服務

添加第一個服務:eureka服務。

在上面的最後一個界面,也就是microservice應用的服務列表管理界面,點擊添加服務,打開服務編輯界面

技術分享圖片

配置詳解:

名稱、描述,都是rancher中標識用的。

選擇鏡像輸入eureka,因為名為eureka的鏡像,已經在鏡像本地倉庫(docker images中可以查看到),所以取消創建前總是拉去鏡像的勾選。

點擊添加映射端口,第一個7000位主機公開端口,第二個7000位私有容器端口。

最後滾動到頁面最下面,點擊創建,完成eureka服務的創建。

回到microservice應用的服務列表管理界面,可以看到eureka已經啟動。可點擊最右邊豎著的...,然後進行升級鏡像,重啟、停止、刪除服務操作等。

技術分享圖片

可在瀏覽器中訪問http://192.168.31.181:7000/訪問eureka服務

技術分享圖片

6.2 添加aritcle服務

在microservice應用的服務列表管理界面,點擊添加服務,打開服務編輯界面

技術分享圖片

配置詳解:

名稱、描述,都是rancher中標識用的。

選擇鏡像輸入article,因為名為article的鏡像,已經在鏡像本地倉庫(docker images中可以查看到),所以取消創建前總是拉去鏡像的勾選。

點擊添加映射端口,第一個9001位主機公開端口,第二個9001位私有容器端口。

最後滾動到頁面最下面,點擊創建,完成article服務的創建。

回到microservice應用的服務列表管理界面,可以看到article已經啟動。(因為article中需要訪問mysql,如果mysql服務沒有部署,或者mysql中沒有相應的數據庫等,出啟動報錯,然後一直循環啟動,如下圖所示)

技術分享圖片

可點擊服務名article,進入article服務詳情頁面,點擊article的容器標簽,在article的狀態為Running狀態下,點擊右邊豎著的...,然後點擊查看日誌,如圖:

技術分享圖片

技術分享圖片

如果此時,你把上面的錯誤:“Communications link failure”和“‎The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server”,拿去百度一下,發現都是一堆讓你修改Mysql的連接時間之類的,這些答案簡直就是瞎扯。

原因很簡單,就是因為mysql服務沒有啟動。(以上是為了演示當添加服務啟動失敗時,如何查看日誌)。

$ sudo docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                    PORTS       NAMES
...
652a36962b86        centos/mysql-57-centos7           "container-entrypoin…"   3 days ago          Exited (0) 31 hours ago               mysql
...
# 可以看到myql的STATUS為Exited(0)表示沒有啟動,下面啟動mysql
$ sudo docker start mysql
mysql

此時再來microservice應用的服務列表管理界面,可以看到article已經啟動成功了。

技術分享圖片

看看eureka管理界面中,article服務是否已經註冊上來

技術分享圖片

也可通過瀏覽器訪問article服務

技術分享圖片

6.3 添加zuul服務

在microservice應用的服務列表管理界面,點擊添加服務,打開服務編輯界面

技術分享圖片

配置詳解:

名稱、描述,都是rancher中標識用的。

選擇鏡像輸入zuul,應為名為zuul的鏡像,已經在鏡像本地倉庫(docker images中可以查看到),所以取消創建前總是拉去鏡像的勾選。

點擊添加映射端口,第一個9001位主機公開端口,第二個9001位私有容器端口。

最後滾動到頁面最下面,點擊創建,完成zuul服務的創建。

回到microservice應用的服務列表管理界面,可以看到zuul已經啟動。

技術分享圖片

看看eureka管理界面中,zuul服務是否已經註冊上來

技術分享圖片

也可通過zuul的網關代理,來訪問article服務

技術分享圖片

6.4 添加mysql服務(可選步驟,但推薦觀看,學習下rancher中,添加服務時,如何配置環境變量,以及在容器中執行命令行)

上面我們已經把eureka、article、zuul三個服務,都移植到了通過rancher來管理。唯獨剩下一個mysql服務,然後也在被rancher管理,但是沒有放到rancher的某個應用中,如果是多數據源系統,則不同的應用需要不同的數據庫。

剛說了mysql也被rancher管理,怎麽沒看到呢?其實就是在主機裏,下面的獨立容器中,可以看到mysql服務,該mysql服務,和應用中的服務是一樣的,都可方便的進行操作,和查看日誌等等。

技術分享圖片

那麽如何把mysql也放到應用中呢?(目的是為了演示如何在添加服務時,配置環境變量)

可以看到mysql當前處於啟動狀態,首先我們需要把該mysql服務停止並刪除掉。註意:刪除mysql之前,記得把mysql中的數據先導出來,備份一下(可使用Navicat工具,連接數據庫,導出結構和數據)。

可通過點擊上圖中mysql後面豎著的三點來選擇停止和刪除,也可通過如下命令進行停止和刪除。

$ sudo docker stop mysql
$ sudo docker rm mysql

然後點擊頂部導航欄中的應用,選擇全部,回到全部應用列表管理界面

技術分享圖片

可點擊添加服務,(和點擊microservice進入microservice應用的服務列表管理界面,再點擊添加服務,效果是一樣的)

技術分享圖片

進入添加服務界面

技術分享圖片

技術分享圖片

配置詳解:

名稱、描述,都是rancher中標識用的。

選擇鏡像輸入centos/mysql-57-centos7,因為我pull下來的不是名為mysql的鏡像,而是pull的一個名為centos/mysql-57-centos7的mysql鏡像。而且該centos/mysql-57-centos7的鏡像,已經在鏡像本地倉庫(docker images中可以查看到),所以取消創建前總是拉去鏡像的勾選。

點擊添加映射端口,第一個3306位主機公開端口,第二個3306位私有容器端口。

在命令標簽頁,環境變量處,點擊添加環境變量,把MYSQL_ROOT_PASSWORD=123456粘貼進去。

最後點擊創建,完成mysql服務的創建。

回到microservice應用的服務列表管理界面,可以看到mysql已經啟動。

技術分享圖片

如果我們此時再訪問article服務,會發現訪問不了,出現500錯誤。

技術分享圖片

我們點擊article進入article服務,查看article運行日誌,可以看到原來是無法連接docker數據庫

技術分享圖片

通過Naticat軟件,是可以連接到該mysql服務的,但是該數據庫裏,卻沒了我們的數據庫docker,以及相關的表和數據(這也就是為什麽讓大家在刪除前先備份的原因)。

我們通過Naticat新建一個數據庫docker,字符集為utf8,排序規則為utf8_general_ci,創建好數據庫之後。在數據庫docker下,在表上右鍵,選擇運行SQL文件,在打開的窗口中,選擇前面備份的docker.sql文件,然後點擊開始即可。推薦使用這種外部工具導入的方式,回復數據庫中數據。

除上訴方式外,也可通過點擊mysql服務,選擇容器標簽,然後點擊後面豎著的三點,點擊執行命令行(該中方式會有問題,具體什麽問題,接著往下看)

技術分享圖片

然後在打開的黑乎乎的命令行界面,執行如下命令:

mysql -u root -p
#在出現Enter password:時,按回車,連接mysql數據庫,進入mysql>命令行模式

#查看當前所有數據庫,發現並沒有一個名為docker的數據庫
show databases;

#創建docker數據庫,指定字符集和排序規則
create database docker default character set utf8 collate utf8_general_ci;

#選擇docker數據庫
use docker;

#創建tb_article表

CREATE TABLE `tb_article`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `content` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
  `author` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `add_time` datetime(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

#插入數據INSERT INTO `tb_article` VALUES (1, docker, 部署微服務, tom, 2019-03-20 08:00:00);

界面如下圖所示:

技術分享圖片

註意:該命令行模式,不支持中文輸入,所以,上面的insert語句中的content字段的內容“部署微服務”,被自動替換為空。以上演示,主要是告訴大家如何在rancher中使用命令行,以及需要註意的地方。

到此,docker數據庫已經創建好了,並有了相應數據,此時,我們再來刷新article服務看看:

技術分享圖片

好了,到此,把手動創建服務,改造成在rancher中創建服務,已經完成。

docker微服務部署之:七、Rancher進行微服務擴容和縮容

docker微服務部署之:六、Rancher管理部署微服務