Docker swarm mode初探_weixin_34124939的博客-程序员信息网

技术标签: 运维  

    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上

 

 

 

转载于:https://my.oschina.net/guol/blog/1840879

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34124939/article/details/91593877

智能推荐

春秋战国时代百家争鸣大师辈出,例如,庄子:终身不仕,以快吾志焉!_禅与计算机程序设计艺术的博客-程序员信息网

(节自 《老子韩非列传》)庄子者,蒙人也,名周。周尝为蒙漆园吏,与梁惠王、齐宣王同时。其学无所不窥。然其要本归于老子之言,故其著书十余万言,大抵率寓言也。作《渔父》、《盗跖》、《胠箧》,以诋訾孔子之徒,以明老子之术。畏累虚、亢桑子之属,皆空语,无事实。然善属书离辞,指事类情,用剽剥儒墨,虽当世宿学,不能自解免也。其言洸洋自恣以适己,故自王公大人不能器之。楚威王闻庄周贤,使使厚币迎之,许以为相...

Zookeeper、Dubbo面试题总结_^果然好^的博客-程序员信息网_zookeeper 面试题

【zookeeper面试】ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。1、zookeeper是一个开源的分布式协调服务框架。2、应用场景:分布式通知/协调、负载均衡、配置中心...

面试题二_.git的博客-程序员信息网

创建AJAX过程 创建XMLHttpRequest对象,也就是创建一个异步调用的对象。 创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息。 设置响应HTTP请求状态变化的函数。 发送HTTP请求。 获取异步调用返回的数据。 使用javaScript和DOM实现局部刷新。 请介绍一下XMLhttprequest对象(a...

matlab 神经网络做回归预测_大兰子小丸子的博客-程序员信息网_matlab bayesian regulation

本文是用 matlab R2014 a 中的神经网络,做的预测小例子。步骤:1. 选择神经网络类型例如, feedforwardnet(hiddenSizes,trainFcn) 参数是层数、训练函数,这是一种前馈网络,用法: net = feedforwardnet(10);特殊的前馈网络:fitting networks (fitnet函数)、 pattern networks(pat

LeetCode热题100道_it00zyq的博客-程序员信息网_leetcode高频100题

文章目录1、两数之和2、两数相加3、无重复字符的最长子串1、两数之和通往【LeetCode - 两数之和】的任意门解法一:暴力解采用两层for循环,第一次层循环选取第一个数,第二次循环选取第二个数,第二层循环找到符合的数则直接返回结果。时间复杂度:O(n^2)空间复杂度:O(1)vector<int> twoSum(vector<int>& nums, int target) { vector<int> res;

Unity之引导功能遮罩事件穿透_彩色墨水的博客-程序员信息网_unity引导

Unity之新手引导shader遮罩事件穿透效果图设计思路1.新手引导我们期待开发内容不影响正常的功能模块,意思就是分层,新手引导在正常功能之上2.新手引导层级用一层深色bg显示遮住正常功能层级,在需要引导的位置留出高亮区域3.在这个新手引导层做事件渗透,给指定的对象或UI做事件渗透,如果点击交互位置处于指定UI或对象范围内,让事件渗透新手引导层,到正常功能层。场景搭建搭建两个层级一个正常功能层级为Canvas下,一个新手引导层级在GuideHolder下。制作新手引导的预制体材

随便推点

遥感影像融合后去黑边_mts8939的博客-程序员信息网_大气校正后的图像为什么带黑边

遥感影像大气校正后会有黑边,去除的方式是编辑头文件(Edit Header)具体不述。本文主要阐述使用GS工具进行影像融合后的黑边去除的步骤。如图所示,经过融合后的影像周围存在黑边且黑边的值与大气校正后的黑边值不同因此不能用同样方法去除。去除步骤如下:一、在ArcMap中打开影像(dat格式打开后的影像有7个波段,但是地图中仅显示3个波段,若打开的是TIFF格式,则只有三个波段,要轻松很多)...

py-05-JAVAAPI1_GC-扫地僧的博客-程序员信息网

目录:1、day01-OOP部分知识点、JDK API、文档注释、String。2、day02-String、StringBuilder、构造方法、日期操作3、day03-Calendar、Object类、包装类、Number、正则表达式4、day04-正则表达式、集合Collection、迭代器5、day05-List集合、队列:Queue、双端队列:Deque、栈:Stack6、day06-List、Set、Mapday011.OOP部分知识点类和对象对象...

CCF CSP 2020-6-2 稀疏向量 C语言100分_JY_0329的博客-程序员信息网

CCF CSP 2020-6-2 稀疏向量 C语言100分稀疏向量 完成时间11-16 16:51 代码长度569B C 正确 100分 耗时187ms 空间使用9.964MB这个代码运行错误,只得了60分,但我感觉这个思路挺好的,不知道有没有大神可以简化一下。思路:把稀疏向量直接放进index指向的位置,4 5 意味着 u[4]=5,cnt判断是不是两个向量都有这个维的数据,如果有,就用record记录下来。最后直接用record进行查找#include<stdio.h> //只

计算机中文核心期刊哪个快,计算机中文核心期刊要多久cpci加急,又快又水的sci期刊..._黄昏看日出的博客-程序员信息网

计算机中文核心期刊要多久cpci加急,又快又水的sci期刊拥有快速快速的文章发表服务平台是从事专业学术文章撰写辅导、发表期刊推荐等业务为主的网络服务平台。多年的发展过程中,我们为客户解决疑难问题近万次,在帮助高级知识分子奠定自己的学术价值活动中默默奉献着自己,不求回报,却反而获得了社会各界的一致好评。现在有不少人开个免费的空间、或者个人博客,打着期刊社的旗号进行骗取钱财,高级期刊网会根据您的专业方...

IP协议首部详细分析_zhangdaisylove的博客-程序员信息网_ip层首部

IP协议是我们学习网络协议最开始,也是最基础的协议。那么今天我们主要介绍一下有关于IP协议头格式的基本状态。那么就让我们具体看以下有关于IP协议头格式和Sniiffer Portable的IP头的相关内容吧。IP(Internet Protocol,因特网协议)是OSI第三层——网络层协议,本节仅以IPv4版本为例进行介绍。IP协议也是一个无连接的协议,主要就是负责在主机间寻址,并为数据包设定路由

KITTI数据集下载及解析_Michael.CV的博客-程序员信息网_kitti数据集下载

KITTI数据集下载及解析版本更新时间更新内容作者1V 1.0xxx完成主体内容W. Xiao2文章目录KITTI Dataset1 简介1.1 数据采集平台1.2 坐标系2 数据解析2.1 image文件2.2 velodyne文件2.3 calib文件2.4 label文件3 KITTI可视...

推荐文章

热门文章

相关标签