Kubernetes Pod 终止 - 退出代码 137

YYa*_*nth 11 linux kubernetes kubernetes-pod amazon-eks

我需要一些关于 k8s 1.14 和在其上运行 gitlab 管道的问题的建议。许多作业都抛出退出代码 137 错误,我发现这意味着容器突然终止。


集群信息:

Kubernetes 版本:1.14 正在使用的云:AWS EKS 节点:C5.4xLarge


深入挖掘后,我发现了以下日志:

**kubelet: I0114 03:37:08.639450**  4721 image_gc_manager.go:300] [imageGCManager]: Disk usage on image filesystem is at 95% which is over the high threshold (85%). Trying to free 3022784921 bytes down to the low threshold (80%).

**kubelet: E0114 03:37:08.653132**  4721 kubelet.go:1282] Image garbage collection failed once. Stats initialization may not have completed yet: failed to garbage collect required amount of images. Wanted to free 3022784921 bytes, but freed 0 bytes

**kubelet: W0114 03:37:23.240990**  4721 eviction_manager.go:397] eviction manager: timed out waiting for pods runner-u4zrz1by-project-12123209-concurrent-4zz892_gitlab-managed-apps(d9331870-367e-11ea-b638-0673fa95f662) to be cleaned up

**kubelet: W0114 00:15:51.106881**   4781 eviction_manager.go:333] eviction manager: attempting to reclaim ephemeral-storage

**kubelet: I0114 00:15:51.106907**   4781 container_gc.go:85] attempting to delete unused containers

**kubelet: I0114 00:15:51.116286**   4781 image_gc_manager.go:317] attempting to delete unused images

**kubelet: I0114 00:15:51.130499**   4781 eviction_manager.go:344] eviction manager: must evict pod(s) to reclaim ephemeral-storage 

**kubelet: I0114 00:15:51.130648**   4781 eviction_manager.go:362] eviction manager: pods ranked for eviction:

 1. runner-u4zrz1by-project-10310692-concurrent-1mqrmt_gitlab-managed-apps(d16238f0-3661-11ea-b638-0673fa95f662)
 2. runner-u4zrz1by-project-10310692-concurrent-0hnnlm_gitlab-managed-apps(d1017c51-3661-11ea-b638-0673fa95f662)

 3. runner-u4zrz1by-project-13074486-concurrent-0dlcxb_gitlab-managed-apps(63d78af9-3662-11ea-b638-0673fa95f662)

 4. prometheus-deployment-66885d86f-6j9vt_prometheus(da2788bb-3651-11ea-b638-0673fa95f662)

 5. nginx-ingress-controller-7dcc95dfbf-ld67q_ingress-nginx(6bf8d8e0-35ca-11ea-b638-0673fa95f662)
Run Code Online (Sandbox Code Playgroud)

然后 pod 被终止,导致退出代码 137s。

任何人都可以帮助我理解原因和克服这个问题的可能解决方案吗?

谢谢 :)

小智 21

137 意味着 k8s 由于某种原因杀死了容器(可能是它没有通过活性探测)

Cod 137 是 128 + 9(SIGKILL) 进程被外部信号杀死


小智 18

退出代码 137 并不一定意味着 OOMKilled。它表示容器收到 SIGKILL 失败(一些中断或“oom-killer”[OUT-OF-MEMORY])

如果 pod 被 OOMKilled,当你描述 pod 时你会看到下面的一行

      State:        Terminated
      Reason:       OOMKilled
Run Code Online (Sandbox Code Playgroud)

我见过类似的错误,但无法找出根本原因,对我们而言,原因提到: Error

  • 即使我遇到了同样的问题 - 最后状态:终止,原因:错误,退出代码:137 我们在哪里可以找到此中断的实际原因是什么? (2认同)

Chr*_*row 10

此错误代码的典型原因可能是系统内存不足或运行状况检查失败


VKa*_*atz 9

详细退出代码 137

  1. 它表示该进程被终止external signal
  2. 数字 137 是两个数字的和:128+x, # 其中 x 是发送到导致其终止的进程的信号号。
  3. 在示例中,x等于9,这是SIGKILL信号的编号,意味着进程被强行终止。

希望这能有更好的帮助。


YYa*_*nth 8

能够解决问题。

这些节点最初具有 20G 的 ebs 卷和 c5.4xlarge 实例类型。我将 ebs 增加到 50 和 100G,但这并没有帮助,因为我不断看到以下错误:

“图像文件系统上的磁盘使用率为 95%,超过了高阈值 (85%)。正在尝试将 3022784921 字节释放到低阈值 (80%)。”

然后,我将实例类型更改为 c5d.4xlarge,它具有 400GB 的缓存存储并提供 300GB 的 EBS。这解决了错误。

一些 gitlab 作业是针对一些 java 应用程序的,这些应用程序会占用大量缓存空间并写入大量日志。