问题描述
我的 Go-based 自定义资源操作符在删除之前需要一些清理操作。它必须从 ZooKeeper 中删除特定的 znode。
在重新生成资源之前,不得执行这些操作。它们只能通过用户的删除命令来执行。因此,我不能使用普通的 prestop-hook。
我可以只在删除前执行 prestop 钩子吗?或者有没有其他方式让操作员在删除资源之前执行清理逻辑?
解决方法
我可以只在删除前执行 prestop 钩子吗?
这就是 preStop
钩子的全部目的。在容器终止之前立即执行预停止钩子。一旦有来自 API 的终止信号,Kubelet 就会运行 pre-stop 钩子,然后将 SIGTERM 信号发送到进程。
它的设计是在关闭之前执行任意操作,而不必在应用程序本身中实现这些操作。如果您运行某些无法修改代码的 3rd 方应用,这将特别有用。
现在调用终止 pod 并调用钩子可能是由于 API 请求、探测失败、资源争用等。
如需更多阅读,请访问:Container Lifecycle Hooks