【问题标题】:taskKillGracePeriodSeconds is not working for DC/OS Marathon Application?taskKillGracePeriodSeconds 不适用于 DC/OS Marathon 应用程序?
【发布时间】:2017-04-12 20:58:52
【问题描述】:

我们在 AWS 节点上设置了 DC/OS(1.9 版)集群。我们正在使用设置 "taskKillGracePeriodSeconds"=60 创建 Marathon 应用程序定义。我们还在我们的应用程序中捕获 SIGTERM 以优雅地处理应用程序关闭。但这并没有错,Marathon 会立即杀死应用程序(按比例缩小/销毁),而不是像预期的那样等待 60 秒。我们在 SIGTERM 上收到回调,但之后应用程序立即被终止。我们还尝试通过在文件 /var/lib/dcos/mesos-slave-common MESOS_ATTRIBUTES=executor_shutdown_grace_period:60secs;docker_stop_timeout:60s 中设置以下属性来启动 Mesos 从代理 ecs,但这也无济于事。

DCOS 集群代理使用 centos-release-7-2.1511.el7.centos.2.10.x86_64 操作系统。

是否有人能够成功使用 taskKillGracePeriodSeconds。?

请帮助解决这个问题。

谢谢。

【问题讨论】:

    标签: marathon dcos


    【解决方案1】:

    你在使用 Docker 容器吗?

    据我所知,在使用进程组(=containers)转发 SIGTERM 信号时出现了一个问题。

    只是为了在您的集群上进行测试,您是否可以使用以下命令部署应用程序,仅使用 mesos containerizer 和 10 秒的 taskKillGracePeriodSeconds?

    trap "echo 'killing' && sleep 5 && echo 'test' && sleep 100" SIGTERM && sleep 100000

    【讨论】:

    • 是的,我们正在使用 Docker 容器。我们在 Docker 容器中运行 Java 应用程序,并且能够捕获终止信号。我们在我们的应用程序中添加了 Runtime.addShutdownHook 钩子,当应用程序被杀死时,我们在这里得到回调。但是在这个应用程序立即终止后,因为 Marathon 停止了 Docker 容器。我们还尝试了使用 mesos containerizer 的简单 Marathon 应用程序。 taskKillGracePeriodSeconds 超时正在为此工作。有没有办法处理 Marathon 应用程序运行 Docker Container.. 的正常关闭?
    • docker 的问题在于,它取决于你如何使用它。确保将 sigterm 发送到底层进程的最佳方法是,您在 Dockerfile 和 dont use marathon cmd` 部分中使用 entrypoint 功能。如果更改为入口点对您的情况没有帮助,您可以发布您的(精简的)Dockerfile 和您的(精简的)马拉松应用程序定义,我会尝试重现它:)
    • 通过为容器添加入口点,我们能够在容器中运行的 java 进程中捕获 SIGTERM 并能够优雅地处理进程的关闭。我们也可以使用 taskKillGracePeriodSeconds 来做同样的事情。感谢您的帮助。
    • 这是个好消息!如果您可以将此答案标记为解决您的问题,那就太棒了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多