軟體工程師的小事:到底要不要 Close

使用 Docker Swarm 在 Ubuntu Server 建立叢集

文章參考 Docker 官方文件與 Youtube 內容撰寫,更多資訊可瀏覽下方參考資料。

環境準備

此情境需要三台虛擬機器(安裝 Ubuntu Server)一台 Swarm Manager,兩台 Swarm Worker。

安裝好 Docker 環境的虛擬機器資訊:

Operation System
Ubuntu Server 16.04
Docker
17.06.2-ce
主機名稱 IP位址 備註
Swarm-Manager 192.168.0.85 叢集主機
Swarm-Worker1 192.168.0.86 --
Swarm-Worker2 192.168.0.87 --
建立 Docker Swarm

在 Swarm-Manager 主機執行 Swarm 初始化。

docker swarm init --advertise-addr 192.168.0.85:2377
初始化成功後會輸出加入 Docker Swarm 的指令碼與驗證 token,加入 Worker 節點的時候使用。
docker swarm init

Swarm-Manager 主機就成為 Swarm 節點中的 Leader 角色,透過 docker node ls 指令檢視節點資訊。

docker node ls
check swarm node list

在 Swarm-Worker1, Swarm-Worker2 主機使用先前輸出的「docker swarm join ... 」指令碼加入 Swarm 叢集。

docker swarm join --token {初始化 swarm 會顯示的字串} {主機IP位址+連接埠}
join worker1 as swarm node join worker2 as swarm node

加入完成後在 Swarm-Manager 主機檢視目前節點資訊。

docker node ls
swarm node list manager and workers

Swarm-Manager, Swarm-Worker1, Swarm-Worker2 三台主機已經成功建立為 Docker Swarm 叢集:Swarm-Manager 角色為 Manager(Leader),Swarm-Worker1, Swarm-Worker2 為 Worker。

Docker Swarm 的管理需要在 Manager 主機執行,Worker 執行會顯示權限不足。
驗證 Swarm 架構

docker swarm 環境建立完成後,透過建立 nginx 服務來驗證 swarm 執行狀態。

要在 Docker Swarm 建立容器,需使用 docker service 指令。docker run 會在執行指令的 docker 伺服器執行 container。

在 Docker Swarm Manager 建立 nginx 的服務,設定為三個副本(replicas)。

docker service create --replicas 3 --publish 8080:80 --name swarm-nginx nginx
create nginx service
--publish 指令為將外部位置的 8080 埠對應到 service 的 80 埠,類似 docker run -p {port}:{port}

檢視 Docker Swarm 狀態

docker service list
docker swarm service info
REPLICAS 欄位顯示執行中的副本(replicas)與最大副本數,副本的啟用時間因 service 使用映像檔有所不同

檢視服務的狀態,此指令會顯示節點內容

docker service ps swarm-nginx
get service tasks
此資訊顯示 swarm-nginx 分別再三個節點中掛載一個 nginx container

三個節點的 Container 就會被執行起來後,可分別進入虛擬機器檢視 Container 的執行狀態

docker ps -a
container status in swarm manager container status in swarm worker1 container status in swarm worker2

進入虛擬機器變更 nginx 預設網頁內容,來測試瀏覽器連線到的 Swarm 節點。

在副本(replicas)設定進行異動或是機器調整時,本次異動項目將不會被保留
update manager index page update worker1 index page update worker2 index page

使用瀏覽器刻意多次進入 Swarm 的 nginx 服務時,會顯示不同的網頁內容。

進入不同的位址也會顯示不同的內容
get swarm manager page get swarm worker1 page get swarm worker2 page

docker 的官方文件有架構示意圖可以參考。

更多 Docker Swarm 相關資訊與進階指令碼介紹請參考官方文件內容。

參考資料

留言