1.Swarm简介
-
Docker Swarm是Docker官方推出的容器集群管理工具,基于GO语言实现,代码开源在https://github.com/docker/swarm -
Docker Swarm 是生产环境中运行Docker应用程序最简单的方法。作为容器集群管理器,Swarm最大的优势之一就是100%支持标准的DockerAPI。各种基于标准API的工具比如compose docker.py各种管理软件等都可以很容易的与Swarm进行集成,大大方便了用户将原先基于单节点的系统移植到Swarm上,同时Swarm内置了Docker网络插件的支持,用户可以很容易的部署跨主机的容器集群服务。 -
Docker Swarm和Docker Compose一样,都是Docker官方容器编排工机具,但不同的是,Docker Compose是一个在单个服务器或主机上创建多个容器的工具,而DockerSwarm则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然Docker Swarm会更加合适 -
Node Swarm 中的每个Docker Engine都是一个node,有两种类型的 node:manager 和worker。 -
为了向Swarm中部署应用,我们需要在manager node上执行部署命令,manager node会将部署任务拆解并分配给一个或多个worker node完成部署。 -
manager node负责执行编排和集群管理工作,保持并维护Swarm处于期望的状态。Swarm中如果有多个manager node,它们会自动协商并选举出一个leader 执行编排任务。 -
woker node接受并执行由manager node派发的任务。默认配置下manager node同时也是一个worker node,不过可以将其配置成manager-only node,让其专职负责编排和集群管理工作。 -
service 定义了worker node上要执行的任务。swarm的主要编排任务就是保证 service处于期望的状态下。
Swarm构架图
一.环境准备
1.三台机器安装了Docker的Centos机器 192.168.10.99 manager 192.168.10.77 worker 192.168.10.55 worker1 2.Docker Engline 1.12+ 3.关闭防火墙或者防火墙开启一下端口
- TCP端口2377,用于集群管理通信
- TCP和UDP端口7946,用于节点之间通信
- UDP端口4789,用于覆盖网络
三.创建集群
- 在任意节点下通过docker swarm init 命令创建一个新的Swarm
集群并加入,且该节点会默认成为Manager节点,根据我们预先定义的角色,在任意一台机器上运行改命令即可。 通常,第一个加入集群的管理阶段将成为leader,火来加入的管理节点都是Reachable。当前的Leader如果挂掉,所有的Reachable将重新选家具一个新的Leader。
docker swarm init --advertise-addr 192.168.10.99
四.加入集群
加入worker
docker swarm join-token worker
加入manager
docker swarm join-token manager
具体操作: Manager Worker 查看集群情况:
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
qd7t3v2tstp2naf0wf1ngwxe6 * manager Ready Active Leader 20.10.10
m72c77ke9oex5nvd093dam0aa worker Ready Active 20.10.8
zix3bgn3t35axfaz4ac4senz4 worker1 Ready Active 20.10.10
创建nginx服务
docker service create --replicas 1 --name hfrnginx -p 8081:80 nginx
创建弹性服务(两种模式)
docker service scale hfrnginx=2
docker service update --replicas 2 hfrnginx
查看结果
dokcer ps -a
docker ps -a
结果如下:
|