pod 重启时 kubernetes 没有创建 heapdump

问题描述 投票:0回答:2

我有一个问题。 清单文件中有 preStop 选项,并且发生了 OOMKilled。 pod 已重新启动,但未创建堆转储。

生命周期: 停止前: 执行: 命令:[“/tmp/preStop.sh”]

heapdump 在我手动终止 pod 时工作。

所以我想知道是不是pod重启了,preStop应该不会执行吧?

我想当pod重新启动时,首先发送TermSignal给应用程序并执行preStop并终止并再次启动pod。我错了吗?

谢谢 最好的问候。

kubernetes restart heap-dump
2个回答
1
投票

pod重启时,先发送TermSignal给应用 并执行 preStop 并终止并再次启动 pod。我错了吗?

根据官方文档

PreStop
钩子不会从信号异步执行到 停止容器;钩子必须在 TERM信号可以发送

如果

PreStop
钩子在执行过程中挂起,Pod 的阶段将是 终止并保持在那里,直到 Pod 在其
terminationGracePeriodSeconds
到期后被杀死。此宽限期适用于 PreStop 挂钩执行和 容器正常停止。

希望以上信息对您有用


0
投票

这是 OOMKilled pod 不调用 preStop 挂钩的已知行为。

正如 Chanpreet08(GitHub 用户)所解释的

K8 如果它想终止 pod,则发出 SIGTERM 信号,但以防万一 OOM 时,它将 SIGKILL 传递给 pod,立即杀死主 处理并最终终止 pod 而无需等待预停止 执行。所以在 OOM 的情况下,prestop 不会执行。

https://github.com/kubernetes/kubernetes/issues/93818

© www.soinside.com 2019 - 2024. All rights reserved.