我的广告连播已获得OOM杀死的状态,但没有被杀死。为什么?

时间:2019-10-30 16:04:31

标签: kubernetes yaml containers

我已经为CronJob配置了带有资源请求和限制的YAML文件(apiVersion:batch / v1beta1),该pod已成功实例化,并且可以正常工作,但是当终止时,我将其标记为OOMKilled。

我的pod正在使用Docker容器,该容器以bash脚本启动,该bash脚本调用了一些Java工具(例如maven)。我试图像这样设置一个MAVEN_OPTS和JAVAOPTS:

        env:
          - name: JAVA_OPTS
            value: "-Xms256M -Xmx1280M"
          - name: MAVEN_OPTS
            value: "-Xms256M -Xmx1280M"

这些值低于YAML中配置的限制的值。

我希望pod停止在完整状态,因为ENTRY_POINT bash脚本的最后回显显示在pod的日志中,但是我收到了OOMKilled。

1 个答案:

答案 0 :(得分:1)

当容器指定了资源请求时,调度程序可以更好地决定将Pod放置在哪些节点上。但请记住:计算资源(CPU /内存)是为容器而不是容器配置的。

如果Pod容器被OOM杀死,则the Pod is not evicted。基础容器由kubelet根据其容器RestartPolicy重新启动。

您的OOMKill容器being terminated并不暗示该广告连播处于Completed/Error状态(除非您使用的是RestartPolicy: Never)。

如果在吊舱上执行kubectl describe,则容器将处于Running状态,但是您可以在Last State中找到上一次重启的原因。另外,您可以检查它重新启动了多少次:

State:          Running
  Started:      Wed, 27 Feb 2019 10:29:09 +0000
Last State:     Terminated
  Reason:       OOMKilled
  Exit Code:    137
  Started:      Wed, 27 Feb 2019 06:27:39 +0000
  Finished:     Wed, 27 Feb 2019 10:29:08 +0000
Restart Count:  5