Apache 的 Mesos 和 Google 的 Kubernetes 到底有什么区别?我知道两者都是服务器集群管理软件。谁能详细说明主要区别在哪里 - 什么时候首选哪个框架?
为什么要在Mesosphere 之上使用 Kubernetes ?
Apache 的 Mesos 和 Google 的 Kubernetes 到底有什么区别?我知道两者都是服务器集群管理软件。谁能详细说明主要区别在哪里 - 什么时候首选哪个框架?
为什么要在Mesosphere 之上使用 Kubernetes ?
Kubernetes 是一个开源项目,它将“Google 风格”的集群管理功能带入虚拟机世界或“金属”场景。它与现代操作系统环境(如 CoreOS 或 Red Hat Atomic)配合得非常好,这些环境提供了为您管理的轻量级计算“节点”。它是用 Golang 编写的,具有轻量级、模块化、可移植和可扩展的特点。我们(Kubernetes 团队)正在与许多不同的技术公司(包括管理 Mesos 开源项目的 Mesosphere)合作,将 Kubernetes 建立为与计算集群交互的标准方式。这个想法是重现我们看到人们需要根据我们在 Google 的经验构建集群应用程序的模式。其中一些概念包括:
因此,仅使用 Kubernetes,您将拥有简单、易于启动和运行、可移植和可扩展的东西,将“集群”作为名词添加到您以最轻量级方式管理的事物中。在集群上运行应用程序,无需担心单个机器。在这种情况下,集群就像虚拟机一样是一种灵活的资源。它是一个逻辑计算单元。调高、使用、调整大小、快速轻松地调低。
使用 Mesos,在基本愿景方面存在相当多的重叠,但产品在其生命周期中处于完全不同的阶段,并且具有不同的甜蜜点。Mesos 是一个分布式系统内核,它将许多不同的机器拼接成一台逻辑计算机。它是为一个拥有大量物理资源来创建大型静态计算集群的世界而生的。它的好处是许多现代可扩展数据处理应用程序在 Mesos(Hadoop、Kafka、Spark)上运行良好,这很好,因为您可以在同一个基本资源池上运行它们,以及您的新时代容器打包应用程序. 它比 Kubernetes 项目要重一些,但由于像 Mesosphere 这样的人的工作,它变得越来越容易管理。
现在真正有趣的是,Mesos 目前正在调整以添加许多 Kubernetes 概念并支持 Kubernetes API。因此,如果您需要,它将成为为您的 Kubernetes 应用程序获取更多功能(高可用性主机、更高级的调度语义、扩展到大量节点的能力)的门户,并且非常适合运行生产工作负载(Kubernetes仍处于 alpha 状态)。
当被问到时,我倾向于说:
如果您是集群世界的新手,Kubernetes 是一个很好的起点;这是最快速、最简单、最轻便的方式,可以让您开始尝试面向集群的开发。它提供了非常高水平的可移植性,因为它得到了许多不同的供应商(Microsoft、IBM、Red Hat、CoreOs、MesoSphere、VMWare 等)的支持。
如果您有现有的工作负载(Hadoop、Spark、Kafka 等),Mesos 为您提供了一个框架,让您可以将这些工作负载相互交错,并混合一些新的东西,包括 Kubernetes 应用程序。
如果您需要社区尚未在 Kubernetes 框架中实现的功能,Mesos 会为您提供一个安全阀。
这两个项目都旨在让您更轻松地在数据中心或云中的容器内部署和管理应用程序。
为了在 Mesos 之上部署应用程序,可以使用 Marathon 或 Kubernetes for Mesos。
Marathon 是一个集群范围的初始化和控制系统,用于在 cgroups 和 Docker 容器中运行 Linux 服务。Marathon 有很多不同的 Canary 部署特性,是一个非常成熟的项目。
Marathon 运行在 Mesos 之上,Mesos 是一个高度可扩展、经过实战考验且灵活的资源管理器。Marathon 已被证明可以在许多生产环境中扩展和运行。
Mesos 和 Mesosphere 技术堆栈为运行现有 Linux 工作负载提供了一个类似云的环境,但它也为构建新的分布式系统提供了一个原生环境。
Mesos 是一个分布式系统内核,具有用于直接针对数据中心进行编程的完整 API。它将底层硬件(例如裸机或虚拟机)抽象出来,只公开资源。它包含用于编写分布式应用程序的原语(例如,Spark 最初是一个 Mesos 应用程序、Chronos 等),例如消息传递、任务执行等。因此,全新的应用程序成为可能。Apache Spark 是最初为 Mesos 构建的新(用 Mesos 术语称为)框架的一个示例。这实现了非常快速的开发——Spark 的开发人员不必担心网络在节点之间分配任务,因为这是 Mesos 中的核心原语。
据我所知,现在 Google 内部并没有在生产部署中使用 Kubernetes。对于生产,Google 使用 Omega/Borg,这与 Mesos/Marathon 模型更相似。然而,使用 Mesos 作为基础的好处是 Kubernetes 和 Marathon 都可以在它之上运行。
有关马拉松的更多资源:
Kubernetes 和 Mesos 是天作之合。Kubernetes 支持 Pod(共置容器组)抽象,以及用于服务发现、负载平衡和复制控制的 Pod 标签。Mesos 为集群中跨节点的 Pod 提供细粒度的资源分配,并且可以使 Kubernetes 与运行在相同集群资源上的其他框架很好地配合使用。
Mesos 和 Kubernetes 都可以用来管理机器集群并抽象出硬件。
Mesos 在设计上没有为您提供调度程序(用于决定在何处和何时运行进程以及如果进程失败该怎么办),您可以使用 Marathon 或 Chronos 之类的东西,或者自己编写。
Kubernetes 将开箱即用地为您进行调度,并且可以用作 Mesos 的调度程序(如果我在这里错了,请纠正我!)这是您可以一起使用它们的地方。Mesos 可以有多个调度程序共享同一个集群,所以理论上你可以在同一个硬件上同时运行 kubernetes 和 chronos。
超级简单:如果您想控制容器的调度方式,请选择 Mesos,否则 Kubernetes 会很糟糕。
我喜欢这个短视频在这里mesos 学习资料
对于裸机集群,您需要生成 HDFS、SPARK、MR 等堆栈......因此,如果您仅使用裸机集群管理启动与这些相关的任务,将会有很多冷启动时间。
使用 mesos,您可以将这些服务安装在裸机之上,并且可以避免这些基础服务的启动时间。这是 mesos 擅长的事情。并且可以被构建在它之上的 Kubernetes 使用。
Mesos 和 Kubernetes 都是容器编排工具。
当您说“Google Kubernetes”时?
Google Kubernetes Engine 提供了一个托管环境,用于使用 Google 基础架构部署、管理和扩展您的容器化应用程序。
Kubernetes 是一个开源系统,用于自动部署、扩展和管理容器化应用程序。” Kubernetes 是谷歌根据他们过去十年在生产环境中运行容器的经验而构建的。
Kubernetes 集群中的主要组件是:
pods — 一种将容器组合在一起的方法 复制控制器 — 一种处理容器生命周期的方法 标签 — 一种查找和查询容器和服务的方法 — 一组执行通用功能的容器
Mesos 是 Apache 的一个开源集群管理项目,旨在扩展到非常大的集群,从数百到数千台主机。Mesos 支持各种工作负载,例如 Hadoop 任务、云原生应用程序等。它使您能够以分布式方式运行容器化和非容器化工作负载。
它最初是作为伯克利的一个研究项目编写的,后来被 Twitter 作为对 Google 的 Borg(Kubernetes 的前身)的回应。为了克服它的高度复杂性(Mesos 超级复杂且难以管理!),Mesosphere 出现在画面中,试图将 Mesos 变成普通人可以使用的东西。
Mesosphere 为 Mesos 提供了出色的 Marathon “插件”,它为用户提供了一种通过 Mesos 管理容器编排的简单方法。
2016 年年中,引入了 DC/OS(数据中心操作系统)——一个由 Mesosphere 支持的开源项目——它进一步简化了 Mesos,并允许您在几分钟内通过 Marathon 部署自己的 Mesos 集群。
现在,如果我们比较 kubernetes 和 Mesos(DC/OS)
kubernetes 是容器的集群管理器,而 mesos 是分布式系统内核,它将使您的集群看起来像一个巨大的计算机系统,以构建在 mesos 上运行的所有受支持的框架和应用程序。
Mesos 是为一个拥有大量物理资源来创建大型静态计算集群的世界而生的。它的好处是许多现代可扩展数据处理应用程序在 Mesos(Hadoop、Kafka、Spark)上运行得非常好,这很好,因为您可以在同一个基本资源池上运行它们,以及打包的新时代容器应用。
Mesos 集群也与 Marathon 集群一起运行。由 Mesosphere 创建的 Marathon 旨在启动、监控和扩展长期运行的应用程序,包括云原生应用程序。客户端通过 REST API 与 Marathon 交互。
此外,需要注意的一点是,您实际上可以在 DC/OS 之上运行 Kubernetes,并使用它来调度容器,而不是使用 Marathon。这意味着最大的区别——DC/OS,顾名思义,更像是一个操作系统,而不是一个编排框架。您可以在其上运行非容器化的有状态工作负载。容器调度由 Marathon 处理。
“我了解两者都是服务器集群管理软件。”
这种说法并不完全正确。Kubernetes 不管理服务器集群,它对容器进行编排,使它们以最小的麻烦和风险协同工作。Kubernetes 允许您将应用程序的某些部分定义为“pod”(一个或多个容器),由“部署”或“守护程序集”(以及其他一些)交付并通过服务向外部世界公开。但是,Kubernetes 本身并不管理集群(有一些工具可以为您配置、配置和扩展集群,但这些工具并不是 Kubernetes 本身的一部分)。
另一方面,Mesos 更接近于“集群管理”,因为它可以控制在哪里运行什么,而不仅仅是在调度容器方面。Mesos 还管理在集群服务器上运行的独立软件。尽管它主要用作 Kubernetes 的替代品,但 Mesos 可以轻松地与 Kubernetes 一起工作,因为虽然功能在许多领域重叠,但 Mesos 可以做得更多(但在重叠部分 Kubernetes 往往更好)。