Kubernetes、Docker Swarm与Amazon ECS之间的容器之争

容器编排工具为您在多个主机之间协同地创建、管理和更新多个容器,提供了实用且强大的解决方案。同时,编排工具也能够让您异步地在不同服务和任务进程之间共享数据。在生产环境中,您可以在多个服务器之上,运行单个服务的多个实例,从而使得单个应用具有高可用性。可以说编排越简单,我们就越能够深入到某个应用之中,将其分解成更多、更小的微服务。当然,这自然会引出一个新的问题:我们应当选择哪一种工具来进行编排呢?

在本文中,我将通过比较三大容器编排领域的主流工具,以帮助您选出合适自己的工具。

总述

在很大程度上,容器的编排需要依赖于您的基础架构。这就意味着您需要充分了解这些方案是如何与当前的云提供商、以及本地部署方案相集成的。您是愿意全盘使用某一家云供应商的整体工具套件呢,还是需要有多元化的组件?

Kubernetes如今已在容器编排领域占有统治性地位。它的可配置性、可靠性和所拥有的强大社区,已远超过Docker Swarm。由于是Google所创建的开源项目,Kubernetes能与Google的整个云平台和谐共处。而且,它几乎能在任何基础架构上顺畅运行。

Swarm是Docker自有的一种编排工具。通过集成到Docker Engine中,它能够使用标准化的API与网络。通过内置Docker CLI(命令行界面),Swarm Mode在不需要被额外安装的情况下,就能方便地调用新的Swarm命令。您可以使用命令 -- docker service create来部署一项服务。同时,Docker Swarm在性能、灵活性和简易性上的优势,能够与Kubernetes的统治地位相抗衡。

Amazon Elastic Container Service(ECS)是亚马逊专有的容器调度程序。它被设计为能够与AWS的其他服务协同工作。这就意味着那些以AWS为核心的解决方案,如监控、负载均衡和存储等,都能够方便地被集成到您的服务之中。如果您使用的并非是亚马逊所提供的云服务,或者在本地运行您的工作负载的话,ECS就不一定合适了。

Kubernetes

Kubernetes,常被缩写为K8s或Kube,它专注于Linux容器开发15年,是Google针对容器管理的开源方案。它能够工作在多个云提供商的多种生产环境之中,包括裸金属(bare metal)云服务架构和本地虚拟机、以及混合云等模式。

Kubernetes的集群包括如下重要组件:

  • Pods:在同一节点上创建、调度和部署出一组、或多组容器。
  • Labels:是被分配出来用于标识各种pod、service和replication controllers键值(key-value)的标签(如:名称)。
  • Services:为一组pod提供名称,如负载均衡器一般,将流量引入正在运行的容器之中。
  • Replication controllers:一种框架,它负责确保特定数量pod的副本能在任何给定时刻按照调度运行。

在这三种工具中,数Kubernetes的安装最为复杂,当然如果您能使用正确的工具,那么其过程会简化许多。

  • Kubeadm(https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)能够提供很好的、与现有编排系统、或裸金属环境的集成。
  • Helm(https://github.com/kubernetes/helm)是一种能够优化安装、并管理Kubernetes各种应用的流行工具。

Kube的一个主要优点是:您对于配置具有终极控制权。另外,一些常见的平台也有着大量的文档,可以支持您的定制化设置。因此,在遇到任何问题的时候,您都可以在Stack、Overflow和GitHub上通过大量的社区用户与资源,来寻求帮助与支持。

Docker Swarm

Docker Swarm扩展了单主机的Docker模式,它允许开发人员快速、方便地部署多个容器与微服务。由于已被内置于Docker Engine之中,因此它是三种工具中最轻量级、且最容易转换的工具。

Swarm的集群包括如下重要组件:

  • Manager nodes:用于控制编排、集群管理和任务分配。
  • Worker nodes:其唯一的功能就是运行由Manager Node所分配的容器和服务。
  • Services:描述了您希望单个容器将如何在不同节点之间分发。如果您想创建服务,请在普通Docker运行时指定确切的信息,再添加好新的参数(如:容器的副本数量)。
  • Tasks:是Swarm的基本单位。Manager Node根据在服务描述中设置的副本数量把任务分配该Worker Nodes。一旦一个任务被分配给了某个节点,它就不能被移到其他节点上。

Swarm适用于刚开始接触容器、以及不需要去逐个配置细节的用户。另外,Swarm还能让您方便地扩展出大量的容器。

由于已被内置于Docker Engine之中,Swarm Mode并不需要被额外地进行安装。Docker 1.12及其更高版本都具有此功能。

Kubernetes、Docker Swarm与Amazon ECS之间的容器之争

Amazon Elastic Container Service(ECS)

Amazon ECS是AWS自创的容器管理服务,也是一项兼容Docker的服务。它能让您在EC2的实例上运行容器化的应用,因此它是Kube和Swarm的一种替代方案。

虽然Docker本身非常简单,但是亚马逊的ECS却是一种比较复杂的工具,因此您必须去学习整个全新的平台。ECS包含有如下组件:

  • ECS clusters:是运行各项任务的EC2实例组。
  • Task definition:是一份JSON格式的文本文件,其中包含Docker的运行命令,以及应该在哪一台主机上运行哪些容器的细节。
  • Service:是用于在整个集群上运行和维护指定数量的、各种任务定义实例的工具。
  • Service scheduler:能够持续监控运行的任务,以确保具有合理的在线服务数量,并能在任何失败出现时重新安排任务的上线。
  • Container agents:此功能可以帮助您将各个集群的实例与容器相连接。

Amazon ECS最大程度地方便了不同的容器,与AWS的其他服务之间的无缝集成。它是一种能够提供高可用性、可伸缩性和安全性的完全托管服务。而且AWS的标准支持计划本身就已经将ECS包含在内了。

综述

相关推荐