任务组(Task Group)
在此之前,支持Pod场景的限制在于,现有的Scheduler和Executor API不能原子性地(atomically)发送一组任务给Executor,尽管一个Scheduler可以使用现有的API部署多个任务在同一个Executor上,但这些任务是以单个事件的形式抵达Executor(一次只传递一个任务),由于任何一个任务有可能在其传递的过程中被遗漏(如网络分隔等原因),多任务传递的原子性得不到保证。所以,基于最新的任务组,我们能保证用户定义的任务组能够全部原子性地传递到Executor,这就是我们给任务组定义的“全有或全无”机制。
若想了解更多关于任务组,请阅读任务组API用户文档。
嵌套容器(Nested Container)
嵌套容器,顾名思义,指的是嵌套于另一容器当中的容器,他们共享着network namespace于储存卷且允许享有其各自的容器镜像和资源限额。
我们通过定义新的Agent API来管理嵌套容器,任何被授权的管理者或执行器,都可以利用这个新的API来部署、管理、清理嵌套容器。与此同时,我们支持嵌套容器的多层嵌套,最多嵌套32层(由Linux Kernel pid namespace和user namespace等因素决定)。
以下是利用新的Agent API部署嵌套容器的简要工作流程:
1. 执行器发送LAUNCH_NESTED_CONTAINER的命令给Agent:
2. 基于执行器部署嵌套容器的命令,Agent在执行器容器中部署了一个嵌套容器:
3. 执行器发送WAIT_NESTED_CONTAINER的命令给Agent,让其监控此嵌套容器的状态:
4. 根据指定的容器ID,Agent监控嵌套容器并等待其运行中止或结束,一旦此嵌套容器中止或结束任务,Agent将发送其退出状态(exit status)给执行器:
在不久的将来,我们还将为嵌套容器开发更多的特性,如嵌套容器的资源隔离(目前所有嵌套容器共享其执行器容器的资源,如CPU、GPU、内存等)、嵌套容器的资源使用统计数据等。如果有同学对某些特性感兴趣、有更好的建议、或希望为Mesos容器化贡献力量,欢迎跟我们联系。
今天就码到这吧,本来想把Mesos 1.2的标志特性Debug Container也一起概括进来的,但考虑到内容较多,还是留给下次好了。接下来即将发布的几个Mesos新版本,都将会包含一些非常重要的特性,如Mesos 1.3的multi-role和hierarchy-role、Mesos 1.4的Resource Provider和对CSI(最新容器储存标准)的支持,我们对此充满信心,敬请期待!
最后,同学们要是对Mesos容器化的发展方向及开发状态感兴趣,欢迎加入到我们的Mesos容器化工作组,我们会根据大家的讨论及各大公司的需求,一同决定Mesos容器化各项特性的优先级,欢迎各位同学给我们多提意见与建议!