Swarm项目,通过把多个Docker Engine聚集在一起,形成一个打的docker-engine,对外提供容器的群集服务。同时,这个群集对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker群集。
Swarm是个一套较为简单的工具,用以管理Docker群集,使得Docker群集暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go,docker_py,docker等)均可以直接与Swarm通信,Swarm几乎全部用Go语言来完成开发的。
1、Swarm
群集的管理和编排是使用嵌入到Docker引擎的SwarmKit,可以在Docker初始化时启动Swarm模式或者加入已存在的Swarm
2、Node
一个节点(node)是已加入到swarm的Docker引擎的实列当部署应用到集群,你将会提交服务定义到管理节点,接着Manager管理节点调度任务到worker节点,manager节点还执行维护集群的状态的编排和群集管理功能,work节点接收并执行来自manager节点的任务。通常,manager节点也可以是worker节点,work节点会报告当前状态给manager节点。
3、服务(Service)
服务是要在work节点上要执行任务的定义,它在工作这节点上执行,当创建服务的时,需要指定容器镜像。
4、任务(Task)
任务是在docker容器中执行的命令,manager节点根据指定数量的任务副本分配任务给work节点。
docker swarm:集群管理,子命令由init,join,leave,updata。(docker swarm -help查看帮助)
docker service:服务创建,子命令由create,inspect,update,remove,tasks。(docker service -help查看帮助)
node是加入到swarm集群中的一个docker引擎实体,可以在一台物理机上运行多个node,node分为:
1)Manager node(管理节点):执行集群的管理功能,维护集群的状态,选觉一个leader节点去执行调度任务。
2)Work node(工作节点):接收和执行任务,参与容器集群负载调度,仅用于承载task。
service服务:一个服务是工作节点上执行任务的定义。创建一个服务,制定了容器所使用的镜像和容器运行的命令。
task任务:一个任务 包含了一个容器及其运行的命令。task是service的执行实体,task启动docker容器并在容器中执行任务。
1、系统环境
两台centos 7分别对应swarm01和swarm02
swarm01:192.168.80.100
swarm02:192.168.80.110
2、修改主机名
hostnamectl set-hostname swarm01
hostnamectl set-hostname swarm02
vi /etc/hosts //分别修改hosts文件
192.168.80.100 swarm01
192.168.80.110 swarm02
3、安装docker(每台都要装)vi /etc/yum.repos.d/CentOS-Base.repo
末行添加docker的yum源
[docker-repo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpgyum install -y docker-engine
4、更改docker的镜像源
mkdir /etc/docker
vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
或
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}systemctl daemon-reload //重载配置文件
5、修改docker监听端口
Swarm是通过监听2375端口进行通信的,所以在使用Swarm进行集群管理之前,需要设置一下2375端口的监听。所有主机节点docker开启2375监听,docker版本不同,配置方式不一样。vi /lib/systemd/system/docker.service
在ExecStart加入:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
systemctl start docker //启动docker
netstat -anput | grep 2375 //查看监听端口
docker pull swarm //从docker仓库拉取swarm
docker images 查看是否下载成功
docker swarm init --advertise-addr 192.168.80.100 //初始化Swarm
--advertis-addr:swarm中的work节点使用此IP地址与manager联系
上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。docker node ls //查看节点,只有本机加入swarm集群
7、添加集群节点
在swaram02机器上执行以下命令
docker swarm join \
--token SWMTKN-1-0mp5blsez01rkhdngyx7qnwapwfaugexq0llasg5t4mlr0rpdj-2i3qqd7ejsl73ga5fqncmeroe \
192.168.80.100:2377
docker node list //在swarm01上查看
8、升级或降级节点(只能在主节点上)
docker node promote swarm02 //将swarm02升级为主节点
docker node demote swarm01 //将swarm02降级为工作节点
docker node list //在swarm02上查看
docker network create --driver overlay skynet
docker network ls //查看网络
10、swarm部署http(在主节点swarm02上)docker service create -p 80:80 --name webserver --replicas 4 httpd
--name:服务名称
--replicas:服务副本集个数
-p:端口映射docker service ls //查看服务列表
docker service ps webserver | grep Running //查看具体服务开启情况
web分别访问192.168.80.100和192.168.80.110
注意:swarm02上并没有部署httpd但是可以访问网页,说明swarm01节点接收了主节点的任务部署。
11、swarm图像化管理(swar02上)
docker pull portainer/portainer //拉取图像化管理镜像
docker run -d -p 9000:9000 --restart=always --name prtainer-test portainer/portainer //启动镜像
转载于:https://blog.51cto.com/13871362/2352697