Docker+Swarm+Etcd+Portainer搭建集群

简介
Swarm是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信。
使用etcd发现服务解决swarm内置发现服务的不稳定问题。etcd是一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。
etcd是一个服务发现系统,具备以下的特点:安装配置简单,而且提供了HTTP API进行交互,使用也很简单,支持SSL证书验证,根据官方提供的benchmark数据,单实例支持每秒2k+读操作,采用raft算法,实现分布式系统数据的可用性和一致性
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
服务器
192.168.0.98 master  docker etcd swarm-manage swarm-agent portainer
192.168.0.99 node1  docker swarm-agent
192.168.0.100 node2 docker swarm-agent
准备
在所有机器上安装docker同时修改配置
vi /lib/systemd/system/docker.service
修改 ExecStart:
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2375
重启docker
systemctl daemon-reload
systemctl start docker.service
当然实际用于生产环境这种方式并不安全,可用于测试。新版本doker swarm 支持TSL安全方式。
在所有机器上docker pull swarm
在master机器上docker pull etcd
安装etcd
docker run -ti -d -p 4001:4001 -p 7001:7001 --restart=always --name discovery docker.io/etcd -name discovery
启动swarm manger
docker run -ti -d -p 2376:2375 --restart=always --name swarm-manager swarm:latest manage --host tcp://0.0.0.0:2375 etcd://192.168.0.98:4001
启动swarm agent
在每个docker节点分别执行,将当前docker节点加入到集群中:
docker run -ti -d --restart=always --name swarm-agent swarm:latest join --addr 192.168.0.98:2375 etcd://192.168.139.98:4001
docker run -ti -d --restart=always --name swarm-agent swarm:latest join --addr 192.168.0.99:2375 etcd://192.168.139.98:4001
docker run -ti -d --restart=always --name swarm-agent swarm:latest join --addr 192.168.0.100:2375 etcd://192.168.139.98:4001
使用命令查看docker节点情况(任意docker节点上都可以执行):
docker run --rm swarm list etcd://192.168.0.98:4001
可以使用命令查看docker集群的详情(可在任意docker节点上执行,IP地址是装了swarm master主机的IP):

docker -H 192.168.0.98:2376 info

安装portainer(官方部署
docker run -d -p 9000:9000portainer/portainer -H tcp://<REMOTE_HOST>:<REMOTE_PORT> --swarm
或者
docker service create --name portainer  \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock\
portainer/portainer \
--swarm

猜你喜欢

转载自blog.csdn.net/bbwangj/article/details/81006616