如何监视`preStop`命令的执行?

tse*_*tse 6 kubernetes

我正在尝试使用pod的生命周期事件。问题是from命令preStop根本没有运行。有什么方法可以监视它是否已启动?容器的日志为空。

      lifecycle:
        preStop:
          exec:
            command: [ "/bin/sh", "-c", "/clean.sh" ]
Run Code Online (Sandbox Code Playgroud)

Adi*_*iii 7

我正在寻找一些东西,所以我添加了一些日志记录,以帮助在 pod 的 stdout/stderr 日志中查看脚本的日志。

所以对我来说,这种方法对我有帮助

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

Run Code Online (Sandbox Code Playgroud)

并能够验证日志

kubectl get pods

kubectl logs -f my_stohook_pod

Run Code Online (Sandbox Code Playgroud)

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

  • 奇迹般有效!我还添加了“2>&1”以将 stderr 重定向到 stdout (2认同)

Dav*_*mas 5

我只是想添加挂钩preStop,pod 可能会被终止并且无法用于describe.

查看preStop错误日志的另一种方法是通过 kubectl events:

kubectl get events | grep FailedPreStopHook
Run Code Online (Sandbox Code Playgroud)

例子:

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
Run Code Online (Sandbox Code Playgroud)


Jan*_*art 0

来自https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#debugging-hook-handlers

Hook 处理程序的日志不会在 Pod 事件中公开。如果处理程序由于某种原因失败,它会广播一个事件。[...] 对于PreStop,这就是FailedPreStopHook事件。您可以通过运行来查看这些事件kubectl describe pod <pod_name>。以下是运行此命令的事件的一些示例输出[...]