当前位置: 首页 > 知识库问答 >
问题:

用于pod终止或作业完成的Kubernetes事件

卢恩
2023-03-14

我们的应用程序在库伯内特斯上运行作业。我们目前正在查询kubernetes,向用户反馈作业的状态,一旦作业完成,还想向他们提供作业(pod)日志。这种情况经常发生,例如每30次。我们现在有如此多的作业,以至于这个pod查询和处理信息需要太长时间。

如果能被告知kubernetes事件就太好了:一个pod正在等待、计划、拉动、运行、成功/失败。不确定在我们的应用程序中获取这些事件的最佳方式是什么,但这里的主要问题是:

是否存在pod终止(成功或失败)或作业完成的事件?

如果这不存在,是否有一种变通方法来了解pod或作业是否已终止(以便我们可以获取pod日志)?

共有1个答案

呼延学
2023-03-14

Kubectl获取事件提供集群中发生的事件。对于高级场景,您可以检查kubewatch。

Kubewatch是一个Kubernetes观察者,目前向可用的协作中心/通知渠道发布通知。在您的k8s集群中运行它,您将通过webhook获得事件通知。

另一个选项是在preStop中添加一个处理程序,在pod/作业终止之前发送一个事件

https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/#define-poststart-and-prestop-handlers

 类似资料:
  • 我们在晚上安排的cron作业正确启动,但映像本身的运行时间比计划的晚得多。我们预计拉取映像或从集群请求资源时会出现问题。通常我可以在输出的事件部分中看到此类错误。在本节中,我可以看到诸如等事件。但是作业完成后,不再显示任何事件。 是否可以查看已完成作业的这些事件? 或者有没有另一种方法来调查这样的问题?

  • 我正在运行一个Kubernetes的工作,并试图在它完成几个小时后查看它的日志。但是,当我执行时,没有列出pod(返回时只是),而当我执行时,该作业的pod不在那里。如何在已完成的作业中配置删除pod的操作,以及如何更改该操作以使pod保持更长的时间以便读取其日志?

  • 我在库伯内特斯连夜运行了一项工作。当我早上检查它时,它已经失败了。通常,我会检查pod日志或事件来确定原因。然而,pod被删除了,没有事件。 下面是输出: 这是作业配置yaml。它有,但是它从来没有重启过。我也没有设置TTL,所以豆荚永远不会被清理。 我如何调试这个?

  • 我正在尝试使用golang-kubernetes客户端go-lib根据作业的状态筛选完成的作业。 我已经检查了其他答案,解释了如何使用kubectl获取作业,如下所示: 但我不知道如何将jsonpath输出“转化”为过滤器或列表选项 如果我按状态阶段和标签搜索pod,我会这样做: 但是,如果我要实现jsonpath 这将遍历所有作业,并检查状态下的succeeded键是否等于1。适用于所有工作。

  • 我无法自动删除由CronJob启动的已完成作业。正如我在此处和此处的QA中以及在官方文档中所阅读的,这可以通过建立作业历史限制< code > . spec . successfuljobshistorylimit 和< code > . spec . failed jobshistorylimit 来完成。我做过,两种情况下都成立为1。但是我的群集保存了不止一个已完成的作业,事实上,它保存的数据

  • 我正在提交一个pyspark作业,在客户机模式下使用spark提交。 这项工作成功完成,我可以在Spark历史记录以及纱线中验证这一点。即使在作业完成后,我仍然可以看到spark提交进程正在运行,并且不会终止。 我想从调用提交作业的调用程序中返回作业状态(Jenkins使用ssh插件发布)。有什么方法可以确保火花提交过程在完成作业后以正确的退出代码终止? 我尝试过停止火花上下文并将退出状态放在py