【51CTO.com快译】容器技术的原型开始于1970年末,但直到2013年Docker的问世,容器才成为了主流技术。在此之后,随着各种容器技术在业界的发力,它们极大地改变了DevOps的企业实践,同时也改变了我们构建、传输和运行各种分布式应用的方式。Docker与容器可谓是比翼双飞、同步发展。
容器编排工具为您在多个主机之间协同地创建、管理和更新多个容器,提供了实用且强大的解决方案。同时,编排工具也能够让您异步地在不同服务和任务进程之间共享数据。在生产环境中,您可以在多个服务器之上,运行单个服务的多个实例,从而使得单个应用具有高可用性。可以说编排越简单,我们就越能够深入到某个应用之中,将其分解成更多、更小的微服务。当然,这自然会引出一个新的问题:我们应当选择哪一种工具来进行编排呢?
在本文中,我将通过比较三大容器编排领域的主流工具,以帮助您选出合适自己的工具。
总述
在很大程度上,容器的编排需要依赖于您的基础架构。这就意味着您需要充分了解这些方案是如何与当前的云提供商、以及本地部署方案相集成的。您是愿意全盘使用某一家云供应商的整体工具套件呢,还是需要有多元化的组件?
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及其更高版本都具有此功能。
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包含在内了。
综述
可见,如何选择适当的容器编排工具,完全取决于您需求的侧重点,同时也要兼顾您所需要协同使用的技术。如果您的应用与AWS密切相关,那么选用ECS肯定会比Kubernetes更合理。反之,如果您使用Google云作为提供商,而且热衷于各种配置,并愿意为***的服务付出复杂性和精力的话,那么Kubernetes一定是您的***。
原文标题:Container Wars:Kubernetes vs. Docker Swarm vs. Amazon ECS,作者:Julia Pearson
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】