kubernetes:Cronjobs属性failedJobsHistoryLimit不生效,不能自动清理状态为Error的Pod

Cronjobs属性failedJobsHistoryLimit不生效

问题现象

在 《Kubernetes: Job 和 CronJob 的实现原理》一文中,我们提到cron中有如下属性可以设置任务保留个数

  • (1.8版本后).spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit是可选的。 这两个域声明了有多少执行完成和失败的任务会被保留。 默认设置为3和1。限制设置为0代表相应类型的任务完成后不会保留。
  • 特别注意:1.8版本之前,是保留所有的历史job
  • 但是,当我们设置Cronjobs属性failedJobsHistoryLimit为2(默认为1),他并没有自动清理状态为Error的Pod,
  • 错误pod的增多,导致不停占用我们node节点的cpu和memory资源,甚至造成资源耗尽。

问题解决

在job中添加如下两个属性:

  • activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试
  • backoffLimit 就是来保证一个 Job 到底能重试多少次。Job 在运行的时候不可能去无限的重试,所以我们需要一个参数来控制重试的次数。

注意:backoffLimit,默认是6。如果需要修改backoffLimit值,同时需要设置restartPolicy为Never,如果设置restartPolicy为OnFailure,当job失败时达到backoffLimit的重试次数,就会停止job运行。

  • restartPolicy,在 Job 里面我们可以设置 Never、OnFailure、Always 这三种重试策略。在希望 Job 需要重新运行的时候,我们可以用 Never;希望在失败的时候再运行,再重试可以用 OnFailure;或者不论什么情况下都重新运行时 Alway

参考链接:

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

https://github.com/kubernetes/kubernetes/issues/53331

https://github.com/kubernetes/kubernetes/issues/52390

发布了430 篇原创文章 · 获赞 1473 · 访问量 394万+

猜你喜欢

转载自blog.csdn.net/fly910905/article/details/104963331