让完成的任务自己消失
任务完成后,对象与它创建的副本会一直保留在集群里,久而久之占用大量存储并拖慢列表查询。清理字段可以在任务结束后经过指定时间自动删除这些对象。给批处理加上这一项,是不用额外运维动作就能保持集群整洁的最省事做法。
基本信息
| 适用平台 | Kubernetes 1.21+,需控制器管理器启用相关能力 |
|---|---|
| 字段含义 | 任务结束后经过多少秒自动删除 |
| 删除范围 | 任务对象与它创建的副本 |
| 计时起点 | 任务被判定为完成或失败的时刻 |
| 未配置后果 | 对象长期保留,历史副本不断堆积 |
典型使用场景
- 定时任务持续产生对象,需要自动回收
- 数据导出与报表任务完成后不再需要保留对象
- 集群对象数量增长过快,需要治理历史任务
- 节省存储:失败副本的输出与日志占用可观
- 在自动化流程中避免手工清理步骤
配置与清理
配置与清理
spec:
ttlSecondsAfterFinished: 3600 # 完成后 1 小时自动清理
template:
spec:
restartPolicy: Never
containers:
- name: task
image: registry.example.com/task:3.1查看与手动清理
查看与手动清理
kubectl get jobs -A | grep -v Complete # 仍在运行的任务
kubectl get pods -A --field-selector status.phase=Succeeded | head -20 # 遗留成功副本
kubectl delete job batch-x # 手工清理单个任务
kubectl get job batch-x -o jsonpath='{.status.completionTime}' # 完成时间状态与处理
| 状态 | 含义 | 处理方式 |
|---|---|---|
| 完成 | 任务成功结束 | 按清理时长到期自动删除 |
| 失败 | 达到重试上限 | 同样适用清理规则,先确认是否需要排查 |
| 运行中 | 尚未结束 | 不受清理规则影响 |
| 长期保留 | 未配置清理 | 需要巡检或手工清理 |
清理是删除整个任务对象,包括它创建的副本。需要保留失败现场或输出的任务,应先把日志导出到日志系统,或把清理时长设置得足够长。
较老版本集群若未启用清理能力,字段配置后不会生效。配置前先确认控制器管理器具备该能力,否则会以为已清理而实际仍在堆积。