一、什么是docker swarm?
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。 Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。
二、docker swarm基本结构图
在结构图可以看出 Docker Client使用Swarm对 集群(Cluster)进行调度使用。
上图可以看出,Swarm是典型的master-slave结构,通过发现服务来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持。
三、准备工作
1.准备三台cetnos8已安装docker的虚拟机,并且配置好ip地址。
安装docker步骤centos8及ubuntu安装docker教程 我的四台虚拟机如图(其中一台是Ubuntu,可以只用三台centos8的虚拟机即可):
2.更改主机名
[root@manager ~]
[root@worker-1 network-scripts]
[root@worker-2 network-scripts]
root@worker3:/home/yejing
3.配置hosts文件
[root@worker-1 ~]
192.168.31.31 manager
192.168.31.15 worker-1
192.168.31.16 worker-2
192.168.31.17 worker-3
四台机器都要进行如上操作!
4.关闭防火墙和selinux
[root@worker-2 ~]
[root@worker-2 ~]
[root@worker-2 ~]
[root@worker-2 ~]
四台机器都要进行如上操作!
四、docker swarm集群部署
1.创建swarm集群
[root@manager ~]
Swarm initialized: current node (z6sfk0wglnqagtbbe07u8f701) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-40pa2ab7p1zd8n1s6l49u420fcjtxcvqoplxb7r3mupvkenkdo-4ryk8uc16bd2550c1iuweljhi 192.168.31.31:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@manager ~]
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
z6sfk0wglnqagtbbe07u8f701 * manager Ready Active Leader 20.10.8
上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。 其中,–advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。
2.添加节点主机到swarm集群
[root@worker-1 ~]
This node joined a swarm as a worker.
在其他三台worker虚拟机上都进行上述操作
[root@manager ~]
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
z6sfk0wglnqagtbbe07u8f701 * manager Ready Active Leader 20.10.8
g4hltfe2aqsyoysvop0c8m21z worker-1 Ready Active 20.10.8
omk1t29nhlxkrjz59eb1lxnrg worker-2 Ready Active 20.10.8
25c3epmxs9kmhuahlgtwjzbsx worker-3 Ready Active 20.10.8
3.创建一个服务
在manager虚拟机上进行操作
[root@manager ~]
[root@manager ~]
ID NAME MODE REPLICAS IMAGE PORTS
h911wkvi79wo helloworld replicated 10/10 alpine:latest
4.swarm的动态缩容服务
[root@manager ~]
[root@manager ~]
即使有台机器宕机,其他机器也能够分配20个副本,实现了高可用。
总结
至此,docker swarm集群部署成功!
|