【问题标题】:My pod gets OOM-killed status, but doesn't get killed. Why?我的 pod 获得 OOM-killed 状态,但没有被杀死。为什么?
【发布时间】:2020-02-25 23:52:26
【问题描述】:

我已经使用带有资源请求和限制的 YAML 文件(apiVersion:batch/v1beta1)配置了一个 CronJob,该 pod 已成功实例化并一直工作到其自然结束,但当终止时我看到它标记为 OOMKilled。

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

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

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

我预计 pod 会在完整状态下停止,因为我的 ENTRY_POINT bash 脚本的最后一个回显显示在 pod 的日志中,但我得到了 OOMKilled。

【问题讨论】:

  • 似乎程序在达到 k8s 资源限制之前被容器操作系统 oom-killed,conainer 自行终止,因此 k8s 认为它​​已完成

标签: kubernetes yaml containers


【解决方案1】:

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

如果 Pod 容器被 OOM 杀死,the Pod is not evicted。底层容器由kubelet基于其RestartPolicy重启。

OOMKill 的容器 being terminated 并不意味着 pod 将处于 Completed/Error 状态(除非您使用的是 RestartPolicy: Never)。

如果你在你的 pod 上执行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

【讨论】:

  • 我写过 pod 但我说的是容器是的。无论如何,我的容器没有重新启动,也没有被杀死,描述它有 0 个重新启动计数并且容器的 STDOUT 没有建议任何杀死我的重新启动策略是:restartPolicy: OnFailure
猜你喜欢
  • 2021-11-21
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
相关资源
最近更新 更多