Kubernetes Pod意外重启

时间:2019-11-05 04:23:39

标签: docker kubernetes dockerfile google-kubernetes-engine kubernetes-pod

我正在生产环境中运行Python应用程序,但是我的pod在生产环境中经常重新启动。在暂存环境中不会发生这种情况。

所以我认为这可能是CPU和内存限制问题。我也更新了。

进一步调试,我得到了137退出代码。

要进行更多调试,我进入Kubernetes节点并检查容器。

使用的命令:docker inspect < container id >

此处输出:

 {
    "Id": "a0f18cd48fb4bba66ef128581992e919c4ddba5e13d8b6a535a9cff6e1494fa6",
    "Created": "2019-11-04T12:47:14.929891668Z",
    "Path": "/bin/sh",
    "Args": [
        "-c",
        "python3 run.py"
    ],
    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 137,
        "Error": "",
        "StartedAt": "2019-11-04T12:47:21.108670992Z",
        "FinishedAt": "2019-11-05T00:01:30.184225387Z"
  },

OOMKilled是错误的,因此我认为这不是问题。

使用GKE主版本:1.13.10-gke.0

2 个答案:

答案 0 :(得分:1)

从技术上讲,这137项均意味着您的进程由于SIGKILL而被终止。不幸的是,这没有足够的信息来知道它的来源。最重要的是,诸如audited或Falco之类的工具可以通过记录这类系统调用来帮助收集数据,或者至少使您与之接近。

答案 1 :(得分:1)

退出代码137是docker exit code,它告诉我们该容器已被OOM杀手杀死。这并不意味着容器本身已达到内存限制或没有足够的内存来运行。由于操作系统级别的OOM杀手正在杀死应用程序,因此pod和docker不会为容器本身注册OOM,因为它不一定达到内存限制。

以上链接的文档详细介绍了如何调试错误137,尽管您还可以检查节点指标的内存使用情况或检查节点日志以查看OOM是否曾经在操作系统级别注册。

如果这是常见问题,请确保您的python容器包含限制,并确保集群中的其他容器都设置了适当的请求和限制。