Kubernetes节点CPU/内存分配配置求助:节点过载致Pod重启
Kubernetes节点资源过载问题解决方案
1. 定位资源占用根源
- 执行
kubectl top nodes和kubectl top pods命令,精准定位消耗资源的Pod,区分CPU密集型或内存密集型负载 - 检查Pod的
requests和limits配置,多数情况下是未设置合理资源限制,导致Pod无限制占用节点资源
2. 正确配置节点资源预留(解决手动编辑节点配置无效问题)
手动修改节点配置无法生效,是因为Kubernetes节点可调度资源需要通过kubelet参数配置系统/组件预留值:
- 针对64核125G内存节点,编辑kubelet配置文件(通常为
/var/lib/kubelet/config.yaml):systemReserved: cpu: "4" memory: "16Gi" kubeReserved: cpu: "2" memory: "8Gi" evictionHard: memory.available: "2Gi" nodefs.available: "10%" - 针对64核256G内存节点,调整预留参数:
systemReserved: cpu: "4" memory: "32Gi" kubeReserved: cpu: "2" memory: "16Gi" evictionHard: memory.available: "4Gi" nodefs.available: "10%" - 修改后重启kubelet服务:
systemctl restart kubelet - 说明:
systemReserved用于预留操作系统及系统进程资源,kubeReserved为kube-proxy、kubelet等K8s组件预留资源,evictionHard设置节点资源不足时的Pod驱逐阈值,避免节点资源耗尽导致Pod强制重启
3. 优化Pod调度与资源配置
- 明确Pod资源边界:给每个Pod配置合理的
requests和limits,比如CPU密集型Pod设置limits.cpu: "4",内存密集型Pod设置limits.memory: "16Gi",防止Pod无限制占用资源 - 节点亲和性调度:给256G内存节点打标签:
kubectl label nodes <节点名称> node-type=high-mem,在Pod的Deployment中配置亲和性,将高内存需求Pod调度到对应节点:affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-type operator: In values: - high-mem - 启用HPA自动扩容:针对负载波动大的应用,配置HPA根据CPU/内存使用率自动扩容Pod,分散单节点压力:
kubectl autoscale deployment <Deployment名称> --min=2 --max=10 --cpu-percent=70
4. 清理闲置资源
- 删除未使用的Deployment、StatefulSet、Pod等资源:
kubectl delete deployment <闲置Deployment名称> - 清理无用容器镜像:
crictl rmi --prune
5. 调整监控告警策略
- 适当调整CPU/内存使用率告警阈值(比如从80%调至85%),减少误告警,核心仍是先解决资源过载问题
- 配置节点资源使用趋势监控,提前预判资源瓶颈
内容的提问来源于stack exchange,提问作者Abhishek Anvekar
相关产品推荐
相关产品推荐

