如何使用Marathon健康检查命令模式?

时间:2016-12-09 21:46:46

标签: mesos marathon

我在mesos / marathon上运行docker容器。我想实现健康检查,基本上想要运行健康检查脚本。我的问题是,健康检查命令是在容器本身上运行还是在从属设备上运行?它可能是容器级别,因为这是每个应用程序运行状况检查,所以很明显,但我想确认一下。没有找到任何相关文档说明它的运行位置。

由于

我确实通过命令尝试回显/ tmp / testfile,我在奴隶上看到了。这意味着它在奴隶上运行?只需要确认。任何更多信息都很有用

2 个答案:

答案 0 :(得分:4)

简短的回答是:这取决于。下面的答案很长:)。

命令健康检查由任务容器中的Mesos docker executor通过docker exec运行。如果使用"统一容器#34;来运行容器,例如,如果没有docker守护程序的docker容器,情况类似,差别没有docker exec而Mesos执行器只是输入{在执行命令运行状况检查之前,容器的命名空间为{1}}(请参阅this doc)。 HTTP和TCP运行状况检查由Marathon调度程序运行,因此不一定在运行容器的节点上(除非您使用Mesos代理在同一节点上运行Marathon,这可能是您不应该这样做的)。查看this page

现在从Mesos 1.2.0和Marathon 1.3开始,可以运行所谓的Mesos-native health checks。在这种情况下,HTTP(S)和TCP运行状况检查都在运行容器的代理上运行。为确保可以访问容器网络,这些检查将进入容器的mnt命名空间。

答案 1 :(得分:0)

Mesos级别的运行状况检查(MESOS_HTTP,MESOS_HTTPS,MESOS_TCP和COMMAND)由Mesos在运行相应任务的代理上本地执行,从而从Mesos执行程序测试可达性。与马拉松级别的健康检查相比,Mesos级别的健康检查具有以下优点:

Mesos级别的运行状况检查尽可能地接近任务执行,因此不受网络故障的影响。

Mesos级别的运行状况检查委派给运行任务的代理,因此可以检查的任务数量可以与集群中的代理数量水平扩展。

限制和注意事项

Mesos级别的运行状况检查会消耗代理上的额外资源;此外,每次检查任务时,都要派生执行流程并输入任务的名称空间会有一些开销。

运行状况检查流程与其检查的任务共享资源。您的应用程序定义必须考虑运行状况检查所消耗的额外资源。

Mesos级别的运行状况检查除了需要它们所需要的任何接口外,还需要任务监听容器的环回接口。如果您在生产环境中运行服务,则需要确保用户可以访问该服务。

Marathon当前不支持Mesos和Marathon级健康检查的组合。

用法示例 HTTP:

{
  "path": "/api/health",
  "portIndex": 0,
  "protocol": "HTTP",
  "gracePeriodSeconds": 300,
  "intervalSeconds": 60,
  "timeoutSeconds": 20,
  "maxConsecutiveFailures": 3,
  "ignoreHttp1xx": false
}

或Mesos HTTP:

{
  "path": "/api/health",
  "portIndex": 0,
  "protocol": "MESOS_HTTP",
  "gracePeriodSeconds": 300,
  "intervalSeconds": 60,
  "timeoutSeconds": 20,
  "maxConsecutiveFailures": 3
}

或安全HTTP:

{
  "path": "/api/health",
  "portIndex": 0,
  "protocol": "HTTPS",
  "gracePeriodSeconds": 300,
  "intervalSeconds": 60,
  "timeoutSeconds": 20,
  "maxConsecutiveFailures": 3,
  "ignoreHttp1xx": false
}

注意:HTTPS运行状况检查不会验证SSL证书。

或TCP:

{
  "portIndex": 0,
  "protocol": "TCP",
  "gracePeriodSeconds": 300,
  "intervalSeconds": 60,
  "timeoutSeconds": 20,
  "maxConsecutiveFailures": 0
}

或命令:

{
  "protocol": "COMMAND",
  "command": { "value": "curl -f -X GET http://$HOST:$PORT0/health" },
  "gracePeriodSeconds": 300,
  "intervalSeconds": 60,
  "timeoutSeconds": 20,
  "maxConsecutiveFailures": 3
}
{
  "protocol": "COMMAND",
  "command": { "value": "/bin/bash -c \\\"</dev/tcp/$HOST/$PORT0\\\"" }
}

其他信息:https://mesosphere.github.io/marathon/docs/health-checks.html