【问题标题】:How to kill a multi-container pod if one container fails?如果一个容器发生故障,如何杀死多容器 pod?
【发布时间】:2020-05-25 20:32:51
【问题描述】:

我正在使用Jenkins Kubernetes Plugin,它在充当 Jenkins 代理的 Kubernetes 集群中启动 Pod。 Pod 包含 3 个容器以提供从属逻辑、一个 Docker 套接字以及gcloud 命令行工具。

通常的工作流程是从站完成它的工作并通知主站它已完成。然后主节点终止 pod。但是,如果从属容器由于丢失网络连接而崩溃,则容器将终止并显示错误代码 255,其他两个容器继续运行,Pod 也将继续运行。这是一个问题,因为 pod 有大量 CPU 请求,而且设置成本很低,slave 只在必要时运行,但是让多台机器 24 小时或周末运行会造成明显的经济损失。

我知道在同一个 pod 中启动多个容器并不是 Kubernetes 的艺术,但是如果我知道我在做什么并且我假设我知道,那也可以。我敢肯定,鉴于 Jenkins Kubernetes 插件的工作方式,很难以不同的方式解决这个问题。

如果一个容器在没有重生的情况下失败,我可以让 pod 终止吗?由于超时的解决方案也是可以接受的,但不太受欢迎。

【问题讨论】:

    标签: jenkins kubernetes kubernetes-pod jenkins-kubernetes


    【解决方案1】:

    免责声明,我对 Kubernetes 的了解相当有限,但鉴于以下问题:

    也许您可以运行第四个容器,该容器公开一个简单的“活性”端点 它可以运行 ps -ef 或任何其他方式来联系 3 个现有容器,以确保它们还活着。

    只有在所有容器都在运行时,此端点才能返回“OK”,如果至少有一个容器被检测为“crushed”,则返回“ERROR”

    然后你可以设置一个 kubernetes 的 liveness 探测,以便它会在从第四个容器返回的错误时停止 pod。

    当然,如果第 4 个进程由于任何原因会自行崩溃(除非存在错误或其他原因,否则它不应该崩溃),那么 liveness 探针将不会响应,并且 kubernetes 应该无论如何都会停止 pod,即可能是您真正想要实现的目标。

    【讨论】:

    • 有趣的想法让我走上了一条好路,谢谢。 github.com/kubernetes/kubernetes/issues/37218 讨论了结合 liveness probes 的特性(这将避免额外的 pod)。
    • 很好的讨论。感谢您的链接,卡尔。我不知道...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2021-02-24
    相关资源
    最近更新 更多