Docker Swarm 集群创建详解

Docker swarm 是docker官方的三大项目之一,提供docker容器集群服务,是docker官方对容器云生态支持的核心方案,Docker Swarm项目开始于2014年,是Docker公司推出的第一个容器集群项目。使用docker swarm可以将多个docker主机封装为一个大型的虚拟docker主机,swarm集群提供给用户管理集群内所有容器的操作接口与使用一台docker主机几乎相同,从而可以快速打造一套容器云服务。

Docker Swarmkit项目开始于2016年,是Docker公司推出的第二个容器集群项目,于Docker1.12版本正式发布。虽然也叫Swarm,但是与第一个项目完全不同。该项目直接在Docker Engine上内嵌了集群管理功能,并新增了集群管理的用户接口。
两个容器集群项目可能实现了相同的功能,但其上层接口还是有很大的不同,Docker公司推荐用户使用更适合自己的项目,如果都没有使用过,推荐使用后者。另外,Docker Swarm项目并没有被Docker公司列为不推荐的项目,仍然会继续支持新的Docker Engine的功能。

swarm v1是典型的mater-slave结构,需要通过发现服务来选举出manager,而manager是中心管理节点,而各个节点通过运行agent接受manager的统一管理

swarm v2中,swarm集群会自动通过Raft协议分布式选举出manager节点,因此无需配置额外的发现服务,从而避免了单点瓶颈;且swarm v2内置了DNS负载均衡和对外部负载均衡机制的支持

本实验基于docker swarm v1版本,实验环境如下:
docker-1  192.168.1.193
docker-2  192.168.1.194
docker-3  192.168.1.195


在各个docker主机上安装swarm,启动docker daemon
root@docker-1:~# docker pull swarm
root@docker-1:~# docker run --rm swarm -v
swarm version 1.2.8 (48d86b1)
root@docker-1:~# service docker stop
docker stop/waiting
root@docker-1:~# dockerd  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
root@docker-1:~# netstat -tunlp|grep docker
tcp6      0      0 :::2375                :::*                    LISTEN      1698/dockerd


root@docker-2:~# docker pull swarm
root@docker-2:~# service docker stop
docker stop/waiting
root@docker-2:~# dockerd  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock


root@docker-3:~# docker pull swarm
root@docker-3:~# service docker stop
docker stop/waiting
root@docker-3:~# dockerd  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock


在任意一个节点上使用docker swarm 命令来在docker hub上进行注册(采用docker hub的服务发现后端,但必须要求所有docker主机可以访问外网),且会产生一个token,用来标识和管理集群
root@docker-1:~# docker run --rm swarm create
1081dc3745b8dfd45ff863c13d74d96c
在所有要加入swarm集群的docker主机上执行swarm join命令,将各个节点加入swarm集群
root@docker-1:~# docker run -d swarm join --addr=192.168.1.193:2375 token://1081dc3745b8dfd45ff863c13d74d96c
fbc0c47268e1e631c4839b41107cac08bd33c9b27380283768efda84ab3ae373
root@docker-2:~# docker run -d swarm join --addr=192.168.1.194:2375 token://1081dc3745b8dfd45ff863c13d74d96c
b88ab2e5eb4e787ad56df06fd6f7e879aacbd35b36743d2943002b882cd8865f


root@docker-3:~# docker run -d swarm join --addr=192.168.1.195:2375 token://1081dc3745b8dfd45ff863c13d74d96c
1b62af7b1ecf7d428f7dd25df71a0523742cecdb1341eb76560225a77336b12f
因为没有配置manager节点,所以此命令无法使用
root@docker-1:~# docker node ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.


查看各个节点的容器情况,可以与后续实验做对比
root@docker-1:~# docker ps
CONTAINER ID        IMAGE              COMMAND                  CREATED            STATUS              PORTS              NAMES
fbc0c47268e1        swarm              "/swarm join --add..."  6 minutes ago      Up 6 minutes        2375/tcp            competent_benz
root@docker-1:~# docker ps -a
CONTAINER ID        IMAGE              COMMAND                  CREATED            STATUS              PORTS              NAMES
fbc0c47268e1        swarm              "/swarm join --add..."  6 minutes ago      Up 6 minutes        2375/tcp            competent_benz

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/841134c5b8599fc060c7236008cf0859.html