我在谷歌容器引擎中有一个单节点 kubernetes 集群可以玩。
现在有两次,我在其中托管的一个小型个人网站已经离线了几分钟。当我查看容器的日志时,我看到最近完成了正常的启动顺序,所以我假设容器死亡(或被杀死?)并重新启动。
我怎样才能弄清楚发生这种情况的方式和原因?
有没有办法在容器意外启动/停止时获得警报?
我在谷歌容器引擎中有一个单节点 kubernetes 集群可以玩。
现在有两次,我在其中托管的一个小型个人网站已经离线了几分钟。当我查看容器的日志时,我看到最近完成了正常的启动顺序,所以我假设容器死亡(或被杀死?)并重新启动。
我怎样才能弄清楚发生这种情况的方式和原因?
有没有办法在容器意外启动/停止时获得警报?
您可以使用以下命令查看容器的上次重启日志:
如 Sreekanth 所述,kubectl get pods 应该显示重启次数,但您也可以运行
它将向您显示 kubelet 发送到 apiserver 的有关 pod 的生命周期事件的事件。
您还可以将最终消息写入 /dev/termination-log,这将按照文档中的说明显示。
除了前面的答案,另一个帮助我找到错误的命令是:
kubectl get event [--namespace=my-namespace]
它还列出了来自 Pod、Jobs、Nodes 的事件
我按照以下步骤定义失败的原因:
kubectl get pods 实际上会列出容器的任何重新启动,describe 命令也会有所帮助,因为它会列出与 pod 关联的所有事件。
可以在此处配置 Liveness probes 和 readiness probes 以便更好地处理 检查
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
此外,可以将钩子配置为在容器生命周期中的特定点在容器中使用 检查here
https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/
重新启动时
kubectl describe pod your-pod-name
寻找这样的部分:
上面的解释如下:
Wed, 23 Jun 2021 23:46:52 +1000
在 开始后终止Wed, 23 Jun 2021 23:46:48 +1000
,现在正在运行并准备就绪,上次启动时间为Wed, 23 Jun 2021 23:52:05 +1000
拉取请求现已合并到 kubernetes 1.22 里程碑中,以将
LAST RESTART
列添加到 中kubectl get pods
,并且在发布后将可用 - 请参见此处。 https://github.com/kubernetes/kubernetes/pull/100142要查看您当前的版本 -
kubernetes version
(1.21 是截至 2021 年 6 月 28 日的最新版本)
如果重新启动
kubectl get po [your-pod-name]
RESTARTS
如果列 中有任何数字,则 Pod 在某个阶段重新启动为什么重启
kubectl describe pod [your-pod-name]
将显示一个Last State
给你一个高水平的指示。要查看 pod 在重新启动之前发生了什么,请使用kubectl logs your-pod-name --previous
. 您可以将其通过管道传输到文件以进行检查,例如kubectl logs your-pod-name --previous > pod_previous_log.txt
(另见上文“重新启动时”)