我在mesos / marathon上运行docker容器。我想实现健康检查,基本上想要运行健康检查脚本。我的问题是,健康检查命令是在容器本身上运行还是在从属设备上运行?它可能是容器级别,因为这是每个应用程序运行状况检查,所以很明显,但我想确认一下。没有找到任何相关文档说明它的运行位置。
由于
我确实通过命令尝试回显/ tmp / testfile,我在奴隶上看到了。这意味着它在奴隶上运行?只需要确认。任何更多信息都很有用
答案 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