【问题标题】:How to track Kubernetes OOMKilled termination messages?如何跟踪 Kubernetes OOMKilled 终止消息?
【发布时间】:2022-01-25 18:46:04
【问题描述】:

当一个 Pod 被驱逐时,我应该在容器文件系统内的 /dev/termination-log(或在 terminationMessagePath 属性中定义的其他路径)找到有关驱逐的消息。

我正在尝试跟踪 OOMKilled 事件,但在 OOMKilled 发生并重新启动 Pod 后,/dev/termination-log 为空。
我尝试将terminationMessagePolicy 属性设置为FallbackToLogsOnError,希望在容器日志中找到消息,但我没有找到任何关于 OOMKilled 的信息。

通过执行kubectl describe pod podname我可以发现终止原因是OOMKilled,但我希望能够跟踪此事件以便将其与fluentd和logstash集成。

我们的 Kubernetes 集群版本是 v1.9.0,它在本地运行。安装是在 CentOS 7 上使用 kubeadm 完成的。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您可以 ssh 到 pod 正在运行的机器并执行 journalctl -u kubelet

    【讨论】:

    • 感谢您的回答。通过阅读 kubelet 单元的日志,我可以看到容器已重新启动,但我无法确定原因:Feb 23 11:10:00 kbnhml01 kubelet[1728]: I0223 11:10:00.973333 1728 kuberuntime_manager.go:514] Container {APP DETAILS IN JSON} is dead, but RestartPolicy says that we should restart it.
    • 因为它是 OOMKilled,你可以在本地运行你的 docker 容器并监控堆和内存使用情况,以确保没有内存泄漏,或者你可以增加 kube 规范中指定的内存限制,看看它是否会解决问题。
    【解决方案2】:

    我使用的方式是在节点上寻找 dmesg 并从那里跟踪事件

    【讨论】:

      【解决方案3】:

      它可能不会返回错误代码,但它肯定会显示更多详细信息。

      您可以使用kubectl logs --previous 检索以前的日志 容器的实例化。如果您的 pod 有多个容器, 通过附加一个指定要访问的容器日志 容器名称添加到命令中。

      来自https://kubernetes.io/docs/concepts/cluster-administration/logging/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 2018-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-15
        • 1970-01-01
        相关资源
        最近更新 更多