Docker-Swarm 集群搭建与管理

date
Oct 27, 2023
slug
docker-swarm
status
Published
tags
Docker
HA
summary
Docker-Swarm 集群搭建与管理
type
Post
Language

介绍

Docker-Swarm 是 Docker 官方提供的容器集群管理以及容器编排解决方案,Docker-Swarm 基于Docker-Compose 组件以及网络等基础能力,提供了服务编排、负载均衡、动态伸缩、滚动更新等能力。
集群分为两种节点:
  • 管理节点(Manager Node):用于 Swarm 集群的管理,Manager 节点可以有1个或者多个,通常由3个以上的奇数 Manger 节点构成 Manager 集群,Manager 节点中的 Leader 节点选举通过 Raft 协议实现
  • 工作节点(Worker Node):用于执行 Manager 节点下发的任务:部署服务、扩容服务、更新服务等等

与 Docker-Compose 区别

  • docker-compose 的作用是在同一台服务器上启动多个容器,达到单机服务编排得效果
  • docker-swarm 可以在由 n 个服务器组成的集群里启动管理同一容器,在较小的集群搭建环境下,达到分布式服务编排的效果

前置网络条件

需要在每个节点开放如下端口
  • 2377 用于与管理节点之间进行通信(TCP)
  • 7946 用于overlay网络节点发现(TCP&UDP)
  • 4789 用于overlay网络节通信(TCP)
  • 8000 用于部署服务测试(TCP)

使用

以下内容仅把 Swarm 作为集群启动管理工具,不使用负载均衡、动态伸缩等功能

初始化管理节点

sudo docker swarm init
# 如果有多个网卡,可指定 ip
docker swarm init --advertise-addr 10.0.10.131

加入管理 or 工作节点

在子节点执行以下命令输出的命令
# 获取加入管理节点的命令(在管理节点执行)
sudo docker swarm join-token manager

# 获取加入工作节点的命令(在管理节点执行)
sudo docker swarm join-token worker

在 Swarm 集群中使用 Compose 部署

以下示例在工作节点创建 nginx 集群
创建 docker-compose.yaml 文件
version: "3"

services:
  nginx_test:
    image: nginx:1.20.1
    container_name: nginx_test
    privileged: true
    restart: always
    ports:
      - 18080:80
    # 复制模式,在集群中随机 2 个节点启动
    deploy:
      mode: replicated
      replicas: 2
    # 只在管理节点启动
    # deploy:
    #  placement:
    #    constraints: [node.role == manager]
通过 compose 文件启动名为 ha 的集群
在修改镜像或 compose 文件后,可以实现动态重启容器的功能
sudo docker stack deploy -c docker-compose.yaml ha
关闭移除集群
sudo docker stack down ha
查看所有已部署的服务
sudo docker service ls

# 输出
ID             NAME            MODE         REPLICAS   IMAGE          PORTS
wd8llskonq11   ha_nginx_test   replicated   2/2        nginx:1.20.1   *:18080->80/tcp
查看指定服务包含的实例
sudo docker service ps ha_nginx_test
查看集群状态
sudo docker node ls

Reference


© chobit blog 2025