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

How to use Marathon health check command mode?

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

谢谢

我确实尝试通过命令回显 /tmp/testfile,我在从服务器上看到了。这意味着它 运行s 在从机上?只是需要确认。任何更多的信息都是有用的

简短的回答是:视情况而定。下面的长答案 : ).

Mesos docker 执行程序通过 docker exec 在您的任务容器中 运行 命令健康检查。如果您 运行 您的容器使用 "unified containerizer",即 docker 容器没有 docker 守护进程,情况类似,区别在于没有 docker exec 并且 Mesos 执行器在执行命令健康检查之前只需进入容器的 mnt 命名空间(参见 this doc). HTTP and TCP health checks are run by the Marathon scheduler hence not necessarily on the node where your container is running (unless you run Marathon at the same node with Mesos agent, which is probably you should not be doing). Check out this page.

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

Mesos-level 健康检查(MESOS_HTTP、MESOS_HTTPS、MESOS_TCP 和 COMMAND)由 Mesos 在代理 运行 上本地执行相应的任务,从而测试 Mesos 执行器的可达性。 Mesos-level 健康检查与 Marathon-level 健康检查相比具有以下优势:

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

Mesos-level 健康检查委托给任务的代理 运行,因此可以检查的任务数量可以随着集群中代理的数量水平扩展。

限制和注意事项

Mesos-level 健康检查会消耗代理的额外资源;此外,fork-execing 进程和每次检查任务时进入任务的命名空间都会产生一些开销。

健康检查进程与其检查的任务共享资源。您的应用程序定义必须考虑健康检查消耗的额外资源。

Mesos-level 健康检查要求任务除了监听它们需要的任何接口外,还要监听容器的环回接口。如果您 运行 生产中的服务,您需要确保用户可以访问它。

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