完成一个容器后完成Kubernetes作业

时间:2017-07-16 21:21:27

标签: kubernetes

当容器完成时,是否可以让Job竞争?

例如,我想运行一个包含2个容器的作业:

  • Elasticsearch容器
  • 某个连接到Elasticsearch的Java应用容器

Java app容器运行并完成,但显然Elasticsearch容器会无限期地继续运行 结果,约伯永远不会完成。解决方案是什么?

干杯

3 个答案:

答案 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

我不确定你是如何开始这项工作的,或者这个解决方案在你的方案中是多么现实。