代码的简化版本
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-name 容器名称),以便我能够选择最后写入的日志,直到容器处于事件状态。
但是回显消息不存在。 我的猜测是,一旦我们杀死容器或其他东西,日志就不会被写入。 有什么方法可以获取已杀死容器的日志或测试上述场景吗?
最佳答案
方法 1
如果您想从 pod POD_NAME 查看之前终止的容器的日志。 您可以使用以下带 -p 标志的命令
kubectl logs POD_NAME -c CONTAINER_NAME -p
您可以使用以下命令获取更多信息,例如选项和标志
kubectl logs --help
方法 2
确定终止消息的另一种方法是在 Pod 对象的 Status 字段中。
kubectl get pod $POD_NAME -o yaml
检查containerStatuses的字段lastState:
status:
conditions:
containerStatuses:
- containerID:
image: registry.access.redhat.com/rhel7:latest
imageID:
lastState: {}
state:
running:
这里有更多详细信息reading-a-termination-message
关于docker - 在 kubernetes 中获取已杀死的 docker 容器的日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54808573/