记录一次 k8s 节点内存不足的排查过程

背景:前端服务一直报404,查看k8s日志,没发现报错,但是发现pods多次重启。

排查过程:

  1. 查看pods日志,发现日志进不去。
bash 复制代码
kubectrl logs -f -n weave pod-name --tail 100
  1. 查看pod describe
bash 复制代码
kubectl describe po -n weave senseweave-capability-gateway-6c5485f7bf-xxxx
  • Exit Code 为 137:通常表示该容器被 Linux OOM(Out-of-Memory)杀手终止。这通常发生在 Pod 超过了内存限制,或者运行该 Pod 的节点内存不足时。
  • Restart Count 为2,表示最近pod重启了2次
  • 当前pods没有指定 limit 资源

    原因分析:如果pod不指定 limit, 多个pod间会存在资源争抢,并且不指定资源的pod,在oom的时候,会优先被 Terminal 掉。
  1. 查看当前节点的内存使用情况
bash 复制代码
 kubectl top nodes --no-headers | sort -k4 -nr
 # 解释:
 #  --no-headers 不显示表头,
 #  sort -k4 -nr 按照第四列降序排序
 #    -n 按照数值排序
 #    -r 反向排序

23-8 节点的内存已经快满了。

pods 是通过 deployment 部署的,多个节点都有亲和性标签,但是 pod 还是部署到了 23-8 节点上。

分析原因可能是,不指定 limit 导致的

解决办法:

deployment 指定 limit 资源大小,重启 pods 。

相关推荐
maomao大哥闯天下2 小时前
K8s如何实现滚动更新、健康检查与探测机制
docker·容器·kubernetes
张忠琳4 小时前
【kubernetes v1.21】(一)Kubernetes 总览架构深度分析
云原生·架构·kubernetes
maomao大哥闯天下5 小时前
K8s对象deployment、job、service应用详解
java·容器·kubernetes
IT策士5 小时前
第 20 篇 搭建 Kubernetes 实验环境:Minikube 与 kubectl
云原生·容器·kubernetes
JackSparrow4146 小时前
使用Ansible批量管理+更新产品环境服务器配置
运维·服务器·ci/cd·kubernetes·自动化·ansible·sre
小哈里8 小时前
【K8S】云原生时代的GitOps最佳实践 —— ArgoCD
云原生·kubernetes·云计算·argocd·基础设施
张忠琳8 小时前
【kubernetes v1.21】(kube-apiserver 1)kube-apiserver 核心架构与启动流程超深度分析
云原生·架构·kubernetes
IT策士8 小时前
第 24 篇 k8s之健康检查:探针机制详解
云原生·容器·kubernetes
牛奶咖啡139 小时前
k8s容器编排技术实践——K8s对象deployment应用详解
kubernetes·deployment·deployment是什么·deployment有啥用·deployment优缺点·deployment状态解析·k8s创建资源的方式
IT策士9 小时前
第 21 篇 k8s之Pod:最小调度单元与 YAML 详解
云原生·容器·kubernetes