代码的简化版本
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
如何确定trap命令已执行?
一种方法是,我是否可以访问被终止容器的日志并检查我的回显消息。
我尝试在while循环中获取日志(kubectl -n名称空间名称日志pod-名称容器名称),这样我就可以选择最后写入的日志,直到容器还活着。
但是没有回显消息。 我的猜测是,一旦我们杀死容器或其他东西,日志就不会被写入。 有什么方法可以获取被杀死的容器的日志或测试上述情况?
答案 0 :(得分:4)
方法1
如果要从POD POD_NAME中检出先前终止的容器的日志。 您可以将以下命令与-p标志一起使用
kubectl logs POD_NAME -c CONTAINER_NAME -p
您可以使用以下命令
获得更多信息,例如选项和标志kubectl logs --help
方法2
确定终止消息的另一种方法是在Pod对象的“状态”字段中。
kubectl get pod $POD_NAME -o yaml
检查 containerStatuss 的字段 lastState :
status:
conditions:
containerStatuses:
- containerID:
image: registry.access.redhat.com/rhel7:latest
imageID:
lastState: {}
state:
running:
这里有更多详细信息reading-a-termination-message
答案 1 :(得分:0)
要确定容器吊舱的最后终止状态,可以使用-o go-template
来获取它:
kubectl get pod $POD-NAME -n $NAMESPACE -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}'
例如,在由于Jenkins节点上的内存不足而导致的容器终止时,我得到了:
容器名称:jenkins-node
最后状态:map [terminated:map [containerID:docker:// ac5df0fb9e213839758f9e7ecd77a73e80a1f59309d725145ca192d7350f0014 退出代码:137已完成时间:2020-11-25T06:50:50Z原因:OOM终止 开始于:2020-11-18T13:58:49Z]]