当 kubernetes cron 作业 pod 通过“替换”并发策略终止时,其关闭会是什么样子?

2024-06-25

我在 kubernetes 官方文档中找不到任何关于此的内容。替换长时间运行的 cron 作业的实际低级流程是什么?我想了解这一点,以便我的应用程序可以正确处理它。

  • 是否是干净的SIGHUP/SIGTERM发送到正在运行的应用程序的信号?
  • 发送信号后是否有一段等待时间,以便应用程序有时间在可能被杀死之前进行清理/关闭?如果是这样,超时是多少秒?还是永远等待?

作为参考,这里是Replace文档中的政策解释:

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

并发策略

  • 替换:如果到了新作业运行的时间并且之前的作业运行尚未完成,则 cron 作业将用新的作业运行替换当前正在运行的作业运行

CronJob 下面只是另一个 Pod。

当并发策略为“Replace”的 Cronjob 仍然处于活动状态时,作业将被删除 https://github.com/kubernetes/kubernetes/blob/6a19261e96b12c83e6c69d15e2dcca8089432838/pkg/controller/cronjob/cronjob_controller.go#L324,这也会删除 Pod。

当 Pod 处于deleted https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-podsLinux 容器将被发送SIGTERM然后一个SIGKILL宽限期后,默认为 30 秒。这terminationGracePeriodSeconds财产在一个PodSpec https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#podspec-v1-core可以设置为覆盖该默认值。

因为flag https://github.com/kubernetes/kubernetes/blob/3b440dfd5550b13278e40975a7cba13a3f129475/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go#L441-L443添加到DeleteJob https://github.com/kubernetes/kubernetes/blob/933f9a469feadcb1904e9d2b7258102ea89f6c7a/pkg/controller/cronjob/injection.go#L120-L123调用,听起来这个删除只是从 kube 键/值存储中删除值。这意味着可以在当前 Job/Pod 仍在终止时创建新的 Job/Pod。您可以与不尊重的工作确认SIGTERM并有一个terminationGracePeriodSeconds设置为集群调度速度的几倍。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 kubernetes cron 作业 pod 通过“替换”并发策略终止时,其关闭会是什么样子? 的相关文章

随机推荐