我有一个问题。 清单文件中有 preStop 选项,并且发生了 OOMKilled。 pod 已重新启动,但未创建堆转储。
生命周期: 停止前: 执行: 命令:[“/tmp/preStop.sh”]
heapdump 在我手动终止 pod 时工作。
所以我想知道是不是pod重启了,preStop应该不会执行吧?
我想当pod重新启动时,首先发送TermSignal给应用程序并执行preStop并终止并再次启动pod。我错了吗?
谢谢 最好的问候。
pod重启时,先发送TermSignal给应用 并执行 preStop 并终止并再次启动 pod。我错了吗?
根据官方文档
钩子不会从信号异步执行到 停止容器;钩子必须在 TERM信号可以发送PreStop
如果
钩子在执行过程中挂起,Pod 的阶段将是 终止并保持在那里,直到 Pod 在其PreStop
到期后被杀死。此宽限期适用于 PreStop 挂钩执行和 容器正常停止。terminationGracePeriodSeconds
希望以上信息对您有用
这是 OOMKilled pod 不调用 preStop 挂钩的已知行为。
正如 Chanpreet08(GitHub 用户)所解释的
K8 如果它想终止 pod,则发出 SIGTERM 信号,但以防万一 OOM 时,它将 SIGKILL 传递给 pod,立即杀死主 处理并最终终止 pod 而无需等待预停止 执行。所以在 OOM 的情况下,prestop 不会执行。