文档章节

Docker swarm mode初探

China_OS
 China_OS
发布于 2018/07/05 16:34
字数 1805
阅读 50
收藏 0

    Docker从1.12引入了swarm模式,swarm mode用来管理集群化的docker engines,被称作swarm。可以使用docker CLI来创建swarm,给swarm上部署应用,管理swarm的行为等等。。你可以创建一个集群包含一个或者多个docker engines,这个被叫做swarm mode。一个swarm包含了多个node,node可以是物理机、虚拟机等等。node包含了两个角色:managers、workers

manager node:

  1. 维护集群状态
  2. 调度服务
  3. 服务swarm模式下的HTTP API

    manager之间采用raft协议通讯,所以可以通过部署多台managers建立manager的高可用,但是manager必须是奇数个

worker node:

  1.  work nodes就是docker engine实例,唯一的用途就是执行容器。你可以创建一个只有一个manager的swarm,但是不能创建一个只有一个node,确没有manager的swarm集群。

在部署一个app容器镜像到docker的swarm模式的时候,一般是创建一个service。当你创建一个service的时候,你要指定那个镜像会被使用,并且要在镜像里面执行上面命令,你也可以指定这个服务的一些其他选项:

  1. 在swarm模式下,这个service对外暴露的端口
  2. 一个overlay网络用来连接到swarm下的其他service
  3. cpu和mem的使用配额限制
  4. 一个滚动升级策略
  5. 这个镜像在运行时的副本个数

有两种类型的service部署模式:replicated和global

  1. 在replicated service模式下,你可以指定该service你想有多少个task在运行,比如,你可以指定一个http服务有三个replicas,每个都提供相同的内容
  2. 在global service模式下,该service在每一个node上运行一个task,这里不需要预先设定task的数量,任何时候只要你在集群里面加入新的node,调度系统都会在该新node上自动部署该服务,这种场景适合在机器上部署监控客户端等等。

docker允许你创建service,service可以运行tasks,一个service是一个描述的最终状态,task是工作的work,work通过swarm来调度到node节点上,服务创建使用的是下面的流程:

  1. 使用docker service create创建服务
  2. 请求到达Docker manager节点上
  3. Docker manager节点调度该请求运行到一个workers node上
  4. 每个service可以启动多个tasks实例
  5. 每个tasks实例都有自己的生命周期

一个task会一直运行到它的任务完成,如果一个task停止了,该task是不会再次运行的。task会通过一系列状态最终完成或者失败,task一般有以下状态:

  • NEW    初始化task
  • PENDING    阻塞状态
  • ASSIGNED    分配到node状态
  • ACCEPTED    被node接收状态
  • PREPARING    准备状态
  • STARTING    启动状态
  • RUNNING    运行状态
  • COMPLETE    正常运行完毕状态
  • FAILED    运行失败状态
  • SHUTDOWN    docker关闭该task状态
  • REJECTED    work node拒绝该task状态
  • ORPHANED    node节点宕机太长状态
  • REMOVE

当你第一次安装并启动docker engine时,swarm模式是默认被禁止的。当swarm模式打开后,你可以通过swarm service来管理services,有两种方式可以运行在swarm模式:

  • 创建一个新的swarm
  • 加入现有的swarm

docker engine创建swarm的流程:

  1. 交换当前node到swarm模式
  2. 创建一个名为default的swarm
  3. 指定当前node为当前swarm的leader manager
  4. 命名该node的名称为该主机名
  5. 配置manager监听在本机的2377端口
  6. 设置当前node为active状态,这意味这该node可以接收集群调度来的tasks
  7. 启动一个内部的分布式数据存储系统
  8. 默认生成一个自签名的CA证书
  9. 生成一个tokens,为后面的worker和manager加入到该swarm
  10. 创建一个名为ingress的overlay网络,对外暴露swarm上的服务

    manager node使用advertise地址来接受其他node访问Swarmkit API and overlay networking的请求,其他在swarm集群中的node,必须可以访问manager的advertise地址 ,如果你不指定advertise地址,docker会自动检查系统是否有一个单ip地址,如果有,则监听在该地址的2377端口。如果该系统有多个ip地址,你必须通过--advertise-addr来指定一个地址。

    新的node需要一个token才能加入现有swarm集群,worker node使用的token不同于manager node使用的token,node只有使用join-token才能加入swarm,当Rotating join token的时候,是不会影响已经加入swarm集群的node的,rotation token可以确保老的token不能被所有的新node使用来加入swarm集群。

下面是swarm的一些关键点:

  1. 一个swarm包含了多个运行在swarm mode下的docker host,分别由manager和workers组成。manager来管理成员和授权,worker来运行swarm service。一个docker host可以是一个manager,也可以是一个worker,或者即是manager也是worker。还有一个大的优势是,如果swarm service中的容器是standalone模式的,你可以在修改service的配置后(networks、volumes) 不用重启service。docker会自动处理这些。
  2. 当一个docker host运行在swarm模式,你照样可以运行standalone模式的容器,但是swarm只能管理swarm service。
  3. node 一个docer engine就是一个node,当你需要部署应用到swarm的时候,需要在manager node上提交部署作业,manager node会派遣task到worker node上。manager node也有编排功能。worker nodes接收并执行task。
  4. service 一个service是定义好的在worker node上执行的task,swarm系统是一个中心结构的系统,当你定义好一个service的时候,你需要制定使用的镜像以及在镜像里面执行的命令。 在replicated services模式下,swarm manager分配定义好的replica task的副本数量的task在worker node上 在global services模式下,swarm service只运行一个task在worker node上
  5. tasks 一个task包括一个docker容器和在容器里面运行的命令。task会被swarm自动调度。manager分配task到worker上。一旦task被分配到一个node上,该task就不能移动到其他node上了,除非该node fail。
  6. Load balancing swarm使用 ingress load balancing,swarm manager可以设置一个PublishedPort给service,如果不指定PublishedPort,则是在30000-32767这个范围内自动选择。外部的请求,例如LB,可以通过PublishedPort来访问服务,但是这个LB的服务必须在node集群上,swarm集群中的所有节点都会连接到正在运行的service上,而不论该node上是不是有运行该service服务。在swarm内部有一个DNS,可以自动的分片在swarm中每个service的entry,swarm manager使用内部LB来分发请求到集群内部的service上

 

 

 

© 著作权归作者所有

共有 人打赏支持
China_OS
粉丝 421
博文 460
码字总数 513906
作品 0
静安
技术主管
私信 提问
[docker]swarm初探

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/halcyonbaby/article/details/41812313 声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog...

寻觅神迹
2014/12/09
0
0
Swarm、Swarmkit和Swarm模式傻傻分不清

Docker 1.12内置了Swarm模式(mode),这也是最近关于Docker新闻中的重点内容吧。 如果不熟悉的人该问了,这个和之前的Docker Swarm(在Docker 1.6时就有了)有什么不同么?之前的Swarm要弃用...

linuxprobe
2016/08/13
0
0
Docker Swarm 中最重要的概念- 每天5分钟玩转 Docker 容器技术(94)

从主机的层面来看,Docker Swarm 管理的是 Docker Host 集群。所以先来讨论一个重要的概念 - 集群化(Clustering)。 服务器集群由一组网络上相互连接的服务器组成,它们一起协同工作。一个集...

CloudMan6
2017/11/17
0
0
A Step-by-Step Guide for Protecting Sensitive Data in Docker

Managing passwords, access tokens, and private keys in an application can be tedious. Any small mistake accidentally exposes all the secret information. Even storing such things......

Jatin Demla
2017/12/13
0
0
How to Install and Configure Docker Swarm Mode on CentOS 7

By Hitesh Jethva, Alibaba Cloud Tech Share Author Docker Swarm is a native clustering tool for Docker containers that can be used to manage a cluster of Docker nodes as a single......

Cloud Focus
2018/04/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的KvStateRegistryGateway

序 本文主要研究一下flink的KvStateRegistryGateway KvStateRegistryGateway flink-1.7.2/flink-runtime/src/main/java/org/apache/flink/runtime/jobmaster/KvStateRegistryGateway.java pu......

go4it
19分钟前
2
0
Java springboot B2B2C o2o多用户商城 springcloud架构 (十四)在springboot中用redis实现消息队列

准备阶段 安装redis,可参考我的另一篇文章。 java 1.8 maven 3.0 idea 环境依赖 创建一个新的springboot工程,在其pom文件,加入spring-boot-starter-data-redis依赖: <dependency> ...

itcloud
25分钟前
1
0
云计算的2018年都有什么变化?

2018 年,区块链(Blockchain)在技术圈的风头一时无两,连此前大红大紫的人工智能(AI)都稍逊风骚,云计算圈则奋十年之余烈,完善产品,深耕行业,让越来越多的行业客户接受和实施云计算。回顾...

linuxCool
25分钟前
4
0
[activiti6]调用WebService几个坑

[activiti6]几个报错解决 运行test webservice org.activiti.engine.ActivitiException: no default process engine availableat org.activiti.engine.impl.test.PluggableActivitiTestCas......

Danni3
30分钟前
1
0
一张图看懂SQL的各种Join用法

下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。 具体分解如下: 1、INNER JOIN(内连接)   SELECT FROM Table_A AINNER JOIN Table_B BON A.Key = B.Key 2、L......

dragon_tech
54分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部