docker容器编排(orchestration)工具

常见容器编排工具

  • Swarm
  • Fleet
  • Kubernetes
  • Mesos

现在的主流是Kubernetes.

Swarm

Swarm是Docker的原生集群工具,Swarm使用标准的Docker API,这意味着容器能够使用docker run命令启动,Swarm会选择合适的主机来运行容器,这也意味着其他使用Docker API的工具比如Composebespoke脚本也能使用Swarm,从而利用集群而不是在单个主机上运行。

Swarm的基本架构很简单:每个主机运行一个Swarm代理,一个主机运行Swarm管理器(在测试的集群中,这个主机也可以运行代理),这个管理器负责主机上容器的编排和调度。Swarm能以高可用性模式(etcdConsulZooKeeper 中任何一个都可以用来将故障转移给后备管理器处理)运行。当有新主机加入到集群,有几种不同的方式来发现新加的主机,在Swarm中也就是discovery。默认情况下使用的是token,也就是在Docker Hub上会储存一个主机地址的列表。

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

Kubernetes

Kubernetes是一个由google基于他们上个世纪容器产品化的经验而推出的容器编排工具,Kubernetes有些固执己见对于容器如何组织和网络强制了一些概念,你需要了解的主要概念有:

  • Pods – Pods是容器一起部署与调度的群体。Pods与其他系统的单一容器相比,它组成了Kubernetes中调度的原子单元。Pod通常会包括1-5个一起提供服务的容器。除了这些用户容器,Kubernetes还会运行其他容器来提供日志和监控服务。在Kubernetes中Pods寿命短暂;随着系统的进化他们不断地构建和销毁。
  • Flat Networking Space – Kubernetes的网络是跟默认的Docker网络不同。在默认Docker网络中, 容器存在于一个私有子网络中,它需要赚翻主机上的端口或者使用代理才能与其他主机上的容器通讯。在Kubernetes,pod中的容器会分享一个IP地址,但是该地址空间跟所有的pods是“平”的,这意味着所有pods不用任何网络地址转换(NAT)就可以互相通讯。这就使得多主机群集更容易管理,不支持链接的代价使得建立单台主机(更准确地说是单个pod)网络更为棘手。由于在同一个pod中的容器共享一个IP,它们可以通过使用本地主机地址端口进行通信(这并不意味着你需要协调pod内的端口使用)。
  • Labels – Labels是附在Kubernetes对象(主要是pods)上用于描述对象的识别特征的键值对,例如版本:开发与层级:前端。通常Labels不是唯一的;它们用来识别容器组。Labels选择器可以用来识别对象或对象组,例如设置所有在前端层的pods与环境设置为production。使用Labels可以很容易地处理分组任务,例如分配pods到负载均衡组或者在组织之间移动pods。
  • Services – Services是通过名称来定位的稳定的节点。Services使用label选择器来连接pods,比如“缓存”Service可以连接到标识为label选择器“type”为“redis”的某些“redis”pods。该service将在这些pods之间自动循环地请求。以这种方式,Services可用于连接一个系统各部件。使用Services会提供一个抽象层,这意味着应用程序并不需要知道他们调用的service的内部细节,例如pods内部运行的应用程序只需要知道调用的数据库service的名称和接口,它不必关心有多少pods组成了那个数据库,或者上次它调用了哪个pod。 Kubernetes会为集群建立一个DNS服务器,用于监视新的services并允许他们在应用程序代码和配置文件中按名称定位。它也可以设置services不指向pods而是指向其他已经存在的services,比如外部API或数据库。
  • Replication Controllers - Replication controllers是Kubernetes实例化pods的正常方式(通常情况下,在Kubernetes中不使用Docker CLI)。它们为service来控制和监视运行的pods数量(称为replicas)。例如,一个replication controller可以负责维持5个Redis的pods的运行。如果一个失败,它会立即启动一个新的。如果replicas的数量减少,它会停止多余的pods。虽然使用Replication Controllers来实例化所有pods会增加一层额外的配置,但是它显著提高容错性和可靠性。

Fleet

Fleet是一个来自CoreOS的集群管理工具,自诩为“底层的集群引擎”,也就意味着它有望形成一个“基础层”的更高级别的解决方案,如Kubernetes。

Fleet最显著的特点是基于systemd(systemd提供单个机器的系统和服务初始化)建立的,Fleet将其扩展到集群上,Fleet能够读取systemd单元文件,然后调度单个机器或集群。

而CoreOS表示,Fleet项目目前已经不投入更多心力开发,仅仅处理安全性、漏洞修复等问题,而在2018年2月,CoreOS就会正式将Fleet从Container Linux中移除,「不过使用者仍然可以取得它的容器映像档。」

Mesos

Apache Mesos是一个开源的集群管理器。它是为涉及数百或数千台主机的大规模集群而设计的。 Mesos支持在多租户间分发工作负载,一个用户的Docker容器运行紧接着另一个用户的Hadoop任务。

Apache Mesos始于加州大学伯克利分校的一个项目,用来驱动Twitter的底层基础架构,并且成为许多大公司如eBay和Airbnb的重要工具。后来Mesosphere(共同创办人之一:Ben Hindman - Mesos原始开发人员 )做了很多持续性的Mesos开发和支持工具(如Marathon)。

你可能感兴趣的:(docker容器编排(orchestration)工具)