小编Tin*_*you的帖子

即使未达到 Pod 限制,Pod 内的进程也被 OOMKilled

我们对整个 Kubernetes 世界有点陌生,但现在有许多服务在 GKE 中运行。然而,今天我们看到了一些奇怪的行为,其中一个运行在我们的一个 Pod 内的进程被杀死,即使 Pod 本身有足够的可用资源,并且没有接近其极限。

限制定义如下:

resources:
  requests:
    cpu: 100m
    memory: 500Mi
  limits:
    cpu: 1000m
    memory: 1500Mi
Run Code Online (Sandbox Code Playgroud)

在 pod 中,一个 Celery (Python) 正在运行,这个特殊的正在消耗一些相当长的运行任务。

在其中一项任务的运行过程中,celery 进程突然被杀死,似乎是 OOM 引起的。GKE 集群操作日志显示以下内容:

Memory cgroup out of memory: Kill process 613560 (celery) score 1959 or sacrifice child
Killed process 613560 (celery) total-vm:1764532kB, anon-rss:1481176kB, file-rss:13436kB, shmem-rss:0kB
Run Code Online (Sandbox Code Playgroud)

该时间段的资源图如下所示:

Pod 的 CPU 和内存使用率

可以清楚地看到,CPU 或内存使用量都没有接近 Pod 定义的限制,所以我们对为什么会发生 OOMKilling 感到困惑?进程本身被杀死而不是实际的 Pod 被杀死这一事实也有点困惑?

这种特殊的 OOM 是否真的发生在操作系统内部而不是在 Kubernetes 中?如果是这样 - 是否有解决此特定问题的解决方案?

kubernetes google-kubernetes-engine

5
推荐指数
1
解决办法
4866
查看次数