我正在尝试使用Mesos + Marathon,并通过创建一个由shell脚本组成的小"app"开始简单,该脚本循环每5秒无限地记录一次消息.当我配置该应用程序时,我可以分配各种内存和CPU资源,这引出了我的问题:
如果Marathon直接生成shell脚本,那么它如何限制脚本资源的使用?该脚本可以执行并启动任何内容以消耗所有可用资源.
我知道Docker或其他一些隔离机制会限制进程可以做什么,但我没有配置它(显式).它是否在运行中创建某种容器而不必显式配置?我在OS X上测试.
Mesos仅支持Mac上的"Posix"隔离,这实际上更多用于监控而不是实际的资源限制,因此在Mac上测试Mesos将无法展示真正的资源隔离.
如果在Linux机器/ VM上测试Mesos,则可以设置:
--isolation='cgroups/cpu,cgroups/mem'
Run Code Online (Sandbox Code Playgroud)
当启动每个slave以启用cgroups隔离时,这将创建一个容器并在其中运行脚本/进程.当容器/进程超过其cpu共享(不是固定的cpus)时,cgroups隔离器将限制cpu利用率,并且如果超过其内存限制将终止进程(销毁容器).
另请注意,Mesos 0.21现在支持网络隔离器和可插拔隔离器模块,因此您可以构建自己的gpu隔离器,缓存隔离器等.
如果要启用Docker容器(0.20+),只需设置:
--containerizers='docker,mesos'
Run Code Online (Sandbox Code Playgroud)
启动从站时,您可以启动任意docker镜像并在其中运行命令.Docker仍在下面使用cgroup,因此cgroups隔离器与您在Mesos上运行的Docker镜像完全兼容.
如果您正在使用Mesosphere包,则可以通过创建配置文件将选项传递给Mesos slave /etc/mesos-slave,例如:
echo 'docker,mesos' > /etc/mesos-slave/containerizers
Run Code Online (Sandbox Code Playgroud)