一、Swarm 关键概念
1、Swarm
集群的管理和编排是使用嵌入到 docker 引擎的 SwarmKit,可以在 docker 初始化时启动 swarm 模式或者加入已存在的 swarm
2、Node
一个节点(node)是已加入到 swarm 的 Docker 引擎的实例 当部署应用到集群,你将会提交服务定义到管理节点,接着 Manager管理节点调度任务到 worker 节点,manager 节点还执行维护集群的状态的编排和群集管理功能,worker 节点接收并执行来自
manager 节点的任务。通常,manager 节点也可以是 worker 节点,worker 节点会报告当前状态给 manager 节点
3、服务(Service)
服务是要在 worker 节点上要执行任务的定义,它在工作者节点上执行,当你创建服务的时,你需要指定容器镜像
4、任务(Task)
任务是在 docekr 容器中执行的命令,Manager 节点根据指定数量的任务副本分配任务给 worker 节点
二、环境准备
3台虚拟机:
系统:Linux Center OS 7
Docker版本: 19.03.1
虚拟机1:192.168.226.145(swarm01)
虚拟机2:192.168.226.146(swarm02)
虚拟机3:192.168.226.147(swarm03)
1、修改主机名
修改主机名
1
2
3 1hostnamectl set-hostname swarm01
2
3
查看主机名
1
2
3 1hostname
2
3
2、swarm安装
1
2
3 1docker pull swarm
2
3
3、建立集群
swarm01为leader,swarm02、swarm03为节点
3.1 master机器上swarm初始化
1
2
3 1docker swarm init
2
3
命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值
3.2查看该集群相关信息
1
2
3 1docker node ls
2
3
3.3.节点执行初始化集群时提供的命令
3.4再次查看集群
1
2
3 1docker node ls
2
3
3.5 节点离开集群
1
2
3 1docker swarm leave --froce
2
3
3.6 leader删除节点
1
2
3 1docker node rm
2
3
3.7 再次获取leader上的token信息
1
2
3 1docker swarm join-token manager
2
3
3.8 查看集群网络
1
2
3 1docker network ls
2
3
3.9 创建集群网络(用于内部通信)
1
2
3 1docker network create -d overlay --attachable 网络名称
2
3
再次查看
1
2
3 1docker network ls
2
3
4、创建服务
4.1创建服务
1
2
3
4
5 1docker service create 服务名
2
3docker service rm 服务名
4
5
参数
–name 服务名
–network 集群网络名称
–mount 数据挂载
–constraint node.hostname==主机名
–env 环境
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 1docker service rm citydew-admin
2docker service create \
3--name citydew-admin \
4--network wushan \
5--mount type=bind,source="$(pwd)"/app.tgz,target=/server/data/app.tgz \
6--constraint node.hostname==master \
7--replicas 1 -p 9055:9055 \
8--log-opt "tag=citydew-admin" \
9--env "downloadURL=file:///server/data/app.tgz" \
10--env "redis_ip=192.168.11.100" \
11--env "postgresql_ip=192.168.11.100" \
12--env "postgresql_user=ascs" \
13--env "postgresql_pwd=ascs.123456" \
14--env "database_name=ascs_auth" \
15--env "rabbitmq_host=192.168.11.100" \
16--env "rabbitmq_port=5672" \
17--env "rabbitmq_username=ascs" \
18--env "rabbitmq_password=ascs" \
19--env "rabbitmq_virtualHost=/" \
2011.23.254.120:5000/public/openjdk:1.0.0
21
22