kubernetes 如何监控`preStop`命令的执行?

p5fdfcr1  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(4)|浏览(135)

我正在尝试使用pod的生命周期事件,问题是preStop的命令根本不运行,有没有办法监控它是否启动了?容器的日志为空。

lifecycle:
        preStop:
          exec:
            command: [ "/bin/sh", "-c", "/clean.sh" ]

字符串

xdnvmnnf

xdnvmnnf1#

我只是想为preStop钩子添加,pod可能被终止,并且对describe不可用。
查看preStop错误日志的另一种方法是通过kubectl events:

kubectl get events | grep FailedPreStopHook

字符串
示例如下:

kubectl get events | grep FailedPreStopHook                                    
5m33s       Warning   FailedPreStopHook   pod/pod-name-59988c4675-79q4p                              
Exec lifecycle hook ([/bin/kill -s SIGQUIT 1]) for Container "container_name" in Pod "pod-name-59988c4675-79q4p_namespace(556dc3d2-9da4-11ea-bca3-00163e01eb9a)" failed - error: 
command '/bin/kill -s SIGQUIT 1' exited with 1: kill: can't kill pid 1: Operation not permitted

bqujaahr

bqujaahr2#

我在寻找一些东西,所以我添加了一些日志记录,以帮助查看pod的stdout/stderr日志中的脚本日志。
所以对我来说,这种方法帮助了我

  • 将日志写入集中式日志记录系统(帮助我在datadog中检查日志)
  • 验证脚本是否正确执行
lifecycle:
            preStop:
              exec:
                command: ["/bin/sh", "-c", "/clean.sh > /proc/1/fd/1"]

字符串
并且能够验证日志

kubectl get pods

kubectl logs -f my_stohook_pod


/proc/PID/fd/1将帮助我们重定向container主进程的脚本日志stdout/stderr.

arknldoa

arknldoa3#

来自https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#debugging-hook-handlers
Hook处理程序的日志不会在Pod事件中暴露。如果处理程序由于某种原因失败,它会广播一个事件。[...]对于**PreStop,这是FailedPreStopHook**事件。您可以通过运行kubectl describe pod <pod_name>来查看这些事件。下面是运行此命令的一些事件输出示例[...]

nwlqm0z1

nwlqm0z14#

我在kubelet日志中发现了preStop hook失败的日志,不知道是默认设置显示preStop hook日志,还是需要增加kubelet日志的verbosity。FWIW,我的kubelet配置了--v=2 verbosity。

相关问题