我有1/1主/从设置,从设备有8gb ram 8 cpus。我正在尝试使用marathon来部署一个包含1gb内存和1个cpu的docker容器,但它只是等待挂起
我认为这通常是由于马拉松没有获得它想要的任务所需的资源 当我查看我的日志时,我看到了
向框架发送1个优惠 8bb1a298-cc23-426e-ad43-d440a2a560c4-0000(马拉松)at scheduler-d4a993b4-69ea-4ac3-9e98-b54afe1e790b@127.0.0.1:52016 I0127 23:07:37.396546 2471 master.cpp:3297]处理DECLINE调用 提供:[5271fcb3-4d77-4b12-af85-d94fd9172514-O127]用于框架 8bb1a298-cc23-426e-ad43-d440a2a560c4-0000(马拉松)at scheduler-d4a993b4-69ea-4ac3-9e98-b54afe1e790b@127.0.0.1:52016 I0127 23:07:37.396917 2466 hierarchical.cpp:744]恢复的cpus():6; MEM():5968;盘():156020;端口():[31000-31056,31058-32000] (总计:cpus():8; mem():6992;磁盘():156020; ports():[31000-32000],已分配:cpus():2; MEM():1024; 从站的端口(*):[31057-31057]) 来自框架的8bb1a298-cc23-426e-ad43-d440a2a560c4-S0 8bb1a298-cc23-426e-AD43-d440a2a560c4-0000
所以看起来马拉松正在拒绝它获得的报价?日志中的下一行表示,mesos正在回收所提供的资源,以及它的回收对我的任务来说是多少?
关于如何进一步解决这个问题的任何想法?
编辑:所以必须进一步深入研究这个马拉松日志。
如果我们在marathon docker部分中没有输入端口映射的任何信息,基本上部署就可以工作。 docker容器已成功部署,我可以从其主机成功ping通,但我无法从其他地方访问它。
如果我们将容器端口设置为8081(这是docker容器公开的是其应用程序侦听的内容),我们会在部署过程中进一步完成,但容器中的应用程序无法构建并显示错误
错误:听EADDRINUSE ::: 8081 at Object.exports._errnoException(util.js:856:11) at exports._exceptionWithHostPort(util.js:879:20) 在Server._listen2(net.js:1234:14) 在听(net.js:1270:10) 在Server.listen(net.js:1366:5) 在EventEmitter.listen(/usr/src/app/node_modules/express/lib/application.js:617:24) 在对象。 (/usr/src/app/index.js:16:18) 在Module._compile(module.js:425:26) at Object.Module._extensions..js(module.js:432:10) 在Module.load(module.js:356:32) 在Function.Module._load(module.js:313:12) 在Function.Module.runMain(module.js:457:10) 在启动时(node.js:138:18) 在node.js:974:3
所以我认为我们比我们更进一步,但我们仍然有一些端口问题。我不知道为什么容器会自己成功构建,没有端口设置的马拉松,但没有端口设置的马拉松
答案 0 :(得分:3)
有几件事要检查:
关于你奴隶:ps aux | grep sbin/mesos-slave
应该包含以下内容:
--containerizers=docker,mesos --executor_registration_timeout=5mins
再次检查奴隶检查是否正在运行Docker守护程序:
ps aux | grep "docker daemon"
确保您已将Docker网络(在Marathon中)配置为BRIDGE
。使用HOST
模式,您可能会与已在主机上使用的端口发生冲突。这将允许映射slave:32001 -> docker:8080
。
...
"network": "BRIDGE",
"portMappings": [
{
"containerPort": 8080,
"hostPort": $PORT0,
"protocol": "tcp"
}
],
...
当任务在Marathon中启动时,您会看到应用ID,如myapp.a72db5b0-ca16-11e5-ba5f-fea9945fabaf
。使用Mesos CLI(pip install mesos.cli mesos.interface
)来获取日志。有一个类似于Unix tail
的命令用于获取stdout
个日志(-f
跟踪日志):
mesos tail -f -i myapp.a72db5b0-ca16-11e5-ba5f-fea9945fabaf
和stderr
:
mesos tail -f -i myapp.a72db5b0-ca16-11e5-ba5f-fea9945fabaf stderr
-i
允许您从非活动任务中获取日志(如果任务快速崩溃)。如果您没有在Marathon中捕获ID,请使用mesos ps -i
。
如果任务没有启动,那么没有足够的资源或Marathon的一些问题。将浏览器导航到http://{marathon URI:8080]/logging
并增加任务分配的详细程度。然后查看Marathon日志。