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