Swarm模式概述
如需使用Docker引擎的Swarm模式,请从Docker releases GitHub repository安装Docker引擎 v1.12.0-rc1 或更高版本。可以安装最新的Docker for Mac或Docker for Windows Beta。
Docker引擎1.1.2包含Swarm模式,在这种模式下对一组Docker引擎进行本机管理,这组引擎称为一个Swarm。使用Docker CLI可以创建一个Swarm集群,给这个集群部署应用服务,并对集群行为进行管理。
集群管理与Docker引擎相结合:使用Docker引擎CLI便可创建一个Docker引擎的Swarm,在这个集群中进行应用服务的部署。对于Swarm集群的创建和管理,无需其他额外的编排软件。
分散设计:Docker引擎不是在部署时处理节点角色之间的差异化内容,而是在运行时处理特殊化内容。通过使用Docker引擎可以部署管理节点和工作节点。这就意味着你可从一个单一的磁盘映像上创建一个完整的Swarm集群。
支持面向服务的组件模型:Docker引擎运用描述性方式,让用户在应用堆栈上定义各种服务的理想状态。例如,可以这样描述一个应用:包含一个配有信息排队服务的Web前端服务和一个数据库后端。
弹性放缩:对于每项服务,你都可以明确想要运行的任务数。当你增加或减少任务数时,Swarm管理器可自动增加或删除任务,以保持理想状态。
理想状态的调整:Swarm管理节点持续对集群状态进行监控,并对实际状态和你明确的理想状态之间的差异进行调整。例如,当你创建一个服务来运行一个容器的10个副本,托管其中两个副本的工作机崩溃时,管理器将创建两个新的副本,代替之前崩溃的两个。Swarm管理器会将新的副本分配给正在运行且可用的工作机。
多主机网络:你可以针对你的服务指定一个的覆盖网。Swarm管理器初始化或更新应用时,它会自动将地址分配给覆盖网上的容器。
服务发现:Swarm管理节点给Swarm集群上的每项服务分配一个唯一的DNS名称以及负载均衡的运行容器。可通过嵌入Swarm的DNS服务器对集群上运行的各个容器进行查询。
负载均衡:可以把服务端口暴露给外部负载均衡器。Swarm内部允许你明确如何分配节点间的服务容器。
默认安全:Swarm上的各个节点强制TLS互相授权和加密,从而确保自身与其他所有节点之间的通讯安全。可选择使用自签的根证书或自定义根CA证书。
滚动升级:升级时,可以逐增地将服务更新应用到节点上。Swarm管理器允许你对部署服务到不同节点集而产生的时滞进行控制。如果出错,可以回退任务到服务的前一个版本。
本部分介绍了一些Docker引擎1.12集群管理及编排特点的专门概念。
SwarmDocker引擎内置的集群管理和编排功能是利用SwarmKit工具进行开发。加入集群的引擎在Swarm模式下运行。可通过初始化Swarm集群或加入现有的Swarm集群启动引擎的Swarm模式。
Swarm集群指的是一个可以部署服务的Docker引擎集群。Docker引擎CLI包含Swarm集群管理指令,如增加或删除节点。CLI也包含将服务部署到Swarm集群以及对服务编排进行管理的指令。
在Swarm模式外运行Docker引擎时,需执行容器命令。在Swarm模式下运行引擎时,则是对服务进行编排。
节点
节点指加入Swarm集群的Docker引擎的一个实例。
为将应用部署到Swarm中,你需要向管理节点提交一个服务定义。管理节点会将被称为任务的工作单元分配给工作节点。
同时,管理节点也执行编排和集群管理功能,以维持Swarm集群的理想状态。管理节点选择一个单一的引导段来执行编排任务。
工作节点接收并执行管理节点分配的任务。默认管理节点也作为工作节点,但可将其设置为仅为管理节点。代理将所分配的任务的当前状态通知管理节点,以便管理节点能够维持理想状态。
服务与任务
服务指的是在工作节点上执行的任务。服务是Swarm集群系统的中心结构,也是用户与Swarm互动的主根。
当创建一项服务时,需明确使用哪个容器映像以及在运行的容器中执行何种指令。
在复制型服务模型下,Swarm管理器依据在理想状态下所设定的规模将一定数目的副本任务在节点中进行分配。
对于全球服务,Swarm在集群中各个可用的节点上运行任务。
一项任务承载一个Docker容器以及在容器内运行的指令。任务是Swarm集群的最小调度单元。管理节点按照在服务规模中所设定的副本数量将任务分配给工作节点。任务一旦被分配到一个节点,便不可能转移到另一个节点。它只能在被分配的节点上运行或失效。
负载均衡
Swarm管理器使用入口负载均衡来暴露服务,使这些服务对Swarm外部可用。Swarm管理器能自动给服务分配一个PublishedPort,或你可为服务在30000-32767范围内设置一个PublishedPort。
外部组件,例如云负载均衡器,能够在集群中任一节点的PublishedPort上访问服务,无论节点是否正在执行任务。Swarm中的所有节点会将入口连接按路径发送到一个正在运行任务的实例中。
Swarm模式有一个内部的DNS组件,可自动给集群中的每项服务分配一个DNS入口。Swarm管理器依据服务的DNS名称,运用内部负载均衡在集群内的服务之间进行请求的分配。
本文由寄云科技翻译,转载请联系原作者。欢迎关注寄云科技订阅号(neuclouddy),这里有最新云服务行业资讯,更有与PaaS、运维相关的技术干货!