已完成资源的 TTL 控制器

    TTL 控制器提供了一种 TTL 机制来限制已完成执行的资源对象的生命周期。 TTL 控制器目前只处理 , 可能以后会扩展以处理将完成执行的其他资源,例如 Pod 和自定义资源。

    Alpha 免责声明:此功能目前是 alpha 版,并且可以通过 kube-apiserverkube-controller-manager 上的 特性门控 启用。

    TTL 控制器假设资源能在执行完成后的 TTL 秒内被清理,也就是当 TTL 过期后。 当 TTL 控制器清理资源时,它将做级联删除操作,即删除资源对象的同时也删除其依赖对象。 注意,当资源被删除时,由该资源的生命周期保证其终结器(Finalizers)等被执行。

    可以随时设置 TTL 秒。以下是设置 Job 的 .spec.ttlSecondsAfterFinished 字段的一些示例:

    • 在资源清单(manifest)中指定此字段,以便 Job 在完成后的某个时间被自动清除。
    • 将此字段设置为现有的、已完成的资源,以采用此新功能。
    • 使用 在资源完成后动态设置该字段,并根据资源状态、标签等选择不同的 TTL 值。

    时间偏差

    由于 TTL 控制器使用存储在 Kubernetes 资源中的时间戳来确定 TTL 是否已过期, 因此该功能对集群中的时间偏差很敏感,这可能导致 TTL 控制器在错误的时间清理资源对象。

    在 Kubernetes 中,需要在所有节点上运行 NTP(参见 #6159) 以避免时间偏差。时钟并不总是如此正确,但差异应该很小。 设置非零 TTL 时请注意避免这种风险。