You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在K8s节点上为system-node-critical Pod预留资源

解决方案:为关键Pod预留节点资源

针对你在K8s 1.22集群中遇到的问题,推荐通过以下方式实现普通作业仅占用节点80%资源、为system-node-critical级关键Pod预留20%资源的需求:

1. 配置Node Allocatable(官方核心方案)

Node Allocatable是Kubelet的原生特性,用于为系统组件、关键Pod预留节点资源。配置后,普通Pod仅能使用节点总资源减去预留部分后的allocatable资源池,从根源上避免关键Pod驱逐普通Pod的情况。

具体配置方式

你可以通过Kubelet启动参数或配置文件设置预留资源(以CPU和内存按节点总资源20%预留为例):

  • 通过启动参数:在Kubelet启动命令中添加以下参数:
--system-reserved=cpu=2000m,memory=2Gi \
--reserved-cpu=0 \
--reserved-memory=0

注:system-reserved专门为system-node-critical、system-cluster-critical级Pod预留,reserved字段用于自定义用户侧预留场景。

  • 通过配置文件:创建kubelet-config.yaml并挂载到Kubelet配置目录:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
systemReserved:
  cpu: "2000m"
  memory: "2Gi"
reservedSystemCPUs: "0-1" # 可选,指定固定CPU核心给关键Pod,进一步隔离资源

配置完成后重启Kubelet,节点的allocatable资源会自动调整为总资源减去system-reserved的部分,普通作业调度将严格限制在该范围内。

2. 补充优化:强化优先级与资源约束

结合以下配置可进一步提升稳定性:

  • 确保关键Pod的优先级类已设为system-node-critical(你已完成此设置),这类Pod的调度优先级高于所有普通Pod,会被优先分配预留资源。
  • 普通作业保持Guaranteed QoS配置(请求=限制),让调度器能精准计算资源占用,避免超配。

注意事项

  • 若使用托管K8s集群(如EKS、GKE、AKS),需通过云厂商控制台或官方API修改Kubelet配置,不可直接操作节点。
  • 预留资源比例需根据关键Pod的实际资源总和调整,确保20%的预留量能覆盖所有关键Pod的需求。

内容的提问来源于stack exchange,提问作者Jan Jongboom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:20:32