Docker Swarm集群搭建与管理全攻略

发布于:2025-04-09 ⋅ 阅读:(36) ⋅ 点赞:(0)

本文详细介绍了如何搭建和管理 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

网站公告

今日签到

点亮在社区的每一天
去签到