Docker Swarm集群
一、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、修改主机名
修改主机名
hostnamectl set-hostname swarm01
查看主机名
hostname
2、swarm安装
docker pull swarm
3、建立集群
swarm01为leader,swarm02、swarm03为节点
3.1 master机器上swarm初始化
docker swarm init
命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值
3.2查看该集群相关信息
docker node ls
3.3.节点执行初始化集群时提供的命令
3.4再次查看集群
docker node ls
3.5 节点离开集群
docker swarm leave --froce
3.6 leader删除节点
docker node rm
3.7 再次获取leader上的token信息
docker swarm join-token manager
3.8 查看集群网络
docker network ls
3.9 创建集群网络(用于内部通信)
docker network create -d overlay --attachable 网络名称
再次查看
docker network ls
4、创建服务
4.1创建服务
docker service create 服务名
docker service rm 服务名
参数
–name 服务名
–network 集群网络名称
–mount 数据挂载
–constraint node.hostname==主机名
–env 环境
示例:
docker service rm citydew-admin
docker service create \
--name citydew-admin \
--network wushan \
--mount type=bind,source="$(pwd)"/app.tgz,target=/server/data/app.tgz \
--constraint node.hostname==master \
--replicas 1 -p 9055:9055 \
--log-opt "tag=citydew-admin" \
--env "downloadURL=file:///server/data/app.tgz" \
--env "redis_ip=192.168.11.100" \
--env "postgresql_ip=192.168.11.100" \
--env "postgresql_user=ascs" \
--env "postgresql_pwd=ascs.123456" \
--env "database_name=ascs_auth" \
--env "rabbitmq_host=192.168.11.100" \
--env "rabbitmq_port=5672" \
--env "rabbitmq_username=ascs" \
--env "rabbitmq_password=ascs" \
--env "rabbitmq_virtualHost=/" \
11.23.254.120:5000/public/openjdk:1.0.0