当容器完成时,是否可以让Job竞争?
例如,我想运行一个包含2个容器的作业:
Java app容器运行并完成,但显然Elasticsearch容器会无限期地继续运行 结果,约伯永远不会完成。解决方案是什么?
干杯
答案 0 :(得分:0)
不确定您的使用案例。我的理解是Elasticsearch应该一直运行来查询数据。
看到你可以运行两个不同的pod。一个用于Elasticsearch,另一个用于java应用程序。只需从你的工作中调用java应用程序。
答案 1 :(得分:0)
您应该查看livenessProbe
功能。这是部署中定义的功能,它在容器运行时每隔x秒运行一次,以确保它正确运行。当活体探测失败时,Kubernetes将终止容器。 Here是关于活性和准备情况探测的官方Kubernetes文件。
此处的策略是使用Elasticsearch容器上的活动探测来检查Java应用程序是否与其建立了连接。一旦java应用程序完成,连接将不再存在,导致活性探测失败,kubernetes将终止Elasticsearch容器。
请注意,我认为kubectl
尝试重新启动容器,如果它被活动探测失败终止。您可能希望考虑禁用该功能。
答案 2 :(得分:0)
这可能不是最简单的方法,但您可以使用Kubernetes API删除作业:
https://kubernetes.io/docs/api-reference/v1.7/#delete-41
我不确定你是如何开始这项工作的,或者这个解决方案在你的方案中是多么现实。