是否可以在Kubernetes中停止工作而不删除它

时间:2018-10-01 19:03:38

标签: kubernetes jobs

因为Kubernetes处理作业规范中有错别字的情况,因此无法找到容器映像,通过使作业永远处于运行状态,我有一个过程可以监视作业事件以检测案例这样,并在发生一项作业时将其删除。

我宁愿只停止工作,所以有记录。有办法停止工作吗?

5 个答案:

答案 0 :(得分:2)

这是一个很好的问题,Kubernetes中尚不存在这样的机制。

当前的解决方法是将ssh插入计算机并运行:(如果您使用的是Docker)

docker stop <main-container-id-for-your-job>

有人认为您可以使用FluentdlogspoutFilebeat之类的东西来设置日志记录,并将日志转发到ELK或EFK堆栈。

无论如何,我都打开了this

答案 1 :(得分:0)

1)根据K8S文档here

  

通常,系统中不再需要完成的作业。将它们保留在系统中会给API服务器带来压力。如果作业由更高级别的控制器(例如CronJobs)直接管理,则CronJobs可以基于指定的基于容量的清除策略来清除作业。

Here是CronJobSpec中failedJobsHistoryLimit属性的详细信息。

这是将失败的作业的详细信息保留特定时间的另一种方法。可以根据每天运行的大约作业数和必须保留日志的天数来设置failedJobsHistoryLimit属性。同意乔布斯仍在那儿并对API服务器施加压力。

这很有趣。一旦作业完成并失败,例如出现错误的图像拼写错误,该窗格将被删除,并且资源不再被阻塞或消耗。不确定在这种情况下kubectl job stop将会实现什么。但是,成功运行具有适当图像的作业时,我仍然可以在kubectl get pods中看到吊舱。

2)另一种不使用CronJob的方法是指定here所指的ttlSecondsAfterFinished

  

自动清除完成的作业(“完成”或“失败”)的另一种方法是通过指定作业的.spec.ttlSecondsAfterFinished字段,使用TTL控制器提供的TTL机制处理完成的资源。

答案 2 :(得分:0)

您可以使用suspend属性来暂停cronjobs。从Kubernetes文档中:

https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#suspend

答案 3 :(得分:0)

文档说:

.spec.suspend字段也是可选的。如果设置为true,则全部 随后的处决被暂停。此设置不适用于 已经开始执行。默认为false。

因此,要暂停cron,您可以:

  1. 运行并将“暂停”状态从False修改为True。

kubectl edit cronjob CRON_NAME(如果不在默认名称空间中,请在末尾添加“ -n NAMESPACE_NAME”)

  • 您可能会使用“ for”或任何您喜欢的内容创建一个循环,并将它们全部一次更改。
  1. 您可以只将yaml文件保存在本地,然后运行:

kubectl create -f cron_YAML

这将重新创建cron。

答案 4 :(得分:0)

其他答案暗示了 .spec.suspend API 的 CronJob 解决方案,该解决方案有效,但由于 OP 专门询问了 Jobs,因此值得注意的是不需要CronJob

从 Kubernetes 1.21 开始,.spec.suspend API 中的 Job 字段也有 alpha 支持,(see docs here)。该功能位于 SuspendJob 功能门之后。