容器编排是一项快速发展的技术。目前有3个行业巨头;Kubernetes、Docker Swarm 和 Apache Mesos。它们属于DevOps 基础设施管理工具的类别,称为“容器编排引擎”。Docker Swarm 赢得了广大客户的青睐,成为容器化的首选。Kubernetes 和 Mesos 是主要竞争对手。在这方面,他们可以提供更多的东西。它们提供了不同的可用性梯度,并具有许多不断发展的功能。
尽管 Docker Swarm 很受欢迎,但它也有一些缺点和有限的功能:
- Docker Swarm 依赖于平台。
- Docker Swarm 不提供高效的存储选项。
- Docker Swarm 的容错能力有限。
- Docker Swarm 监控不足。
这些缺点引发企业质疑:“如何选择合适的容器管理和编排工具?” 许多公司现在都在选择 Docker Swarm 的替代品。这就是 Kubernetes 和 Mesos 的用武之地。要系统地检查这种选择,有必要查看这两种选择所具有的核心竞争力。因此,人们可以得出一个独立知情的结论。
Docker Swarm、Kubernetes 和 Mesos 的特点
特征 | 码头工人群 | Kubernetes | 梅索斯/马拉松 |
初始发布日期 | 2013 年 3 月,2019 年 7 月稳定发布 | 2015 年 7 月,2019 年 9 月 v1.16 | 2016 年 7 月,稳定版 2019 年 8 月 |
部署 | 基于 YAML | 基于 YAML | 独特的格式 |
稳定 | 相对较新且不断发展 | 相当成熟稳定,持续更新 | 成熟 |
设计理念 | 基于 Docker | 基于 Pod 的资源分组 | 基于 Linux 的 Cgroups 和控制组 |
支持的图像 | Docker 映像格式 | 有限地支持 Docker 和 rkt | 主要支持 Docker |
学习曲线 | 简单的 | 陡 | 陡 |
什么是 Kubernetes?
Kubernetes 于 2014 年 6 月首次发布,也称为 k8s。它是谷歌为云原生计算提供的容器编排平台。就功能而言,Kubernetes 是最原生集成的可用选项之一。它背后也有一个庞大的社区。Google 将 Kubernetes 用于其 Container as a Service 产品,更名为 Google Container Engine。对 Kubernetes 提供扩展支持的其他平台包括 Microsoft Azure 和 Red Hat OpenShift。它还支持 Docker 并使用基于 YAML 的部署模型。
Kubernetes的架构构建在模块化 API 核心 之上 ,允许供应商围绕其专有技术集成系统。它在为应用程序开发人员提供强大的 Docker 容器编排和开源项目工具方面做得很好。
什么是 Apache Mesos?
Apache Mesos 的根源可以追溯到 2009 年,当时他获得了博士学位。学生们首先在加州大学伯克利分校开发了它。与 Kubernetes 和 Docker Swarm 相比,在管理数据中心和云资源方面,它采用了更多的分布式方法。
在处理容器管理时,它采用模块化方法。它允许用户在他们可以运行的应用程序的类型和可扩展性方面具有灵活性。Mesos 允许其他容器管理框架在其上运行。这包括 Kubernetes、Apache Aurora、Mesosphere Marathon 和 Chronos。
创建 Mesos 是为了解决许多不同的挑战。一个是,将数据中心资源抽象到一个池中。另一个是配置不同的工作负载并自动化第二天的操作。最后,为正在运行的任务和新应用程序提供常青的可扩展性。它具有单独管理各种工作负载的独特能力,包括 Java 等应用程序组、无状态微服务等。
容器管理:解释
在我们决定如何选择容器管理工具之前,必须进一步解释容器管理的概念。
容器管理是添加、组织和替换大量软件容器的过程。它利用软件自动创建、部署和扩展容器。容器管理需要一个平台来组织软件容器,称为操作系统级虚拟化。该平台无需使用复杂的相互依赖的系统架构即可优化效率并简化容器交付。
随着越来越多的企业使用 DevOps 进行更快的开发及其应用程序,容器变得非常流行。容器管理产生了对容器编排的需求,这是一种更专业的工具。它自动化了基于容器的应用程序的部署、管理、网络扩展和可用性。
容器编排:解释
容器编排是指管理或调度用于多个集群中基于微服务的应用程序的单个容器的自动过程。它适用于 Kubernetes 和 Mesos。它还安排将容器部署到集群中,确定容器的最佳主机。
需要容器编排框架的一些原因包括:
- 配置和调度容器
- 容器可用性
- 容器供应和部署
- 容器配置
- 扩展容器应用以实现负载均衡
- 容器的健康监测
- 保护容器之间的交互
如何选择容器管理和编排工具?
在决定如何有效地实施容器管理和编排时,需要考虑许多变量。最终的选择将取决于用户的具体要求。下面简要解释其中的一些。
- CNI Networking:一个好的工具应该允许服务之间的简单网络连接。这是为了避免开发人员不得不花时间在特殊用途的代码上来查找依赖项。
- 简单性:使用的工具应该尽可能简单地实现。
- 主动开发:选择的工具应该有一个为用户提供定期更新的开发团队。这是由于容器编排不断发展的本质。
- 云供应商:选择的工具不应与任何单一的云供应商绑定。
注意:容器编排只是 Mesos 模块化架构可以运行的工作负载的一个示例。这种专门的编排框架称为 Marathon。它最初是为了在 Linux cgroup 容器中编排应用程序存档而开发的,后来在 2014 年扩展了对 Docker 容器的支持。
Kubernetes 和 Mesos 有什么区别?
Kubernetes 和 Mesos 对同一个问题有不同的方法。Kubernetes 充当容器编排器,而 Apache Mesos 就像云操作系统一样工作。因此,两者之间存在一些根本差异,下表突出显示了这些差异。
差异点 | Kubernetes | 阿帕奇梅索斯 |
应用定义 | Kubernetes 是副本集、复制控制器、Pod 以及某些服务和部署的组合。这里,“Pod”是指一组位于同一位置的容器,被认为是部署的原子单元。 | Mesos 的应用程序组被建模为一个 n 叉树,组为分支,应用程序为叶子。它用于将多个应用程序划分为可管理的集合,其中组件按依赖顺序部署。 |
可用性 | Pod 分布在 Worker 节点之间。 | 应用程序分布在从节点之间。 |
负载均衡 | Pod 通过充当负载均衡器的服务公开。 | 可以通过代理负载均衡器访问应用程序,即 Mesos-DNS。 |
贮存 | 有两个阶段 API。第一个为单个存储后端提供抽象,例如 NFS、AWS 和 EBS 等。第二个为存储资源请求提供抽象。这是通过不同的存储后端来实现的。 | Marathon 容器能够使用持久卷,它们位于创建它们的节点的本地。因此,容器总是需要在所述节点上运行。实验性植绒器集成负责支持非单个节点本地的持久卷。 |
网络模型 | Kubernetes 的网络模型允许任何 pod 与任何服务或其他 pod 进行通信。它需要两个独立的网络来运行,两个网络都不需要来自集群外部的连接。这是通过在集群节点上部署覆盖网络来实现的。 | Marathon 的 Docker 集成允许将容器端口映射到软管端口,这是一种有限的资源。在这里,容器不会自动获取 IP,这只能通过与 Calico 集成来实现。需要注意的是,多个容器不能共享同一个网络命名空间。 |
使用目的 | 它是集群领域新手的理想选择,提供了一种快速、简单、轻松的方式来开始他们的面向集群的开发之旅。它提供了高度的多功能性和可移植性,并得到了微软和 IBM 等少数知名供应商的支持。 | 它是大型系统的理想选择,因为它旨在实现最大冗余。对于 Hadoop 或 Kafka 等现有工作负载,Mesos 提供了一个框架,允许用户将这些工作负载相互交错。它是一个更稳定的平台,但使用起来相对复杂。 |
供应商和开发商 | Kubernetes 被多家公司和开发人员使用,并得到其他一些平台的支持,例如 Red Hat OpenShift 和 Microsoft Azure。 | Mesos 得到 Twitter、Apple 和 Yelp 等大型组织的支持。它的学习曲线陡峭且相当复杂,因为它的核心重点是大数据和分析。 |
结论
Kubernetes 和 Mesos 采用不同的策略来解决相同的问题。在基于几个特性比较它们时,我们发现与 Docker Swarm 相比,这两种解决方案在特性和其他优势方面是相当的。我们可以得出的结论是,它们都是容器管理和编排的可行选择。每个工具都可以有效地管理 docker 容器。它们都提供对容器编排的访问,以实现应用程序的可移植性和可扩展性。
在通过其 DC/OS 处理遗留系统和大规模集群环境时,Mesos 直观的架构设计提供了很好的选择。它还擅长处理更具体的技术,例如使用 Hadoop 进行分布式处理。想要构建专门用于 docker 容器编排的系统的开发团队更喜欢 Kubernetes。我们的直接比较应该让用户清楚地了解 Kubernetes 与 Mesos 及其核心竞争力。目的是为读者提供相关数据和事实,以告知他们的决定。