1、什么是Swarm
Swarm这个项目名称特别贴切。在Wiki的解释中,Swarm behavior是指动物的群集行为。好比咱们常见的蜂群,鱼群,秋天往南飞的雁群均可以称做Swarm behavior。
Swarm项目正是这样,经过把多个Docker Engine汇集在一块儿,造成一个大的docker-engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户能够像使用Docker Engine同样使用Docker集群。
Swarm 特色
▲对外以Docker API接口呈现,这样带来的好处是,若是现有系统使用Docker Engine,则能够平滑将Docker Engine切到Swarm上,无需改动现有系统。
▲Swarm对用户来讲,以前使用Docker的经验能够继承过来。很是容易上手,学习成本和二次开发成本都比较低。同时Swarm自己专一于Docker集群管理,很是轻量,占用资源也很是少。 *“Batteries included but swappable”,简单说,就是插件化机制,Swarm中的各个模块都抽象出了API,能够根据本身一些特色进行定制实现。
▲Swarm自身对Docker命令参数支持的比较完善,Swarm目前与Docker是同步发布的。Docker的新功能,都会第一时间在Swarm中体现。
Docker自诞生以来,其容器特性以及镜像特性给DevOps爱好者带来了诸多方便。然而在很长的一段时间内,Docker只能在单host上运行,其跨host的部署、运行与管理能力颇受外界诟病。跨host能力的薄弱,直接致使Docker容器与host的紧耦合,这种状况下,Docker容器的灵活性很难使人满意,容器的迁移、分组等都成为很难实现的功能点。
Swarm是Docker公司在2014年12月初新发布的容器管理工具。和Swarm一块儿发布的Docker管理工具还有Machine以及Compose。
Swarm是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时至关于一个虚拟的总体。Swarm使用标准的Docker API接口做为其前端访问入口,换言之,各类形式的Docker Client(dockerclient in go, docker_py, docker等)都可以直接与Swarm通讯,Swarm几乎所有用Go语言来完成开发。
2、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 节点
——————————————————————————————————–
docker swarm:集群管理,子命令有 init, join, leave, update。(docker swarm –help 查看帮助)
docker service:服务建立,子命令有 create, inspect, update, remove, tasks。(docker service–help 查看帮助)
docker node:节点管理,子命令有 accept, promote, demote, inspect, update, tasks, ls, rm。(docker node –help 查看帮助)
node 是加入到 swarm 集群中的一个 docker 引擎实体,能够在一台物理机上运行多个 node,node 分为:
manager nodes,也就是管理节点
worker nodes,也就是工做节点
1)manager node 管理节点:执行集群的管理功能,维护集群的状态,选举一个 leader 节点去执行调度任务。
2)worker node 工做节点:接收和执行任务。参与容器集群负载调度,仅用于承载 task。
3)service 服务:一个服务是工做节点上执行任务的定义。建立一个服务,指定了容器所使用的镜像和容器运行的命令。
service 是运行在 worker nodes 上的 task 的描述,service 的描述包括使用哪一个 docker 镜像,以及在使用该镜像的容器中执行什么命令。
4)task 任务:一个任务包含了一个容器及其运行的命令。task 是 service 的执行实体,task 启动 docker 容器并在容器中执行任务。
3、环境准备
3.1 环境说明
服务器版本:
CentOS Linux release 7.5.1804 (Core)
Docker版本:
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-88.git07f3374.el7.centos.x86_64
Go version: go1.9.4
Git commit: 07f3374/1.13.1
Built: Fri Dec 7 16:13:51 2018
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-88.git07f3374.el7.centos.x86_64
Go version: go1.9.4
Git commit: 07f3374/1.13.1
Built: Fri Dec 7 16:13:51 2018
OS/Arch: linux/amd64
Experimental: false
集群节点:
swarm01 192.168.0.1
swarm02 192.168.0.2
3.二、安装docker
3.三、修改主机名
分别修改两台机器的主机名,更改为swarm01,swarm02
hostnamectl set-hostname swarm01
hostnamectl set-hostname swarm01
3.4 关闭SELinux
[root@swaram01 ~]# getenforce
Disabled
[root@swaram01 ~]# /usr/sbin/sestatus -v
SELinux status: disabled
若disabled不是disabled
vi /etc/selinux/config
将SELINUX=enforcing改成SELINUX=disabled
注意: 设置后须要重启才能生效
3.五、编辑hosts文件
vi /etc/hosts
设置两台主机的对应关系
192.168.0.1 swarm01
192.168.0.2 swarm02
3.6 关闭防火墙
systemctl stop firewalld.service #中止firewall
systemctl disable firewalld.service #禁止firewall开机启动
3.7 修改docker监听端口
Swarm是经过监听2375端口进行通讯的,因此在使用Swarm进行集群管理以前,须要设置一下2375端口的监听。全部主机节点docker开启2375,2377(swarm集群)监听,docker版本不一样,配置方式不同
vim /lib/systemd/system/docker.service
在ExecStart加入:
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
3.八、重启docker服务
systemctl daemon-reload ##使配置文件生效
systemctl restart docker
4、Swarm安装和集群建立
4.一、Swarm镜像下载
在两台机器上分别安装Swarm,docker pull swarm
4.2 初始化Swarm
docker swarm init --advertise-addr 192.168.0.1
Swarm initialized: current node (zeisswb5lm92gj8rsng9pxzxd) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-043bhcd0voztnsui79l1rg0pyu4xq1q5x188jeyvppplt2rvnk-6diwivwlc14aipcji90tms4ua 192.168.0.1:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
上面命令执行后,该机器自动加入到swarm集群。这个会建立一个集群token,获取全球惟一的 token,做为集群惟一标识。后续将其余节点加入集群都会用到这个token值。
其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。
4.三、添加集群节点
而后在swaram02机器上执行如下命令
docker swarm join --token SWMTKN-1-5vqq9j2bwq5rllsubg49cs16440v2ixkngvf25e5688i86c8qf-eawa9w8wf2m5mu9e6ovmhjuyy 192.168.182.110:2377
4.四、查看集群节点
docker node ls