马拉松不会发射码头集装箱

时间:2016-01-27 23:31:46

标签: docker mesos marathon mesosphere

我有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

所以我认为我们比我们更进一步,但我们仍然有一些端口问题。我不知道为什么容器会自己成功构建,没有端口设置的马拉松,但没有端口设置的马拉松

1 个答案:

答案 0 :(得分:3)

有几件事要检查:

  1. 关于你奴隶:ps aux | grep sbin/mesos-slave应该包含以下内容:

    --containerizers=docker,mesos --executor_registration_timeout=5mins

  2. 再次检查奴隶检查是否正在运行Docker守护程序:

    ps aux | grep "docker daemon"

  3. 确保您已将Docker网络(在Marathon中)配置为BRIDGE。使用HOST模式,您可能会与已在主机上使用的端口发生冲突。这将允许映射slave:32001 -> docker:8080

    ...
    "network": "BRIDGE",
    "portMappings": [
      {
        "containerPort": 8080,
        "hostPort": $PORT0,
        "protocol": "tcp"
      }
    ],
    ...
    
  4. 当任务在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

  5. 如果任务没有启动,那么没有足够的资源或Marathon的一些问题。将浏览器导航到http://{marathon URI:8080]/logging并增加任务分配的详细程度。然后查看Marathon日志。