上云无忧 > 文档中心 > 腾讯云容器服务 - Pod 处于 CrashLoopBackOff 状态
容器服务 TKE
腾讯云容器服务 - Pod 处于 CrashLoopBackOff 状态

文档简介:
本文档介绍可能导致 Pod 处于 CrashLoopBackOff 状态的几种情形,以及如何通过排查步骤定位异常原因。请按照以下步骤依次进行排查,定位问题后恢复正确配置即可。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠
本文档介绍可能导致 Pod 处于 CrashLoopBackOff 状态的几种情形,以及如何通过排查步骤定位异常原因。请按照以下步骤依次进行排查,定位问题后恢复正确配置即可。

现象描述

Pod 处于 CrashLoopBackOff 状态,说明该 Pod 在正常启动过后异常退出过,此状态下 Pod 的 restartPolicy 如果不是 Never 就可能会被重启拉起,且 Pod 的 RestartCounts 通常大于0。可首先参考 通过 Exit Code 定位 Pod 异常退出原因 查看对应容器进程的退出状态码,缩小异常问题范围。

可能原因

容器进程主动退出
系统 OOM
cgroup OOM
节点内存碎片化
健康检查失败

排查步骤

检查容器进程是否主动退出

容器进程主动退出时,退出状态码通常在0 - 128之间,导致异常的原因可能是业务程序 Bug,也可能是其他原因。请参考 容器进程主动退出 进一步定位异常问题。

检查是否发生系统 OOM

问题分析

如果发生系统 OOM,Pod 中容器退出状态码为137,表示其被 SIGKILL 信号停止,同时内核将会出现以下报错信息。
		
Out of memory: Kill process ...
该异常是由于节点上部署了其他非 K8S 管理的进程消耗了较多的内存,或是 kubelet 的 --kube-reserved--system-reserved 所分配的内存太小,没有足够的空间运行其他非容器进程。
说明
节点上所有 Pod 的实际内存占用总量不会超过 /sys/fs/cgroup/memory/kubepods 中的 cgroup 值( cgroup = capacity - "kube-reserved" - "system-reserved")。通常情况下,如果预留空间设置合理,且节点上其他非容器进程(例如 kubelet、dockerd、kube-proxy 及 sshd 等)内存占用没有超过 kubelet 配置的预留空间,是不会发生系统 OOM 的。

解决方法

为确保不再发生此类问题,您可以根据实际需求对预留空间进行合理的调整。

检查是否发生 cgroup OOM

现象描述

如果是因 cgroup OOM 而停止的进程,可看到 Pod 事件下 ReasonOOMKilled,说明容器实际占用的内存已超过 limit,同时内核日志会报 Memory cgroup out of memory 错误信息。

解决方法

请根据需求调整 limit。

节点内存碎片化

如果节点出现内存碎片化严重、缺少大页内存问题,即使总体剩余内存较多,但仍会出现申请内存失败的情况。请参考 内存碎片化 进行异常定位及解决。

健康检查失败

请参考 Pod 健康检查失败 进一步定位异常问题。
相似文档
  • 故障现象: Pod 突然不断重启,期间有流量进入,这部分流量异常。 原因: 1. Pod 之前所在节点异常,重建漂移到了其它节点去启动。 2. Pod 重建后由于基础镜像中依赖的一个服务有问题导致启动较慢,因为同时配置了 ReadinessProbe 与 LivenessProbe,大概率是启动时所有健康检查都失败,达到 LivenessProbe 失败次数阈值,又被重启。
  • 本文档介绍可能导致容器进程主动退出的几种场景,以及如何通过排查步骤定位异常原因。请按照以下步骤依次进行排查,定位问题后恢复正确配置即可。
  • 本文向您介绍如何为数据盘设置文件系统卷标。 使用背景: NVMe 数据盘的盘符由 NVMe 盘的驱动生成,如果驱动加载顺序不一致可能会导致盘符变化。因此,由于操作系统和物理机的限制,云服务器 CVM 部分普通机型(如黑石、高 IO 型、高性能 HCC 等)挂载多块 NVMe 数据盘时,重启系统后盘符可能会错乱。更多内容可参考 Linux 云服务器重启后云硬盘未自动挂载。
  • 默认情况下腾讯云无法登录集群进行问题排障,如果您需要腾讯云售后协助进行运维排障,请参考以下步骤授予腾讯云运维权限。您有权随时吊销回收授予腾讯云的运维排障权限。
  • Cluster Autoscaler(CA)与基于监控指标的弹性伸缩的节点扩缩容有什么不同? Cluster Autoscaler 确保集群中的所有 Pod 都可调度,不管具体的负载;而基于监控指标的节点弹性伸缩在自动扩缩时不关心 Pod,可能会添加一个没有任何 Pod 的节点,或者删除一个有一些系统关键 Pod 的节点,例如 kube-dns。Kubernetes 不鼓励这种自动缩容机制,故 Cluster Autoscaler 与基于监控指标的弹性伸缩的节点互相冲突,请不要同时启用。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部