Marathon的设计宗旨是让用户在同一组服务器之上,更智能地运行多种应用程序和服务——Hadoop、Storm,甚至一个标准的Web应用。基于Mesos的数人云使用了Marathon技术,将它用于部署及监控长期运行及容器化应用程序,还会在不远的将来进行版本的更新,及时跟进国外的脚步,为大家提供更好的服务。
随着越来越多的企业开始转向多租户数据中心或者私有云体系,为了在新的平台上提高IT执行效率,运行分析能力亦变得越来越重要。负责管理数据中心与预算分配的领导者当然希望了解哪些服务正处于运行状态、由谁负责其运行,各服务又各自消耗多少资源。有鉴于此,当我们在数据中心操作系统(简称DCOS)集群之上部署应用程序或者容器时,可以为各组件添加标签,从而追踪及报告其使用情况。
举例来说,大家可能希望为一款Mesos应用程序分配一个成本中心标识符或者客户号码,而后在每月月末生成一份汇总报告。这份报告当中可以涵盖各类使用量指标,例如由成本中心或者客户为该应用程序分配的CPU与内存资源量。更进一步,大家也可以使用REST API或者JSON载荷同Splunk或者Jaspersoft等分析工具进行交互,从而以轻松但却强大的方式对任务数据进行分析。
下面来看具体实现方式:
Mesosphere DCOS当中包含的Marathon用于部署及监控长期运行及容器化应用程序。大家可以利用Marathon的Web界面实现应用程序手动部署,或者使用DCOS Marathon命令行界面实现同样的作用。
图一:Marathon Web界面——应用1标签
图一所示为如何利用Marathon Web界面为启动的容器或者命令行应用程序指定一个标签。图中所示的应用程序名为gregs-app-1,大家可以看到其标签名称COST_CENTER已经被定义及设置为0001。当此应用程序被部署之后,其将收集与自身相关的成本中心值且允许管理者通过Marathon REST API进行查询。
图二所示为利用Marathon Web界面部署的第二款应用程序,但这一次其COST_CENTER标签被设置为0002。此标签及值将显示在Marathon Web界面当中,并通过REST API调用返回结果。
图二:Web界面——应用程序2标签
大家也可以在利用DCOS合作行界面部署应用程序时,通过以下方式为其指定标签值:
dcos marathon app add <my json file>
图三所示为DCOS命令中用于通过Marathon部署应用程序的JSON格式。与在Marathon Web界面当中一样,大家也可以为其指定超过一个标签,不过每个标签都只能拥有一个值。
图三:应用2的Marathon JSON文件
现在上述应用程序已经部署完成并开始运行,大家可以利用DCOS提供的Marathon Web界面通过相关标签查看两款应用程序的运行状态。图四所示为两款应用程序在显示其COST_CENTER标签值时的的运行效果。
图四:Marathon Web界面——运行应用程序
大家也可以利用Marathon REST API以根据标签值标准对运行中的应用程序进行查询。图五所示为指向运行在Mesos集群内的Marathon服务的一条REST请求。在本示例当中,curl程序用于提交HTTP GET请求,但大家也可以使用任何能够发送HTTP GET/PUT/DELETE请求的程序实现同样的功能。大家可以看到其REST端点为:
https://52.88.210.228/marathon/v2/apps
通过REST请求发送的参数中即包含有以下标准:
?label=COST_CENTER==0001
图五:Marathon REST API使用情况
大家也可以通过以下方式同时指定多条标签标准:
?label=COST_CENTER==0001,COST_CENTER==0002
当Marathon收到HTTP GET请求时,其会以JSON载荷的形式回复响应。JSON在设计上不易读取,但如果大家使用python json.tool类等工具,则可以对其进行格式化调整,从而实现一定程度的可读性。在一套实际生产系统当中,大家应该还拥有能够将JSON格式响应数据解码为具备一定可读性格式(或者图表)的报告工具。不过在本示例中,我们姑且只查看JSON的原始输出结果。
如大家所见,响应信息当中只包含标签定义为COST_CENTER且相关值为0001的应用程序。其相关资源指标亦被包含在内,例如CPU共享数量以及内存分配量。在响应信息的最下方,我们可以看到该应用程序的部署日期/时间,这部分信息可用于计算应用的正常运行时间,从而核对资源费用账户或者办理退费。
通过在DCOS以及Marathon之上运行应用程序或者容器化服务,我们能够追踪集群资源使用量以进行账单核对或者退费办理。展望未来,随着越来越多企业开始部署私有云、多租户数据中心以及容器化工作负载以削减资源成本及提升业务运营效率,这种能力将变得愈发重要。在应用程序运行工作中采取资源共享的方式确实值得称道,但我们的目标是让资源共享机制发挥更好、更理想的实际效果。