Docker利器之Swarm项目

DockerSwarm 目前是 Docker 社区的入室独家弟子

Docker利器之Swarm项目

从 Docker1.12 开始 Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。Swarm mode 内置 kv 存储功能,提供了众多的新特性,比如具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker 原生的 Swarm 集群具备与 Mesos、Kubernetes 竞争的实力。

  • 集群管理集成进 Docker 命令
    • 使用内置的集群管理功能,我们可以直接通过 Docker CLI 命令来创建 Swarm 集群,然后去部署应用服务,而不再需要其它外部的软件来创建和管理一个 Swarm 集群。
  • 去中心化设计
    • Swarm 集群中包含 Manager 和 Worker 两类 Node 形式,我们可以直接基于 Docker Engine 来部署任何类型的 Node。而且,在 Swarm 集群运行期间,我们既可以对其作出任何改变,实现对集群的扩容和缩容等,如添加 Manager Node,如删除 Worker Node,而做这些操作不需要暂停或重启当前的Swarm 集群服务。
  • 声明式服务模型
    • 在我们实现的应用栈中,Docker Engine 使用了一种声明的方式,让我们可以定义我们所期望的各种服务的状态,例如,我们创建了一个应用服务栈:一个 Web 前端服务、一个后端数据库服务、Web 前端服务又依赖于一个消息队列服务。
  • 服务扩容缩容
    • 对于我们部署的每一个应用服务,我们可以通过命令行的方式,设置启动多少个 Docker 容器去运行它。已经部署完成的应用,如果有扩容或缩容的需求,只需要通过命令行指定需要几个 Docker 容器即可,Swarm 集群运行时便能自动地、灵活地进行调整。
  • 协调预期状态与实际状态的一致性
    • Swarm 集群 Manager Node 会不断地监控集群的状态,协调集群状态使得我们预期状态和实际状态保持一致。例如我们启动了一个应用服务,指定服务副本为 10,则会启动 10 个 Docker 容器去运行。如果某个 Worker Node 上面运行的 2 个 Docker 容器挂掉了,则 Swarm Manager 会选择集群中其它可用的 Worker Node,并创建 2 个服务副本,使实际运行的 Docker 容器数仍然保持与预期的 10 个一致。
  • 多主机网络
    • 我们可以为待部署应用服务指定一个 Overlay 网络,当应用服务初始化或者进行更新时,Swarm Manager 在给定的 Overlay 网络中为 Docker 容器自动地分配 IP 地址,实际是一个虚拟 IP 地址(VIP 地址)。
  • 服务发现
    • Swarm Manager 会给集群中每一个服务分配一个唯一的 DNS 名称,对运行中的 Docker 容器进行负载均衡。我们可以通过 Swarm 内置的 DNS Server,查询 Swarm 集群中运行的 Docker 容器状态。
  • 负载均衡
    • 在 Swarm 内部,可以指定如何在各个 Node 之间分发服务容器,实现负载均衡。如果想要使用 Swarm 集群外部的负载均衡器,可以将服务容器的端口暴露到外部。
  • 安全策略
    • 在 Swarm 集群内部的 Node,强制使用基于 TLS 的双向认证,并且在单个 Node 上以及在集群中的 Node 之间,都进行安全的加密通信。我们可以选择使用自签名的根证书,或者使用自定义的根 CA 证书。
  • 滚动更新
    • 对于服务需要更新的场景,我们可以在多个 Node 上进行增量部署更新,Swarm Manager 支持通过使用 Docker CLI 设置一个 delay 时间间隔,实现多个服务在多个 Node 上依次进行部署。这样可以非常灵活地控制,如果有一个服务更新失败,则暂停后面的更新操作,重新回滚到更新之前的版本。