docker swarm 简介
******************
简介
swarm 通过raft协议选举manager节点,无需额外的服务发现支持,避免了单点故障;
manager是中心管理节点,各node上运行agent接受manager的统一管理;
内置了dns服务器,可实现负载均衡;也可将端口暴露给外部的负载均衡器实现负载均衡
默认内嵌swarm:docker 1.12及以上版本,swarm相关命令已经嵌入到docker engine中,可以直接创建和管理swarm
去中心化:可将服务部署在manager、workers上,节点故障集群仍可使用
部署多种服务:可根据需要在集群上部署多种服务
扩容收缩:可动态调整每个服务的任务数量
故障转移:manager会监控集群状态,某个任务故障,manager会在可用worker节点上创建相应数量的任务
多主机网络:初始化或更新服务时,manager会自动为应用分配ip地址
服务发现:manager为服务分配唯一的dns名称,可通过内置的dns服务器查找对应服务
负载均衡:将端口暴露给外部的负载均衡器、用户也可以自行指定服务如何分布
安全通信:节点之间的通信默认加密传输,也可自行指定安全认证证书(certificate)
滚动升级:可以在使用时逐步更新应用,出错也可以回滚到之前的版本
******************
核心概念
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
一个service包含3个nginx task,每个task在一个docker容器中执行
***************
服务创建、任务执行
客户端发送服务创建请求:docker service create
manager node接到服务创建请求:创建service object、创建task、分配ip地址、为nodes分配task、调用worker执行任务
wrker node接到manager node分配的任务:与shecduler连接检查分配的任务、执行任务
***************
pending:任务等待执行
创建任务时,scale设置为0;
所有的nodes均不能正常使用;
参数(如内存)不能满足任务要求,任务处于等待执行状态,当满足条件的节点加入后可执行
任务的限定条件不能满足
******************
任务分类
副本任务(replicated services):在node上创建指定数量的task
全局任务(global services):在所有节点上创建一个task,当swarm新加入node时,也会创建全局task
******************
任务状态(task state)
new:任务创建
pending:任务资源已分配
assigned:task分配到指定节点
accepted:task被node接受
preparing:docker正在准备执行任务
starting:docker正在启动任务
running:任务正在执行
completed:任务正常结束
failed:任务执行出错
shutdown:任务接到终止请求,终止执行
rejected:node拒绝执行任务
orphaned:任务执行时间过长
remove:任务没有执行结束,但是与之相关的服务(service)被移除