CronJob 默认最多保留三个成功 Job 和一个失败 Job;Job TTL 独立控制年龄。任一机制都可能删除已结束 Job。

Kubernetes CronJob 需要历史清理策略

CronJob 按计划创建 Job,再由 Job 管理真正执行工作的 Pod。完成后的对象可以保留有用状态,但保留量受到多种独立机制影响。尤其要注意,CronJob 本来就有默认历史上限;省略显式历史字段,并不意味着普通已完成运行会无限堆积。分析清理问题时,先分清对象类型与状态,再判断是哪项机制没有覆盖。 当另一机制允许更早删除时,数量与 TTL 都不保证最低保留时长。清理是异步的,活动任务限制也不证明业务可安全重试。本轮未重跑保留诊断。 历史记录不等于日志归档 CronJob 默认最多保留三个成功 Job 和一个失败 Job,控制器分别协调两类记录。某类上限设为零,表示不保留该类历史,但清理是异步过程,不是任务结束那个瞬间必然消失。仍在运行的 Job 不属于完成历史,需要单独观察,不能期待这两个数量上限替它们设置运行期限。 三十天每小时一次意味着七百二十个计划机会,不一定保留七百二十个 Job,更不一定恰好产生相同数量的 Pod。错过调度、并发策略、重试与并行度都会改变关系,一个 Job 也可能拥有多个 Pod。用运行次数估算存储或控制面容量之前,应把这些假设说清楚,不能把理想时间表直接当成当前对象数量。 Pod 对象仍在,也不保证容器日志仍然可读。节点故障、日志轮转、容器清理和驱逐都会影响访问。真正需要按时长保留的证据,应交付到合适的日志系统。Kubernetes 对象便于调查状态,但不能替代归档保证;只延长 Job 历史,不会自动解决节点日志的生命周期问题。 ...

二月 25, 2028 · 1 分钟 · XB Field Notes
时间表时钟产生多次 Job;对象创建与业务结果验证是不同环节。

CronJob 把时间表变成 Job

CronJob 把一份 Job 模板与循环时间表组合起来。CronJob 控制器负责创建 Job,再由 Job 管理执行工作的 Pod。一次运行可以包含重试、替换 Pod,或按照 Job 配置启动多个并行工作者,不应把它简化为每次只启动一个短命容器。两次运行之间不需要专门的应用进程等候触发,但已经完成的 Job 和 Pod 可能继续保留,供排查与审计使用。 时间表只是近似兑现。某个时刻可能生成重复 Job,也可能完全漏掉,因此不能无条件承诺每个计划时刻都至少执行一次。应用既要能安全重复执行,也要记录哪些业务周期真正完成。幂等性解决重复效果,独立的完整性检查解决根本没有运行的工作,这两个问题不能互相替代。 时间表是近似调度,不是持久队列,也不保证每个时刻的工作都完成。startingDeadlineSeconds 限制启动迟到,不限制运行时长。原文命令未重跑;执行状态仍为受阻。 时间表产生的是 Job 五个字段依次表示分、时、日、月与星期,支持区间、步长和 @daily 等宏。*/10 * * * * 表示每十分钟的计划时刻,并不保证 Pod 恰好在那个瞬间开始执行。即使 Job 已经建立,节点资源不足、镜像拉取或调度过程仍可能让实际工作晚于计划。 ...

十二月 17, 2027 · 1 分钟 · XB Field Notes