【问题标题】:How to use Marathon health check command mode?Marathon 健康检查命令模式如何使用?
【发布时间】:2019-06-05 19:21:25
【问题描述】:

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

谢谢

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

【问题讨论】:

    标签: mesos marathon


    【解决方案1】:

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

    命令健康检查由任务容器中的 Mesos docker 执行程序通过docker exec 运行。如果您使用“统一容器化程序”运行容器,即在没有 docker 守护程序的 docker 容器的情况下,情况类似,不同之处在于没有 docker exec,而 Mesos 执行程序只需输入容器的 mnt 命名空间之前执行命令健康检查(见this doc)。 HTTP 和 TCP 健康检查由 Marathon 调度程序运行,因此不一定在运行容器的节点上运行(除非您在与 Mesos 代理相同的节点上运行 Marathon,这可能是您不应该做的)。查看this page

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

    【讨论】:

    • 感谢您的回答,很有帮助。只是一些跟进。我基本上是在用 mesos 跑马拉松。在这种情况下,我想检查从站是否可以从马拉松访问,这涉及检查在从站上运行的单独进程的活跃度。我还想检查容器是否可达。是否可以使用运行状况检查命令来执行此操作。我正在考虑使用从属进程的 pidof 作为健康检查,因此想知道在这种环境中,该命令是否会在从属进程或容器上运行。
    • 如果您想检查容器是否可以从调度程序访问,那么 Marathon HTTP 或 TCP 健康检查是正确的做法(我假设您可以在某些 HTTP 请求中表达“可达”) .从逻辑上讲,如果 Marathon 可以到达任务,它也可以到达正在运行任务的代理。一个问题是您为什么要检查 Marathon 是否可以联系到代理?你想解决什么问题?
    • 是的,我可以使用容器可达性,我认为这已经足够了。正如你所说,如果任务是,它意味着代理是可访问的。再次感谢。
    【解决方案2】:

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

    Mesos 级别的健康检查尽可能靠近任务执行,因此不受网络故障的影响。

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

    限制和注意事项

    Mesos 级别的健康检查会消耗代理上的额外资源;此外,每次检查任务时,fork 执行进程并进入任务的命名空间都会产生一些开销。

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 2021-09-13
      • 2019-11-03
      • 1970-01-01
      相关资源
      最近更新 更多