文章目錄
- 一、節點準備
- 二、初始化 manager 節點
- 三、管理 swarm 集群中的 worker 節點
- 1、添加 worker 節點
- 2、查看 worker 節點
- 3、刪除 worker 節點
- 四、管理 swarm 集群服務
- 1、創建服務
- 2、查看服務
- 3、刪除服務
- 五、管理 swarm 節點服務
- 1、節點標簽管理
- 2、創建服務
- 3、查看服務
- 4、刪除服務
本文詳細介紹了如何搭建和管理 Docker Swarm 集群。首先,通過節點準備,將不同節點分配為 manager 和 worker 角色。接著,詳細闡述了初始化 manager 節點、添加和管理 worker 節點的步驟,包括查看、刪除節點以及設置節點的排水模式等操作。文章還深入講解了如何通過 Docker Compose 文件在 Swarm 集群中創建、查看和刪除服務,并展示了如何利用節點標簽管理服務的部署位置,以實現更靈活的服務調度。通過實際操作示例和命令,讀者可以清晰地掌握 Docker Swarm 集群的搭建與管理方法。
一、節點準備
節點類型 | 節點IP | 角色類型 |
---|---|---|
node1 | 192.168.188.30 | manager |
node2 | 192.168.188.31 | worker |
…… | …… | …… |
二、初始化 manager 節點
在 node1 節點上面執行如下命令,將 node1 節點設置為 manager 角色
docker swarm init --advertise-addr 192.168.188.30
三、管理 swarm 集群中的 worker 節點
1、添加 worker 節點
在 node1 節點(即:manager
)上面執行如下命令,獲取命令
:
docker swarm join-token worker
命令結果如下:
To add a worker to this swarm, run the following command:docker swarm join --token **** 192.168.188.30:2377
在 node2 節點(即:worker
)上面執行如下命令,加入 swarm 集群:
docker swarm join --token **** 192.168.188.30:2377
2、查看 worker 節點
在 node1 節點(即:manager )上面執行如下命令,查看所有的 worker 節點:
docker node ls
命令結果如下:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
plmpv3dzvhwbpljxp60u3925o node2 Ready Active 27.3.1
uqshe5xx4rf1kuovh61l3zb4u * node1 Ready Active Leader 24.0.7
3、刪除 worker 節點
在 node1 節點(即:manager )上面執行如下命令,查看節點狀態:
docker node ls
在 node1 節點(即:manager )上面執行如下命令,查看節點上運行的服務:
# 格式:docker node ps ${節點名稱 或 ID}
docker node ps node2
在 node1 節點(即:manager )上面執行如下命令,將節點設置為排水模式可以確保該節點上的所有服務任務被平滑地遷移到其他可用節點上,避免服務中斷:
# 格式:docker node update --availability drain ${節點名稱 或 ID}
docker node update --availability drain node2
在 node1 節點(即:manager )上面執行如下命令,確認服務遷移完成:
# 格式:docker node ps ${節點名稱 或 ID}
docker node ps node2
在 node2 節點(即:worker )上面執行如下命令,當前 worker 節點就離開了 swarm 集群:
docker swarm leave
注:不能遠程將某個節點從 swarm 集群中給被動移除,只能在各自的節點上面執行 leave 命令
在 node1 節點(即:manager )上面執行如下命令,從 Swarm 集群中移除節點:
# 格式:docker node rm ${節點名稱 或 ID}
docker node rm node2
在 node1 節點(即:manager )上面執行如下命令,驗證 node2 節點(即:worker )是否已成功從集群中移除,并且集群狀態是否正常:
docker node ls
四、管理 swarm 集群服務
1、創建服務
在 node1
節點(即:manager )創建如下文件swarm-test/docker-compose.yml
,假設內容如下:
# 定義 Docker Compose 文件的版本,這里使用的是 3.8 版本
version: '3.8'# services 部分定義了要創建的服務
services:# 定義一個名為 ubuntu-test 的服務ubuntu-test:# 指定使用的 Docker 鏡像,這里使用最新版本的 Ubuntu 鏡像image: ubuntu:latest# 容器啟動后執行的命令,這里使用 tail -f /dev/null 命令,目的是讓容器保持運行狀態command: tail -f /dev/null # 保持容器運行# deploy 部分用于配置服務的部署選項deploy:# 指定服務要創建的副本數量,這里創建 2 個副本replicas: 2# networks 部分指定服務要加入的網絡networks:- swarm-test-net# networks 部分定義了要創建的網絡
networks:# 定義一個名為 swarm-test-net 的網絡swarm-test-net:# 指定網絡的驅動類型,這里使用 overlay 驅動,常用于 Docker Swarm 集群driver: overlay
在 node1
節點(即:manager )的控制臺執行如下命令,創建集群服務:
# 使用 docker stack deploy 命令在 Docker Swarm 集群中部署一個棧
# -c 參數用于指定要使用的 Docker Compose 文件
# swarm-test/docker-compose.yml 是具體的 Compose 文件路徑,表明從該文件讀取服務配置
# swarm-test 是要部署的【棧名稱】
docker stack deploy -c swarm-test/docker-compose.yml swarm-test
2、查看服務
在 node1
節點(即:manager )的控制臺執行如下命令,查看部署進度:
docker service ls
在 node1
節點(即:manager )的控制臺執行如下命令,查看指定服務的任務狀態:
# 格式:docker service ps ${棧名稱}_${容器名稱}
docker service ps swarm-test_ubuntu-test
3、刪除服務
在 node1
節點(即:manager )的控制臺執行如下命令,刪除服務:
# 格式:docker service rm ${棧名稱}_${容器名稱}
docker service rm swarm-test_ubuntu-test
五、管理 swarm 節點服務
1、節點標簽管理
在 node1 節點(即:manager )上面給 node2
添加了一個名為 worker 且值為 wrk2 的標簽:
# 可以通過執行如下命令查看節點信息
# docker node ls
# 格式:docker node update --label-add ${標簽名}=${標簽值} ${節點名稱 或 ID}
docker node update --label-add worker=wrk2 node2
在 node1 節點(即:manager )上面查看 node2
的標簽:
# 可以通過執行如下命令查看節點信息
# docker node ls
# 格式:docker node inspect --format '{{.Spec.Labels}}' ${節點名稱 或 ID}
docker node inspect --format '{{.Spec.Labels}}' node2
在 node1 節點(即:manager )上面給 node2
刪除了一個名為 worker 且值為 wrk2 的標簽:
# 可以通過執行如下命令查看節點信息
# docker node ls
# 格式:docker node update --label-rm ${標簽名} ${節點名稱 或 ID}
docker node update --label-rm worker node2
2、創建服務
在 node1 節點(即:manager )創建如下文件swarm-test1/docker-compose.yml
,假設內容如下:
# 定義 Docker Compose 文件的版本,這里使用的是 3.8 版本
version: '3.8'# services 部分定義了要創建的服務
services:# 定義一個名為 ubuntu-test 的服務ubuntu-test:# 指定使用的 Docker 鏡像,這里使用最新版本的 Ubuntu 鏡像image: ubuntu:latest# 容器啟動后執行的命令,這里使用 tail -f /dev/null 命令,目的是讓容器保持運行狀態command: tail -f /dev/null # 保持容器運行# deploy 部分用于配置服務的部署選項deploy:# 指定服務要創建的副本數量,這里創建 2 個副本replicas: 2# placement 用于指定服務任務的放置策略,即決定服務的容器在哪些節點上運行placement:# constraints 用于設置放置約束條件,滿足這些條件的節點才會被用于運行服務任務constraints:# 此約束條件表明服務的容器只能部署在帶有 worker 標簽且值為 wrk2 的節點上- node.labels.worker == wrk2# networks 部分指定服務要加入的網絡networks:- swarm-test1-net# networks 部分定義了要創建的網絡
networks:# 定義一個名為 swarm-test1-net 的網絡swarm-test1-net:# 指定網絡的驅動類型,這里使用 overlay 驅動,常用于 Docker Swarm 集群driver: overlay
在 node1
節點(即:manager )的控制臺執行如下命令,創建集群服務:
# 使用 docker stack deploy 命令在 Docker Swarm 集群中部署一個棧
# -c 參數用于指定要使用的 Docker Compose 文件
# swarm-test1/docker-compose.yml 是具體的 Compose 文件路徑,表明從該文件讀取服務配置
# swarm-test1 是要部署的【棧名稱】
docker stack deploy -c swarm-test1/docker-compose.yml swarm-test1
3、查看服務
在 node1
節點(即:manager )的控制臺執行如下命令,查看部署進度:
docker service ls
在 node1
節點(即:manager )的控制臺執行如下命令,查看指定服務的任務狀態:
# 格式:docker service ps ${棧名稱}_${容器名稱}
docker service ps swarm-test1_ubuntu-test
4、刪除服務
在 node1
節點(即:manager )的控制臺執行如下命令,刪除服務:
# 格式:docker service rm ${棧名稱}_${容器名稱}
docker service rm swarm-test1_ubuntu-test