因为Kubernetes处理作业规范中有错别字的情况,因此无法找到容器映像,通过使作业永远处于运行状态,我有一个过程可以监视作业事件以检测案例这样,并在发生一项作业时将其删除。
我宁愿只停止工作,所以有记录。有办法停止工作吗?
答案 0 :(得分:2)
这是一个很好的问题,Kubernetes中尚不存在这样的机制。
当前的解决方法是将ssh插入计算机并运行:(如果您使用的是Docker)
docker stop <main-container-id-for-your-job>
有人认为您可以使用Fluentd或logspout或Filebeat之类的东西来设置日志记录,并将日志转发到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,您可以:
kubectl edit cronjob CRON_NAME
(如果不在默认名称空间中,请在末尾添加“ -n NAMESPACE_NAME”)
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
功能门之后。