3

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

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

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

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

4

1 回答 1

2

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

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

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

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

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

于 2020-02-10T14:00:49.713 回答