在 kubernetes 中获取已杀死的 docker 容器的日志

use*_*571 5 docker kubernetes

代码的简化版本

trap 'rm /tmp/not_done; echo "trap command got executed"; sleep 10' SIGTERM

wait_sigterm() {

  touch /tmp/not_done
  while [ -f /tmp/not_done ]
  do
      sleep 60 &
      wait $!  
  done
}

wait_sigterm
Run Code Online (Sandbox Code Playgroud)

如何确保 trap 命令已执行?

一种方法是我可以访问被杀死的容器的日志并检查我的回显消息。

我尝试在 while 循环中获取日志(kubectl -n 命名空间名称日志 pod 名称容器名称),以便我能够选择最后写入的日志,直到容器处于活动状态。

但回声消息不存在。我的猜测是,一旦我们杀死容器或其他东西,日志就不会被写入。有什么方法可以获取已杀死容器的日志或测试上述场景吗?

Sur*_*noi 5

方法一

如果您想从 pod POD_NAME 查看之前终止的容器的日志。您可以使用以下带 -p 标志的命令

kubectl logs POD_NAME -c CONTAINER_NAME -p
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令获取更多信息,例如选项和标志

kubectl logs --help
Run Code Online (Sandbox Code Playgroud)

方法2

另一种确定终止消息的方法是在 Pod 对象的 Status 字段中。

kubectl get pod $POD_NAME -o yaml

检查containerStatuseslastState字段:

status:
  conditions:

  containerStatuses:
  - containerID: 
    image: registry.access.redhat.com/rhel7:latest
    imageID:
    lastState: {}

    state:
      running:

Run Code Online (Sandbox Code Playgroud)

这是阅读终止消息的更多详细信息