在DC/OS1.9中探索POD


对Apache Mesos中的pod的需求可以追溯到2015年JIRA的一个史诗:[MESOS-2449]-支持任务组(Pod)构造和Mesos中的API.Epic包括数十个问题,当框架请求时,这些问题使Mesos能够在单个主机上一起调度容器。2016年11月10日,Apache Mesos 1.1.0 was released,并包括以“任务组”的名义对吊舱的支持。

一次将资源分配给多个容器的能力并不是Meso上的pod的唯一先决条件;Frameworks还必须能够将这些容器安排在一起。这意味着在Marathon中构建新的功能version 1.4.02017年2月17日。

随着DC/OS1.9的发布,我们很高兴地宣布pods are availableDC/OS用户。下面是它们的工作原理!

DC/OS pods:它们有什么用处?

默认情况下,当您启动包含作业或服务的容器时,DC/OS会将该容器放在具有您请求的资源的任何节点上,从而允许您对容器在集群中的物理位置保持不可知性。从历史上看,您只能通过以下操作来影响容器的放置constraints和资源,它们为容器指定特定的节点主机名,节点属性和节点资源。直到现在,您还不能保证在没有确切指定哪个节点的情况下在同一节点上调度任何两个容器。

豆荚为这个问题提供了一个解决方案。一组容器现在可以位于同一个节点上,它们可以共享网络命名空间和存储卷等资源。此外,容器在健康检查中被链接,从而如果pod中的容器未通过健康检查或变得无响应,则pod中的所有容器可以被重新启动或一起重新定位到另一个节点。

如果您的应用程序依赖于需要与主应用程序位于同一位置的支持服务(例如日志刮板或分析服务),则Pod可能特别有价值。它们对于支持遗留应用程序的容器化也很重要,容器化有时涉及将单块应用程序中相互依赖的组件分离为多个单独的容器化微服务,这些微服务仍然需要共享磁盘或本地主机。

在最近的一篇博客文章中,Amr Abdelrazik提供了一个关于POD用例的更全面的概述,您可以在Introducing Pods in DC/OS 1.9

吊舱内件

要使用Mesos和Marathon运行一个pod,首先必须定义它。使用JSON pod定义为Marathon配置pod,该定义看起来与Marathon类似application definitions,只是它们可以列出多个容器(称为子容器),这些容器定义您希望一起运行的任务。

为了调度一个pod,马拉松将pod定义转换为Mesos任务组定义,并接受具有足够资源和匹配pod约束的提议。创建的任务组数取决于pod定义中指定的实例数;每个pod实例都有自己的新任务组。

一旦接受了报价,Mesos主机就会通知相应的Mesos代理启动分配给报价的任务组。Mesos代理,使用Universal Container Runtime,为每个任务组启动一个新的任务组执行器。与其他执行器一样,任务组执行器本身也是一个容器。与其他执行器不同,任务组执行器可以将多个任务作为共享执行器容器的命名空间和资源的子容器来管理。

要了解更多关于马拉松中的吊舱,请访问documentation

在DC/OS1.9中使用POD

在DC/OS GUI中,POD被处理并可视化地表示为Services,以及应用程序。因此,您可以通过在DC/OS GUI中运行新服务并选择Multi-container(pod)选项来部署或创建pod。

因为pod是用JSON pod定义配置的,所以您也可以使用Run a Service页面上的JSON配置选项来配置pod,就像您配置应用程序一样。新的豆荚Quick Startfor DC/OS1.9提供了一个简单的pod定义示例,您可以在Examples

一旦pod启动并运行,您就可以像任何其他服务一样在DC/OS GUI中查看它的状态。通过在服务列表中单击您的pod,您将被带到pod详细页,在那里您可以查看pod实例和每个pod实例中的子容器,以及它们的状态。

DC/OS CLI和REST API也支持POD。如果您正在使用Pod with multiple containers例如,如上面的屏幕截图所示,您可以通过输入以下内容来使用CLI创建pod:

dcos marathon pod add a-pod-with-multiple-containers.json

你应该回去:

Created deployment 75630ae1-5912-4747-94b9-08f888f01363

要查看正在运行和已停止的Pod列表,可以使用:

dcos marathon pod list

您还可以通过引用pod ID删除,显示和更新CLI中的pod:

dcos marathon pod remove [--force] <pod-id>
dcos marathon pod show <pod-id>
dcos marathon pod update [--force] <pod-id>


参见Using Pods以了解这些命令的具体用法。

结论

在DC/OS版本1.9.0中,pod被认为是试验性的,由Universal Container Runtime。Pod特性目前在未来版本的路线图上包括:Pod内有序的容器启动时间和桥模式网络支持。

要进一步研究本版本中的pods,请参阅the documentation,其中包括一个Quick Start,Technical Overview,Using Pods,以及Examples