Swarm是Docker社区提供的一个原生支持Docker集群管理的工具。其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口同意管理这些Docker主机上的各种Docker资源。Swarm和Kubernets比较类似,但是更加轻,具有的功能也较kubernetes少一些。
图介绍
上述图作为一个整体实际上都处于一个所谓的集群中,他可能对应了一到多台的实际服务器,。每台服务器上都装有Docker并且开启了基于HTTP的DockerAPI。这个集群中有一个SwarmManager的管理者,用来管理集群中的容器资源。管理者的管理对象不是服务层面而是集群层面的,也就是说通过Manager,我们只能笼统的向集群发出指令而不能具体到某台具体的服务器上要干什么(这也是swarm的根本所在)。至于具体的管理实现方式,Manager向外暴露了一个HTTP借口,外部用户通过这个HTTP接口来实现对集群的管理。对于大一点的集群,最好是拿出一台实际的服务器作为专门的管理者,作为学习而言,也可以把管理者和被管理者放在一台服务器上。
Swarm相关概念
节点
运行Docker的主机可以主动初始化一个Swarm集群或者加入一个已存在的Swarm集群,这样这个运行Docker的主机就成为一个Swarm集群的节点(node)。节点分为管理(manager)节点和工作(worker)节点。
管理节点用于swarm集群的管理,docker swarm命令基于只能在管理节点执行(节点退出命令docker swarm leave 可以在工作节点执执行)。一个Swarm集群可以管理多个管理节点,但只有一个管理节点可以成为leader,leader通过raft协议实现。
工作节点是任务执行节点,管理节点将服务(service)下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。如下图:
服务和节点
任务(Task)是Swarm中的最小调度单位,目前来说就是一个单一的容器。
服务(services)是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
- replicated services按照一定规则在各个工作节点上运行指定个数的任务
- global s