首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Docker Swarm相关架构及概念

Docker Swarm更确切地说应该称为Swarm Mode。在Docker 1.12.0之前Docker Swarm是一个单独的项目,要想使用Docker Swarm需要单独安装。Docker 1.12.0 及后续版本Docker Swarm集成到Docker Engine中,所以安装了Docker,只要使用docker swam命令初始化host或者加入host到集群,docker就启动了SwarmMode模式了。另外我们也不需要安装外部的服务发现及配置管理系统了(比如zookeeper、consul、etcd等),可以说更加方便了。这里我们暂且就叫它Docker Swarm了。

Docker Swarm包含以下重要的内容:

docker swarm:集群管理

docker node:节点管理

docker service:服务管理

在开始之前,我们需要了解一些基本概念:

Cluster

顾名思义cluster是集群的意思,所以说这里Docker Swarm管理的是Docker Host集群。Cluster并不是简单的把一堆Host堆在一起就称为集群了。集群是为了使提高资源的利用率,使之利用率最大化。集群一般要求高可用、可以负载均衡,而且管理应用也方便。用户不需要关注资源如何使用,集群本身就会搞定这些事情。

Nodes

Node表示加入Swarm集群中的一个Docker Engine实例,基于该Docker Engine可以创建并管理多个Docker容器。其中,最开始创建Swarm集群的时候,Swarm Manager便是集群中的第一个Node。在所有的Node中,又根据其职能划分为Manager Node和Worker Node:

(1)Manager Node

Manager Node负责调度Task,一个Task表示要在Swarm集群中的某个Node上启动Docker容器,一个或多个Docker容器运行在Swarm集群中的某个Worker Node上。同时,Manager Node还负责编排容器和集群管理功能(或者更准确地说,是具有Manager管理职能的Node),维护集群的状态。需要注意的是,默认情况下,Manager Node也作为一个Worker Node来执行Task。Swarm支持配置Manager只作为一个专用的管理Node,后面我们会详细说明。

(2)Worker Node

Worker Node接收由ManagerNode调度并指派的Task,启动一个Docker容器来运行指定的服务,并且Worker Node需要向Manager Node汇报被指派的Task的执行状态。

Services and Tasks

根据上图描绘的,Swarm中部署的最小粒度是service,其下才是容器。可以理解为可以批量的部署应用。当create service时,Manager Node就会分配task给可用的Worker Node去启动container。

Docker Swarm具有如下基本特性:

集群管理集成进Docker Engine

使用内置的集群管理功能,我们可以直接通过Docker CLI命令来创建Swarm集群,然后去部署应用服务,而不再需要其它外部的软件来创建和管理一个Swarm集群。

去中心化设计

Swarm集群中包含Manager和Worker两类Node,可以直接基于DockerEngine来部署任何类型的Node。而且在Swarm集群运行期间,我们可以对其作出任何改变,实现对集群的扩容和缩容等,如添加Manager Node,如删除Worker Node,而做这些操作不需要暂停或重启当前的Swarm集群服务。

声明式服务模型(Declarative Service Model)

在我们实现的应用栈中,Docker Engine使用了一种声明的方式,让我们可以定义我们所期望的各种服务的状态,例如,我们创建了一个应用服务栈(stack):一个Web前端服务、一个后端数据库服务、Web前端服务又依赖于一个消息队列服务。

服务扩容缩容

对于我们部署的每一个应用服务,我们可以通过命令行的方式,设置启动多少个Docker容器去运行它。已经部署完成的应用,如果有扩容或缩容的需求,只需要通过命令行指定需要几个Docker容器即可,Swarm集群运行时便能自动地、灵活地进行调整。

协调预期状态与实际状态的一致性

Swarm集群Manager Node会不断地监控集群的状态,协调集群状态使得我们预期状态和实际状态保持一致。例如我们启动了一个应用服务,指定服务副本为10,则会启动10个Docker容器去运行,如果某个Worker Node上面运行的2个Docker容器挂掉了,则Manager Node会选择集群中其它可用的Worker Node,并创建2个服务副本,使实际运行的Docker容器数仍然保持与预期的10个一致。

滚动更新(Rolling Update)

对于服务需要更新的场景,我们可以在多个Node上进行增量部署更新,Manager Node支持通过使用Docker CLI设置一个delay时间间隔,实现多个服务在多个Node上依次进行部署。这样可以非常灵活地控制,如果有一个服务更新失败,则暂停后面的更新操作,重新回滚到更新之前的版本。

多主机网络

我们可以为待部署应用服务指定一个Overlay网络,当应用服务初始化或者进行更新时,Manager Node在给定的Overlay网络中为Docker容器自动地分配IP地址,实际是一个虚拟IP地址(VIP)。

服务发现

Manager Node会给集群中每一个服务分配一个唯一的DNS名称,对运行中的Docker容器进行负载均衡。我们可以通过Swarm内置的DNS Server,查询Swarm集群中运行的Docker容器状态。

负载均衡

在Swarm内部,可以指定如何在各个Node之间分发服务容器(Service Container),实现负载均衡。如果想要使用Swarm集群外部的负载均衡器,可以将服务容器的端口暴露到外部。

安全策略

在Swarm集群内部的Node,强制使用基于TLS的双向认证,并且在单个Node上以及在集群中的Node之间,都进行安全的加密通信。我们可以选择使用自签名的根证书,或者使用自定义的根CA(Root CA)证书。

后面我们通过实践一步步体会Swarm的这些特性。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206G1FS0Q00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券