Finalizers
Finalizer(终结器) 是带有命名空间的键,告诉 Kubernetes 等到特定的条件被满足后,再完全删除被标记为删除的资源。Finalizer 提醒控制器清理被删除对象所拥有的资源,可用于控制资源的垃圾收集——例如在删除目标资源前清理相关 API 资源或基础设施。
官方文档参考
| 文档 | 语言 | 链接 |
|---|---|---|
| Finalizers(终结器)概念页 | 中文 | https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/finalizers/ |
Finalizer 如何工作
当你请求删除一个带 Finalizer 的对象时,删除并不会立即完成,而是经历以下流程:
- Kubernetes API 通过填充
.metadata.deletionTimestamp来标记对象为待删除,并返回202状态码(HTTP "已接受"),使对象进入只读状态; - 控制平面或其他组件执行 Finalizer 所定义的清理行动,此时目标对象一直处于终止中(Terminating) 状态;
- 清理完成后,控制器删除目标对象上的 Finalizer;
- 当
metadata.finalizers字段变为空时,Kubernetes 才认为删除完成,并真正删除该对象。
这个流程可以用下表概括:
| 阶段 | API 服务器行为 | 对象状态 |
|---|---|---|
| 发起删除 | 填充 deletionTimestamp,返回 202,对象进入只读 | Terminating |
| 清理中 |