APP下载
报价宝  ›  科技  › 

丛集架构选择最佳容器工具:AWS ECS与Docker Swarm与Kubernetes

报价宝 来源:baojiabao.com 发布时间:2019-09-13 18:50:00 11月16日更新
报价宝综合消息丛集架构选择最佳容器工具:AWS ECS与Docker Swarm与Kubernetes

在管理容器及其执行的丛集基础架构时,适合你的工具是什么?

通过在不同环境中同步开发,推广和部署程式码,容器化迅速普及。 容器是应用程序层的抽象,将必要的库,依赖项和环境设定的程式码包装到单个可执行程式包中。

容器旨在简化程式码的部署,但管理数千个程式码并非易事。 在建立高可用性部署时,根据负载进行扩充套件和缩小,检查容器执行状况并使用新容器替换不健康的容器,暴露埠和负载平衡 - 需要另一种工具。 这就是容器编排的用武之地。容器和微服务齐头并进,与传统环境中执行的整体数量相比,显著增加了在典型环境中执行的各个服务的数量。 随着这种增加的复杂性,容器编排是大规模实际部署的必要条件。

除了编排问题,另一个问题仍有待解决 - 容器在何处以及如何执行? 执行群集和管理群集基础结构需要其他工具。 幸运的是,我们有一些选择来满足这种需求。

Docker已成为建立容器的事实标准。 对于编排和丛集管理ECS,Docker Swarm和Kubernetes是三种主流的选择,每种选择各有利弊。下面让我们看看吧:

1. AWS弹性容器服务(ECS)

一种解决方案是通过使用亚马逊的弹性容器服务(ECS)将丛集管理工作解除安装到AWS。 对于已熟悉Amazon Web Services的组织,ECS是一个很好的解决方案。 只需单击几下即可配置和部署丛集,由您管理的EC2例项或完全托管的丛集服务Fargate提供支援。

ECS包含有如下元件:

ECS clusters:是执行各项任务的EC2例项组。Task definition:是一份JSON格式的文字档案,其中包含Docker的执行命令,以及应该在哪一台主机上执行哪些容器的细节。Service:是用于在整个丛集上执行和维护指定数量的、各种任务定义例项的工具。Service scheduler:能够持续监控执行的任务,以确保具有合理的线上服务数量,并能在任何失败出现时重新安排任务的上线。Container agents:此功能可以帮助您将各个丛集的例项与容器相连线。优点:现有AWS使用者将熟悉术语和基础计算资源。 快速简便的入门,轻松扩大规模以满足需求。 与其他AWS服务整合良好。 为生产工作负载大规模部署高可用容器的最简单方法之一。

缺点:专有解决方案。 供应商锁定:容器可以轻松移动到其他平台,但配置特定于ECS。 无法访问Fargate中的群集节点使故障排除变得困难。 不可自定义,不适用于非标准部署。

总结:快速且易于使用,尤其适用于现有AWS使用者。 对于不想维护自己的丛集的小团队来说,这是一个很好的选择。 但供应商锁定以及无法定制或扩充套件解决方案可能对大型企业来说是一个问题。

2. Docker Swarm

Docker Swarm扩充套件了单主机的Docker模式,对于那些刚开始使用Docker的人来说,Swarm模式可以快速、方便地部署多个容器与微服务,是一个简单的解决方案。 Swarm扩充套件了标准的Docker命令列实用程式,增加了用于管理丛集和节点,扩充套件服务和滚动更新的命令。服务发现,负载平衡等都由平台处理。

Swarm的丛集包括如下重要元件:

Manager nodes:用于控制编排、丛集管理和任务分配。Worker nodes:其唯一的功能就是执行由Manager Node所分配的容器和服务。Services:描述了您希望单个容器将如何在不同节点之间分发。如果您想建立服务,请在普通Docker执行时指定确切的资讯,再新增好新的引数(如:容器的副本数量)。Tasks:是Swarm的基本单位。Manager Node根据在服务描述中设定的副本数量把任务分配该Worker Nodes。一旦一个任务被分配给了某个节点,它就不能被移到其他节点上。优点:对于那些刚接触Docker或者之前使用过Docker Compose的人来说,这是一个很好的起点。无需安装其他软件,Docker内建了Swarm模式。简单明了,适合小型组织或刚刚开始使用容器的人员。

缺点:作为一个新人,Swarm缺乏Kubernetes的高阶特性和功能,例如内建的日志记录和监控工具。同样,整体采用落后于Kubernetes和ECS等专有产品。

总结:Swarm在开始时是一个不错的选择,它快速且易于使用,内置于Docker,不需要额外的软件,但您可能会发现自己很快就会失去其功能。

3. Kubernetes

对于高阶使用者,Kubernetes提供了最强大的工具集,用于管理群集及其上执行的工作负载。 Kubernetes是GitHub上最受欢迎的开源专案之一,由Google,微软和其他公司提供支援,是在生产中部署容器的最流行的解决方案。该平台具有良好的文件和可扩充套件性,允许组织对其进行自定义以满足其需求。虽然设定起来相当复杂,但可以使用许多托管解决方案,包括AWS的EKS,GCP的GKE,Azure的AKS,Pivotal的PKS,现在甚至Docker都提供自己的托管Kubernetes服务。

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各种应用的流行工具。优点:适用于大型企业部署的空间中最受欢迎且广泛采用的工具。由大型开源社群和大型科技公司支援。灵活且可扩充套件,可在任何环境中工作。

缺点:要学习复杂,难以设定,配置和维护。缺乏与Docker Swarm和Compose CLI以及清单的相容性。

总结:对于真正的企业级丛集和容器管理,没有什么能比Kubernetes更好。虽然复杂,但最终复杂性转化为额外的功能,随着容器化工作量开始扩充套件,这些功能非常有价值。随着云供应商竞相通过托管k8s产品简化事务,只会更容易在Kubernetes中部署和维护丛集。

综述

可见,如何选择适当的容器编排工具,完全取决于您需求的侧重点,同时也要兼顾您所需要协同使用的技术。如果您的应用与AWS密切相关,那么选用ECS肯定会比Kubernetes更合理。反之,如果您使用Google云作为提供商,而且热衷于各种配置,并愿意为完美的服务付出复杂性和精力的话,那么Kubernetes一定是您的首选。
文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 报价宝 数码相机价格 手机价格 笔记本价格 电视机价格