Mesos+Marathon和Kubernetes的区别

时间:2024-03-30 13:18:13

Mesos+Marathon和Kubernetes的区别

Mesos+Marathon

Mesos
Mesos是分布式资源管理框架,它被称为是分布式系统的内核。Mesos能把集群内机器的资源(cpu,内存,磁盘)抽象成一个资源池,然后按容器的需求将其调度到合适的节点,达到资源利用率最大化的目的。
Mesos+Marathon和Kubernetes的区别
Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理。

Mesos+Marathon和Kubernetes的区别
Mesos主要由以下几部分组成:

  • Master: 管理各Slave节点
  • Slave: 为集群提供资源
  • Framework: scheduler从Master请求资源,executor在Slave上执行任务
  • Slave节点上的每个executor是一个容器

Mesos主服务器使用Zookeeper进行服务选举和发现。它有一个注册器记录了所有运行任何和从服务器信息,使用MultiPaxos进行日志复制实现一致性。

Mesos有一个从服务器恢复机制,无论什么时候一个从服务器死机了,用户的任务还是能够继续运行,从服务器会将一些关键点信息如任务信息 状态更新持久化到本地磁盘上,重新启动时可以从磁盘上恢复运行这些任务(类似Java中的钝化和唤醒)。

Chronos
Chronos本质上是cron-on-mesos,这是一个用来运行基于容器定时任务的Mesos框架。

ZooKeeper
ZooKeeper用于集群的管理,包括统一配置管理,选举Leader等。

Marathon
Marathon 是Mesos的一个Framework,用来执行需要长时间运行的任务。如果把Mesos比喻成Kernel的话,那么Marathon就是它的守护进程Daemon。
它还具备HA,Health Checks,服务发现等功能。如果某个Docker进程崩溃,Marathon会重新启动同样的进程。

Marathon是一个基于mesos的容器编排框架,用来创建,升级、回滚容器,提供了web界面和Rest API来创建和管理容器。
Mesos+Marathon和Kubernetes的区别

Mesosphere DCOS

Mesosphere Enterprise DC / OS 利用 Mesos 分布式系统内核,在容器和大数据管理基础上构建,提供安装,用户界面,管理和监视工具等功能。

Kubernetes

kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

Kubernetes 组件

Master 组件

  • kube-apiserver
  • ETCD
  • kube-controller-manager
  • cloud-controller-manager
  • kube-scheduler
  • 插件 addons
    DNS
    用户界面
    容器资源监测
    Cluster-level Logging

节点(Node)组件

  • kubelet
  • kube-proxy
  • docker
  • RKT
  • supervisord
  • fluentd

Mesos+Marathon和Kubernetes的区别

应用定义
k8s: 可以使用 Pod,部署和服务的组合来部署应用程序。一个 pod 是一组位于同一节点的容器,是部署的原子单位。部署可以在多个节点上具有副本。服务是容器工作负载的“外部表现”,并与 DNS 集成配合访问。

marathon:从用户的角度来看,应用程序将作为 Marathon 在节点上调度的任务运行。 对于 Mesos,应用程序是一个框架,可以是 Marathon,Cassandra,Spark 等等。 Marathon 将容器调度为在从节点上执行的任务。marathon 1.4 引入了 pod 的概念( 如同 Kubernetes pod),但这不是 marathon 核心的一部分。 节点可以根据机架,连接的存储类型等进行标记。启动 Docker 容器时可以使用这些约束。

应用的可扩展性
k8s:每个应用程序层都被定义为一个 pod,并且可以在通过声明性指定的部署进行管理时进行缩放,例如,在 YAML 中。 缩放可以是手动或自动的。

marathon:可以使用 Mesos CLI 或 UI。 可以使用 JSON 定义来启动 Docker 容器,这些定义指定了存储库,资源,实例数量和要执行的命令。 可以通过使用 Marathon UI 进行扩展,Marathon 调度程序将根据指定的标准将这些容器分布在从节点上。 支持自动缩放。 可以使用应用程序组来部署多层应用程序。

高可用
k8s:pod 可以部署在不同节点上支持高可用。多个 master 节点,node 节点可以以负载均衡的方式对应客户端的访问。etcd 可以以集群方式部署

marathon: 容器可以不受限制的部署在任何节点上。使用 Zookeeper 支持 Mesos 和 Marathon 的高可用性。 Zookeeper 提供 Mesos 和 Marathon 领导者的选举并维护集群状态。

负载均衡
k8s: Pod 是通过服务暴露的,可以在集群内用作负载平衡器。

marathon :主机端口可以映射到多个容器端口,作为其他应用程序或最终用户的前端。

应用程序自动伸缩
k8s:使用简单的 pod 目标进行自动缩放是使用部署以声明方式定义的。 还支持使用资源度量的自动缩放。 资源指标范围从 CPU 和内存利用率到请求或每秒数据包甚至自定义指标。

marathon:马拉松持续监视正在运行的 Docker 容器实例的数量。 如果其中一个容器发生故障,Marathon 会将其重新安排在其他从属节点上。 只有通过社区支持的组件才能使用资源指标进行自动扩展。

应用程序滚动升级,回滚
k8s : 在 deployment 中有滚动升级和回滚的策略。可以设置 pod 最大数量。

marathon: 部署支持应用程序的滚动升级。失败的升级可以使用回滚更改的更新部署进行修复。

健康检查
k8s:健康检查有两种:活跃(即应用程序响应)和准备(应用程序响应,但正在忙着准备,还没有能够服务)。

marathon:运行状况检查可以指定为针对应用程序的任务运行。健康检查请求可用于许多协议,包括 HTTP,TCP 和其他协议。

存储
k8s:两个存储 API:第一个提供个人存储后端的抽象(例如 NFS,AWS EBS,Ceph,Flocker)。 第二个提供存储资源请求的抽象,这可以用不同的存储后端来实现。 修改集群节点上 Docker 守护进程使用的存储资源需要暂时从集群中删除该节点。 Kubernetes 提供了几种类型的持续卷,支持块或文件。 例子包括 iSCSI,NFS,FC,亚马逊网络服务,Google 云端平台和微软 Azure。 emptyDir 卷是非持久性的,可以用来读取和写入容器的文件。

mesos/marathon:本地持久性卷(测试版)支持有状态的应用程序,如 MySQL。 需要时,可以使用相同的卷在同一节点上重新启动任务。 外部存储(如 Amazon EBS)的使用也在测试阶段。 目前,使用外部卷的应用程序只能缩放到一个实例,因为卷一次只能附加到一个任务。

网络
k8s:网络模型是一个扁平的网络,使所有的 pod 互相通信。 网络策略指定 pod 如何相互通信。 平面网络通常作为 overlay 来实现。 该模型需要两个 CIDR:一个从中获取 IP 地址,另一个用于服务。

mesos/marathon:网络可以在主机模式或网桥模式下进行配置。 在主机模式下,主机端口由容器使用。 这可能会导致任何给定主机上的端口冲突。 在桥接模式下,容器端口使用端口映射桥接到主机端口。 主机端口可以在部署时动态分配。

服务发现
k8s:可以使用环境变量或 DNS 来找到服务。 运行 pod 时,Kubelet 会添加一组环境变量。 Kubelet 支持简单的{SVCNAME_SERVICE_HOST}和{SVCNAME_SERVICE_PORT}变量,以及 Docker 链接兼容变量。 DNS 服务器可作为附件使用。 对于每个 Kubernetes 服务,DNS 服务器创建一组 DNS 记录。 在整个群集中启用 DNS 后,pod 将能够使用自动解析的服务名称。

marathon:服务可以通过“命名 VIP”发现,它们是与 IP 和端口关联的 DNS 记录。 服务由 Mesos-DNS 自动分配 DNS 记录。 可以创建一个可选的命名 VIP; 通过 VIP 的请求是负载平衡的。

性能和节点支持
k8s: Kubernetes 可扩展到 5,000 个节点的集群。可以集群联邦来扩展超出此限制。

mesos/marathon: Mesos 的 2 层体系结构(包括 Marathon)非常具有可扩展性。据 Digital Ocean 介绍,Mesos 和 Marathon 集群已经扩展到 10,000 个节点。

优缺点
k8s:各种各样的存储选项,包括本地 SAN 和公共云。 基于在 Google 上运行 Linux 容器的丰富经验。 在组织中更频繁地部署。 Kubernetes 也得到来自 Google(GKE)和 RedHat(OpenShift)的企业支持。 容器编排工具中最大的社区。 超过 50,000 个提交者和 1200 个贡献者。

mesos/marathon: Mesos + Marathon 上的外部存储,包括 Amazon EBS 在内。。 Mesos 被 Mesosphere 所利用。 Mesosphere 公司的 DCOS 产品主要由其创建者和唯一的商业发行 Mesosphere 支持。。 较小的社区。 超过 12,000 个提交者和 240 个贡献者。

k8s 缺乏单一的供应商控制,会使潜在客户的采购决策复杂化。社区包括 Google,Red Hat 和 2000 多位作者。(来源:CNCF)Kubernetes 仅为容器编排而建造。它基于 10 多年在 Google 管理 Linux 容器的经验。Kubernetes 1.6 可以扩展到 5,000 个节点的集群。超过 5,000 个节点的大规模可扩展性需要多个集群。

mesos/marathon: 单一供应商控制可能会考虑错误修复的问责制,以及与功能开发更好的协调。。 2 层架构允许部署其他框架(工作负载)。 例子包括 Spark,Chronos 和 Redis。 一些组织,如苹果,彭博,Netflix 等已经大规模地部署了超过 10,000 个节点的 Mesos。 (来源:Mesosphere 博客)

共同特点
开源项目。任何人都可以贡献,但是 Kubernetes 享有更多,更多元化的社区参与。网络功能,如负载均衡和 DNS。记录和监视。 Kubernetes 的外部工具包括 Elasticsearch / Kibana(ELK),sysdig,cAdvisor,Heapster / Grafana / InfluxDB(参考:Kubernetes 的记录和监测)。对于 Mesos / Marathon,节点提供可以汇总的日志,可以使用外部工具进行监视。 (参考:为 Mesos / Marathon 监控日志记录和调试)可以克服 Docker 和 Docker API 的限制。自动缩放支持本地。使用单独的一套管理工具。 Kubernetes 操作可以通过 kubectl CLI 和 Kubernetes Dashboard 来执行。 Mesos 使用多种界面:Mesos CLI,Mesos UI,Marathon CLI,Marathon UI。对于 Kubernetes 和 Mesos,Marathon,自己动手安装可能会很复杂。 Kubernetes 的部署工具包括 kubeadm,kops,kargo 等。 Kubernetes 部署指南中的更多详细信息。由于采用 Marathon 的 2 层架构,集群管理的 Zookeeper 设置,负载平衡的 HA 代理等,Mesos 的安装过程可能非常复杂。

参考文章:
Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)
kubernetes
kubernetes 对比 mesos + marathon