docker swarm 简介

 

 

******************

简介

 

swarm 通过raft协议选举manager节点,无需额外的服务发现支持,避免了单点故障

manager是中心管理节点,各node上运行agent接受manager的统一管理

内置了dns服务器,可实现负载均衡;也可将端口暴露给外部的负载均衡器实现负载均衡

 

                      

docker swarm 分布 docker swarm dns 详解_负载均衡

 

默认内嵌swarm:docker 1.12及以上版本,swarm相关命令已经嵌入到docker engine中,可以直接创建和管理swarm

去中心化:可将服务部署在manager、workers上,节点故障集群仍可使用

部署多种服务:可根据需要在集群上部署多种服务

扩容收缩:可动态调整每个服务的任务数量

故障转移:manager会监控集群状态,某个任务故障,manager会在可用worker节点上创建相应数量的任务

多主机网络:初始化或更新服务时,manager会自动为应用分配ip地址

服务发现:manager为服务分配唯一的dns名称,可通过内置的dns服务器查找对应服务

负载均衡:将端口暴露给外部的负载均衡器用户也可以自行指定服务如何分布

安全通信:节点之间的通信默认加密传输,也可自行指定安全认证证书(certificate)

滚动升级:可以在使用时逐步更新应用,出错也可以回滚到之前的版本

 

 

******************

核心概念

 

                      

docker swarm 分布 docker swarm dns 详解_负载均衡_02

node:swarm集群中的docker主机,分为manager node、worker node

manager node:监控与管理集群,调用任务,接受客户端请求进行任务分发(manager node可以充当worker node)

worker node:接受并执行manager node分发的任务

worker node可升级为manager node(docker node promote)

manager node可降级为worker node(docker node demote)

 

service:manager nodes、worker nodes上执行的task集合

task:docker 容器中执行的命令

 

外部负载均衡:将端口暴露给外部的负载均衡器,实现负载均衡

内部负载均衡:使用内置的dns服务器实现负载均衡

 

 

******************

service 工作过程

 

***************

service ==> task ==> container

 

                      

docker swarm 分布 docker swarm dns 详解_docker swarm 分布_03

一个service包含3个nginx task,每个task在一个docker容器中执行

 

***************

服务创建、任务执行

 

                      

docker swarm 分布 docker swarm dns 详解_均衡器_04

客户端发送服务创建请求:docker service create

manager node接到服务创建请求:创建service object、创建task、分配ip地址、为nodes分配task、调用worker执行任务

wrker node接到manager node分配的任务:与shecduler连接检查分配的任务、执行任务

 

***************

pending:任务等待执行

 

创建任务时,scale设置为0;

所有的nodes均不能正常使用;

参数(如内存)不能满足任务要求,任务处于等待执行状态,当满足条件的节点加入后可执行

任务的限定条件不能满足

 

 

******************

任务分类

 

                      

docker swarm 分布 docker swarm dns 详解_负载均衡_05

 

副本任务(replicated services):在node上创建指定数量的task

全局任务(global services):在所有节点上创建一个task,当swarm新加入node时,也会创建全局task

 

 

******************

任务状态(task state)

 

                      

docker swarm 分布 docker swarm dns 详解_docker swarm 分布_06

 

new:任务创建

pending:任务资源已分配

assigned:task分配到指定节点

 

accepted:task被node接受

preparing:docker正在准备执行任务

starting:docker正在启动任务

running:任务正在执行

 

completed:任务正常结束

failed:任务执行出错

shutdown:任务接到终止请求,终止执行

rejected:node拒绝执行任务

orphaned:任务执行时间过长

remove:任务没有执行结束,但是与之相关的服务(service)被移除