diff --git a/content/zh-cn/docs/concepts/workloads/controllers/ttlafterfinished.md b/content/zh-cn/docs/concepts/workloads/controllers/ttlafterfinished.md index 7887151b9a..afea6daecc 100644 --- a/content/zh-cn/docs/concepts/workloads/controllers/ttlafterfinished.md +++ b/content/zh-cn/docs/concepts/workloads/controllers/ttlafterfinished.md @@ -2,11 +2,17 @@ title: 已完成 Job 的自动清理 content_type: concept weight: 70 +description: >- + 一种用于清理已完成执行的旧 Job 的 TTL 机制。 --- @@ -14,101 +20,123 @@ weight: 70 {{< feature-state for_k8s_version="v1.23" state="stable" >}} -TTL-after-finished {{}} 提供了一种 TTL 机制来限制已完成执行的资源对象的生命周期。 -TTL 控制器目前只处理 {{< glossary_tooltip text="Job" term_id="job" >}}。 +When your Job has finished, it's useful to keep that Job in the API (and not immediately delete the Job) +so that you can tell whether the Job succeeded or failed. +Kubernetes' TTL-after-finished {{}} provides a +TTL (time to live) mechanism to limit the lifetime of Job objects that +have finished execution. +--> +当你的 Job 已结束时,将 Job 保留在 API 中(而不是立即删除 Job)很有用, +这样你就可以判断 Job 是成功还是失败。 + +Kubernetes TTL-after-finished {{}}提供了一种 +TTL 机制来限制已完成执行的 Job 对象的生命期。 -## TTL-after-finished 控制器 +## 清理已完成的 Job {#cleanup-for-finished-jobs} -TTL-after-finished 控制器只支持 Job。集群操作员可以通过指定 Job 的 `.spec.ttlSecondsAfterFinished` -字段来自动清理已结束的作业(`Complete` 或 `Failed`),如 -[示例](/zh-cn/docs/concepts/workloads/controllers/job/#clean-up-finished-jobs-automatically) -所示。 +TTL-after-finished 控制器只支持 Job。你可以通过指定 Job 的 `.spec.ttlSecondsAfterFinished` +字段来自动清理已结束的 Job(`Complete` 或 `Failed`), +如[示例](/zh-cn/docs/concepts/workloads/controllers/job/#clean-up-finished-jobs-automatically)所示。 -TTL-after-finished 控制器假设作业能在执行完成后的 TTL 秒内被清理,也就是当 TTL 过期后。 -当 TTL 控制器清理作业时,它将做级联删除操作,即删除资源对象的同时也删除其依赖对象。 -注意,当资源被删除时,由该资源的生命周期保证其终结器(Finalizers)等被执行。 +TTL-after-finished 控制器假设 Job 能在执行完成后的 TTL 秒内被清理。一旦 Job +的状态条件发生变化表明该 Job 是 `Complete` 或 `Failed`,计时器就会启动;一旦 TTL 已过期,该 Job +就能被[级联删除](/zh-cn/docs/concepts/architecture/garbage-collection/#cascading-deletion)。 +当 TTL 控制器清理作业时,它将做级联删除操作,即删除 Job 的同时也删除其依赖对象。 -可以随时设置 TTL 秒。以下是设置 Job 的 `.spec.ttlSecondsAfterFinished` 字段的一些示例: +Kubernetes 尊重 Job 对象的生命周期保证,例如等待 +[Finalizer](/zh-cn/docs/concepts/overview/working-with-objects/finalizers/)。 + +你可以随时设置 TTL 秒。以下是设置 Job 的 `.spec.ttlSecondsAfterFinished` 字段的一些示例: +* 在 Job 清单(manifest)中指定此字段,以便 Job 在完成后的某个时间被自动清理。 +* 手动设置现有的、已完成的 Job 的此字段,以便这些 Job 可被清理。 +* 在创建 Job 时使用[修改性质的准入 Webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) + 动态设置该字段。集群管理员可以使用它对已完成的作业强制执行 TTL 策略。 + -* 在作业清单(manifest)中指定此字段,以便 Job 在完成后的某个时间被自动清除。 -* 将此字段设置为现有的、已完成的作业,以采用此新功能。 -* 在创建作业时使用 [mutating admission webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) - 动态设置该字段。集群管理员可以使用它对完成的作业强制执行 TTL 策略。 -* 使用 [mutating admission webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) - 在作业完成后动态设置该字段,并根据作业状态、标签等选择不同的 TTL 值。 +* 使用[修改性质的准入 Webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) + 在 Job 完成后动态设置该字段,并根据 Job 状态、标签等选择不同的 TTL 值。 + 对于这种情况,Webhook 需要检测 Job 的 `.status` 变化,并且仅在 Job 被标记为已完成时设置 TTL。 +* 编写你自己的控制器来管理与特定{{< glossary_tooltip term_id="selector" text="选择算符" >}}匹配的 + Job 的清理 TTL。 -## 警告 +## 警告 {#caveats} -### 更新 TTL 秒数 +### 更新已完成 Job 的 TTL {#updating-ttl-for-finished-jobs} -请注意,在创建 Job 或已经执行结束后,仍可以修改其 TTL 周期,例如 Job 的 +在创建 Job 或已经执行结束后,你仍可以修改其 TTL 周期,例如 Job 的 `.spec.ttlSecondsAfterFinished` 字段。 -但是一旦 Job 变为可被删除状态(当其 TTL 已过期时),即使你通过 API 增加其 TTL -时长得到了成功的响应,系统也不保证 Job 将被保留。 +如果你在当前 `ttlSecondsAfterFinished` 时长已过期后延长 TTL 周期, +即使延长 TTL 的更新得到了成功的 API 响应,Kubernetes 也不保证保留此 Job, ### 时间偏差 {#time-skew} -由于 TTL-after-finished 控制器使用存储在 Kubernetes 资源中的时间戳来确定 TTL 是否已过期, -因此该功能对集群中的时间偏差很敏感,这可能导致 TTL-after-finished 控制器在错误的时间清理资源对象。 +由于 TTL-after-finished 控制器使用存储在 Kubernetes Job 中的时间戳来确定 TTL 是否已过期, +因此该功能对集群中的时间偏差很敏感,这可能导致控制平面在错误的时间清理 Job 对象。 -* [自动清理 Job](/zh-cn/docs/concepts/workloads/controllers/job/#clean-up-finished-jobs-automatically) -* [设计文档](https://github.com/kubernetes/enhancements/blob/master/keps/sig-apps/592-ttl-after-finish/README.md) +* Read [Clean up Jobs automatically](/docs/concepts/workloads/controllers/job/#clean-up-finished-jobs-automatically) + +* Refer to the [Kubernetes Enhancement Proposal](https://github.com/kubernetes/enhancements/blob/master/keps/sig-apps/592-ttl-after-finish/README.md) + (KEP) for adding this mechanism. +--> +* 阅读[自动清理 Job](/zh-cn/docs/concepts/workloads/controllers/job/#clean-up-finished-jobs-automatically) + +* 参阅 [Kubernetes 增强提案](https://github.com/kubernetes/enhancements/blob/master/keps/sig-apps/592-ttl-after-finish/README.md) + (KEP) 了解此机制的演进过程。