深入浅出Docker Swarm容器群集

什么是Docker Swarm

深入浅出Docker Swarm容器群集
Swarm是Docker公司推出的用来管理docker集群的平台,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swarm群集管理和编排功能,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker。

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。

Docker Engine CLI和API包括了管理Swarm节点命令,比如添加,删除节点,以及在Swarm中部署和编排服务,也增加了服务栈(Stack),服务(Service),任务(Task)概念

Docker Swarm基本结构图

深入浅出Docker Swarm容器群集
从下往上来看 Client使用Swarm群集管理工具来调度并使用Cluster群集以及群集之下的各个node工作节点,同时Swarm中的node discovery节点检查工具也可以对节点状态进行状态检测并让node工作节点保持Swarm期望状态。

Swarm的工作模式

1.Node
深入浅出Docker Swarm容器群集如图可见,Manager为Swarm的Leader也就是管理者,Manager根据不同的需求或者用途,来调度使用管理下的工作节点。

2.Service

深入浅出Docker Swarm容器群集
现在Swarm里同时有三个Nginx副本任务,如果是普通的单节点模式,不但工作效率低,而且也容易导致服务器压力过大资源利用不平衡,所以使用Docker Swarm来下发个工作节点任务,三个工作节点同时来处理Nginx副本。

3.任务与调度

深入浅出Docker Swarm容器群集
用户通过Docker 引擎来创建任务,并在Docker Swarm Manager里通过API接口来创建服务任务以及项目,并通过任务指令向工作节点发布任务进行调度使用,工作节点收到后根据Manager的服务任务,来执行任务并运行容器。

Swarm特点

1.Docker Engine集成集群管理
使用Docker Engine CLI 创建一个Docker Engine的Swarm模式,在集群中部署应用程序服务。
2.去中心化设计
Swarm角色分为Manager和Worker节点,Mannger节点故障不影响应用使用
3.扩容缩容
可以声明每个服务运行的容器数量,通过添加或删除容器数自动调整期望的状态。
4.期望状态协调
Swarm Manager节点不断监视群集状态,并调整当前状态与期望状态之间的差异。
5.多主机网络
可以为服务制定overlay网络,当初始化或更新应用程序时,Swarm manager会自动为overlay网络上的容器分配IP地址。
6.服务发现
Swarm manager节点为群集中的每个服务分配唯一的DNS记录和负载均衡VIP,可以通过Swarm内置DNS服务器查询集群中每个运行的容器。
7.负载均衡
实现服务副本负载均衡,提供入口访问。
8.安全传输
Swarm中的每个节点使用TLS相互验证和加密,确保安全的其他节点通信。
9.滚动更新
升级时,逐步将应用服务更新到节点,如果出现问题,可以将任务回滚到先前版本

使用Docker前提

1.Docker版本1.12+
2.群集节点之间保证TCP 2377(集群管理),TCP/UDP 7946(容器网络发现),和UDP 4789(overlay网络)端口通信