Apache Mesos(5)-初步认识Marathon

目录
  1. 探索web界面和API
  2. 服务发现和路由
    1. Mesos-DNS
    2. Marathon-lb
    3. haproxy-marathon-bridge

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/http://andyyoung01.16mb.com/

前面我们已经部署了Mesos的集群,但还没有使用Mesos集群真正得部署应用程序来使用整个集群的资源,现在我们来认识一下Marathon框架,下篇文章使用Marathon在Mesos集群上来实际部署几个应用程序。我们在本篇文章中也对Mesos和Marathon生态系统中的服务发现和路由进行了介绍。

如果将Mesos类比为操作系统的内核,则Marathon可以类比为服务管理系统,在Linux中通常是initsystemdupstart等系统。Marathon将应用程序部署为长时间运行的Mesos任务。它可以被认为是一种私有的可以部署应用程序的Platform as a service(PaaS)。
“Marathon启动应用程序作为长时间运行的Mesos任务”
Marathon可以让您指定每个应用程序实例需要的资源以及要运行此程序需要多少实例。它可以使用可用的集群资源对失败的任务自动做出响应。如果某个Mesos slave当机或应用的某个实例退出、失败,Marathon将会自动启动一个新的实例,来替换掉失败的实例。Marathon也允许用户在部署时指定应用程序彼此间的依赖关系,这样就可以保证某个应用程序实例不会在它依赖的数据库实例启动前启动。

探索web界面和API

Marathon提供了一个直观的web界面,可以用来管理应用程序和观察部署的状态,如下图所示:
“Marathon的web界面概览”

关于Web UI的更多信息可以参考http://mesosphere.github.io/marathon/docs/marathon-ui.html

虽然web界面对于观察和管理应用程序和部署是非常有帮助的,但却也有不少限制。于是Marathon提供了另外一种管理应用程序的方式,通过Marathon的REST API。
鉴于很多组织都开始着手使用持续集成(CI)和持续交付(CD)来自动化他们程序的部署,Marathon的基于JSON的REST的API使部署新程序或者升级程序的版本变得更加灵活方便。
下表列举了一些比较重要的以及操作它们所用的HTTP方法。
“Marathon的一些API”

完整的Marathon REST API可以在https://mesosphere.github.io/marathon/docs/rest-api.html找到。

后面将会介绍关于使用这些API的实际的例子。下面我们来看看组成应用程序架构的各种不同的服务是怎样彼此通信的,我们将这称为服务发现和路由

服务发现和路由

现代的应用程序通常由多个服务或层次组成的。这些服务需要彼此间能够进行通信。这对于传统的部署方式来说是非常容易的,只需要将service与所在的机器的hostname进行关联,就可以实现不同机器间的service通过hostname彼此通信。然而,在Mesos的世界里,这变得非常困难。因为容器可以运行在集群中任何有可用计算资源的机器上,对于定位某个应用程序实例所在的位置也就相对困难了。

关于Mesos的服务发现机制,可以参考这篇文章Mesos服务发现与负载均衡

在Mesos和Marathon的生态系统里,我们将这个问题(也是解决方法)称为服务发现。幸运的是,有许多可用的工具来解决服务发现和应用程序的路由问题。目前主要有以下三种选择:

  • Mesos-DNS:通过DNS实现服务发现。
  • Marathon-lb:使用HAProxy提供基于端口的服务发现。
  • haproxy-marathon-bridge (不建议使用):一个脚本文件,它可以对本地运行的HAProxy进行配置。

Mesos-DNS

Mesos-DNS对于每个Mesos任务(包括Marathon应用程序实例)生成一条SRV的记录,并且将这些记录翻译成运行这些应用的机器上的IP地址和端口。如下图所示:
“Mesos-DNS”
Mesos-DNS对于以下几种情况是非常有用的:

  • 应用程序是通过多个Frameworks(不只是Marathon)启动的。
  • 使用类似于Project Calico的解决方案。
  • 在Marathon中使用随机端口分配。

更多信息请参考Mesos-DNS的文档和教程

Marathon-lb

另一种实现服务发现的方式是在集群中的每个机器上运行一个TCP/HTTP代理,将到本地静态服务端口的链接,透明地转发到某个Marathon应用实例(运行Mesos任务)的动态分配的主机/端口组合上。客户端只需要简单得连接到通常定义的服务端口上,而不需要知道服务发现的实现细节。如果所有的应用是通过Marathon启动的,这种方式足以满足要求。
Marathon-lb是一个容器化的应用,它基于HAProxy,包括HAProxy应用程序,和一个使用Marathon的REST的API来生成HAProxy配置的应用。
“Marathon-lb”

更多信息请参考Marathon-lb repositorymarathon-lb documentation on the Mesosphere site

haproxy-marathon-bridge

Marathon也提供了一个简单的shell脚本,它使用Marathon的REST的API来创建HAProxy的配置文件。此种方式在Marathon的官方文档中标为不建议使用,对于此种方式,我们不再做过多研究。