k8s调用服务异常cannot allocate memory

运行节点环境

8C 64G的节点是个虚拟机,CentOS7.9的系统里面装了k8s的节点。

k8s中启动服务时异常

bash 复制代码
unable to ensure pod container exists: failed to create container for [kubepods burstable pod482364c3-d6e0-40ab-b594-15d6a806ac74] :
mkdir /sys/fs/cgroup/memory/kubepods/burstable/pod482364c3-d6e0-40ab-b594-15d6a806ac74:
cannot allocate memory

从该节点上看可分配内存只用到了一半,这种异常在资源比较紧时经常出现,其实与节点或宿主机硬件资源有关,比如CPU和内存条比较老,因为同等核数和内存的新服务器即使用90%大概率不会出现这种情况。

但还是查了下资料提示是节点内存限制这块的Limit 耗尽 (97%),服务启动需要2G空间,所以不够。

bash 复制代码
内存限制: 61600 / 63544 MiB (97%)
内存请求: 47070 / 63544 MiB (74%)
实际内存: 30.53 / 62.06 GiB (49%)

原因链:

  1. 节点上 Pod 的 memory limits 总和已接近节点 Allocatable 内存上限 (97%)
  2. Kubelet 在创建 sandbox 容器时,需要为容器创建 cgroup 目录并设置内存限制
  3. cgroup 限制无法分配更多内存 → mkdir ... cannot allocate memory
  4. 容器创建失败 → Pod 无法启动

为什么实际内存只用 49%,但 limit 97%?

K8s 的 Limit 是预留配额,不是实时使用量;大量 Pod 设置了高 memory limit 但实际未完全使用,一旦这些 Pod 突然增长使用内存,节点可能 OOM。

解决方案

释放 Limit 配额:调低部分 Pod 的 memory limit,或驱逐不需要的 Pod。

或者重启节点,如果是测试环境。

相关推荐
螺蛳粉 螺蛳粉11 小时前
第 02 篇:镜像分层与 containerd 2.x 实战:SystemdCgroup 与 pause 镜像配置踩坑(底座认知 02)
docker·云原生·容器·kubernetes·etcd·containerd·kube-apiserver
小白的码BUG之路14 小时前
K8s -- 搭建过程中经常遇到的问题
云原生·容器·kubernetes
螺蛳粉 螺蛳粉15 小时前
第 03 篇:为什么 K8s 的最小调度单元是 Pod 而不是容器:pause 容器与边车模式(底座认知 03)
docker·云原生·容器·kubernetes·etcd·运维排障·kube-apiserver
艾伦_耶格宇15 小时前
【kubernetes - 1.28版本】-9 K8S-dashbord可视化界面
云原生·容器·kubernetes
小白的码BUG之路15 小时前
K8S -- 下载安装dashboard
k8s
无人生还别怕1 天前
如何搭建k8s服务(containerd部署)
linux·云原生·容器·kubernetes·openanolisos
fb_123451 天前
从探针到权限:一篇吃透 Kubernetes 健康检查、RBAC 认证授权与 Dashboard 可视化管理
云原生·容器·kubernetes
mengge.cloud1 天前
10-28-Kubernetes健康检查认证授权与Dashboard
云原生·容器·kubernetes
SatanII2 天前
Kubernetes 认证与授权详解:守护集群API访问安全
安全·贪心算法·kubernetes
闲云野鹤在人间2 天前
头秃修炼手册:StorageClass+StatefulSet+ETCD 全套渡劫笔记
linux·数据库·笔记·云原生·kubernetes·etcd