当前位置: 首页 > news >正文

k8s pod resources: {} 设置的含义

文章目录

    • 一、resources: {} 含义
    • 二、不设置是可以无限使用机器资源吗?
    • 三、资源分配的优先级规则
    • 四、如何设置尽可能避免被驱逐
    • 五、limits 和requests 的含义
      • 5.1、含义
      • 5.2、不同设置的含义及影响
      • 5.3、哪些设置是有风险或者错误的
      • 5.4、 资源调度与驱逐规则
      • 5.5、典型场景
      • 5.6、最佳实践
      • 5.7、常见问题

一、resources: {} 含义

  • 未声明资源请求和限制:
    当 Pod 的 resources 字段设置为 {},表示该 Pod 未声明任何 CPU 和内存的请求(requests)或限制(limits)。

    • 无资源保障:Kubernetes 不会为该 Pod 保证任何 CPU 或内存资源(即 requests 未定义)。
    • 无资源上限:Pod 可以使用节点上剩余的 CPU 和内存,但 不能超过节点的物理资源总量(即使未设置 limits,系统仍会通过 QoS 策略限制其优先级)。
  • QoS 级别为 BestEffort:
    根据 Kubernetes 的服务质量(QoS)分类,未设置 requests 的 Pod 被归类为 BestEffort(最低优先级)。

    • 优先级最低:在资源不足时,BestEffort Pod 会被优先驱逐(OOM Killer 或调度器拒绝调度)。
    • 仅使用剩余资源:只能使用节点上未被其他 Pod 的 requests 占用的资源。

二、不设置是可以无限使用机器资源吗?

并不是。Pod 的资源使用仍受以下约束:

  • 节点物理资源上限:Pod 的资源使用不能超过节点的 CPU 和内存总量。
  • 系统保留资源:Kubernetes 会为系统组件(如 kubelet、容器运行时)保留部分资源,剩余资源由 Pod 竞争。
  • 其他 Pod 的请求:设置了 requests 的 Pod 会优先获得其声明的资源,剩余资源才会被 BestEffort Pod 使用。

那么,pod 资源使用有什么优先级吗?当然有!

三、资源分配的优先级规则

当节点资源紧张时,Kubernetes 根据 QoS 级别 决定资源分配顺序:

QoS级别定义资源保障优先级
Guaranteedrequests == limits 且所有资源均被声明系统强制保障其 requests最高(优先保护)
Burstablerequests < limits 或仅声明 requests保障 requests,超出部分需竞争中等(剩余资源可使用)
BestEffort未声明任何资源(resources: {})无保障最低(可能被驱逐)

具体分配逻辑:

  • 优先保障高 QoS Pod:
    • 系统首先满足 Guaranteed 和 Burstable Pod 的 requests 需求。
    • 剩余资源由所有 Pod(包括 BestEffort)竞争使用。
  • 资源不足时的驱逐顺序:
    当节点资源耗尽时,Kubernetes 会优先终止 BestEffort Pod(QoS 最低),以保障高优先级 Pod 的资源需求。

四、如何设置尽可能避免被驱逐

首先言明,任何一种QoS都有可能被驱逐。

QoS 级别驱逐顺序是否可能被驱逐
BestEffort最先被驱逐是(资源不足时优先被终止)
Burstable在 BestEffort 之后驱逐,但 可能在极端情况下被驱逐是(资源极度紧张时)
Guaranteed最后被驱逐,但并非绝对安全是(极端情况下,如节点崩溃)

具体逻辑如下:

  • BestEffort Pod:
    优先被驱逐,因为其 QoS 级别最低,且无资源请求保障。
  • Burstable Pod:
    在资源极度紧张(如节点内存耗尽)时,可能因超出 limits 或系统强制回收资源而被驱逐。例如:
    • 如果 Pod 的内存使用超过 limits,会被 OOM Killer 终止。
    • 当节点资源完全耗尽(如内存不足),Kubernetes 会按优先级逐步驱逐 Pod。
  • Guaranteed Pod:
    通常不会被驱逐,因为其 requests == limits,系统会尽力保障其资源。但以下极端情况下仍可能被驱逐:
    • 节点崩溃或硬件故障:如节点宕机,所有 Pod 均会被终止。
    • 资源总量不足:如果节点总资源(如 CPU 或内存)无法满足所有 Guaranteed Pod 的 requests(例如调度器误调度),则可能触发驱逐。

如上,Guaranteed最安全,只有节点崩溃情况下才会被驱逐,其次是Burstable,最不安全的是BestEffort,故要避免被驱逐,最好不要设置成BestEffort。

五、limits 和requests 的含义

  • requests 是资源调度的“入场券”:决定 Pod 是否能被调度到节点。
  • limits 是资源使用的“天花板”:防止 Pod 占用过多资源影响其他应用。
  • QoS 级别决定生存优先级:合理配置可避免资源争抢和意外驱逐。

5.1、含义

  • requests(资源请求):
    定义 Pod 运行所需的最小资源保障
    • Kubernetes 调度器根据 requests 确定 Pod 可调度到的节点。
    • 节点必须提供至少 requests 指定的资源量,否则 Pod 无法调度到该节点。
    • 作用:确保 Pod 启动时获得基本资源,避免因资源不足崩溃。
  • limits(资源限制):
    定义 Pod 允许使用的最大资源量
    • 当 Pod 资源使用超过 limits 时,Kubernetes 会通过限制或终止 Pod 防止资源滥用。
    • 作用:防止 Pod 占用过多资源影响其他应用。

5.2、不同设置的含义及影响

设置组合QoS 级别含义与影响
requests 和 limits 均设置Guaranteed资源保障:requests 和 limits 相等或 requests ≤ limits。 优先级最高:资源不足时最后被驱逐。 示例:requests.cpu=1, limits.cpu=1 → 确保始终获得 1 核 CPU。
仅设置 requestsBurstable-资源保障:requests 定义最小资源,limits 未设置则默认为节点最大资源。- 优先级中等:资源不足时在 BestEffort 后驱逐。 示例:requests.memory=512Mi → 保证 512 MiB 内存,但可使用剩余资源。
仅设置 limitsBurstable- 不推荐:requests 未设置时,requests 默认为 0。 - 与未设置资源类似,QoS 级别为 Burstable,但资源保障不足。
均不设置BestEffort- 无资源保障:仅在节点资源充足时使用剩余资源。 - 优先级最低:资源不足时最先被驱逐。

5.3、哪些设置是有风险或者错误的

  • 未设置 requests:
    Pod 可能因资源不足被调度到无法运行的节点(例如节点内存不足但未声明 requests)。
  • limits < requests:
    配置无效,Kubernetes 会以 requests 为准,limits 被忽略。
  • 过度设置 requests:
    可能导致节点资源碎片化,其他 Pod 无法调度。
  • 未设置 limits:
    Pod 可能占用过多资源,影响其他高优先级应用(如 Burstable Pod 的内存无上限)。

5.4、 资源调度与驱逐规则

  • 调度规则:

    • 调度器确保节点的 总可用资源 ≥ 所有 Pod 的 requests 总和。
    • 若节点资源不足,Pod 会被标记为 Pending 直到资源可用。
  • 资源使用与限制:

    • CPU:
      • requests:Pod 可稳定使用的 CPU 资源。
      • limits:超过 limits 时会被 CPU 限制(如降速)。
    • 内存:
      • requests:Pod 可稳定使用的内存。
      • limits:超过 limits 时会被 OOM Killer 终止。
  • 驱逐顺序:

    • BestEffort → 2. Burstable → 3. Guaranteed
    • Guaranteed Pod 例外:若节点资源完全耗尽(如内存不足),仍可能被 OOM Killer 终止。

5.5、典型场景

场景配置建议说明
关键服务(如数据库)requests == limits(Guaranteed)确保资源隔离,避免因资源波动导致服务不稳定。
普通应用(如 Web 服务)设置 requests,并适当设置 limits(Burstable)允许短暂超限,但防止资源滥用。
测试 Podresources: {}(BestEffort)仅用于低优先级任务,资源不足时可容忍终止。

5.6、最佳实践

  • 始终设置 requests:
    确保 Pod 被调度到有足够资源的节点。
  • 合理设置 limits:
    • 对关键服务设置 requests == limits(Guaranteed)。
    • 对普通应用设置 limits 防止资源滥用。
  • 监控资源使用:
    使用 Prometheus 或 Metrics Server 监控实际资源使用,调整配置。
  • 避免过度声明:
    过度声明 requests 会降低集群资源利用率。

5.7、常见问题

  • Q1 :设置 requests 但未设置 limits 会怎样?
    • Pod 可使用节点上所有剩余资源(不超过节点物理限制),但无上限保护。
    • QoS 级别为 Burstable,资源不足时可能因超限被 OOM Killer 终止。
  • Q2: limits 是否能超过节点资源?
    • 否:limits 的总和不能超过节点的物理资源,否则 Pod 无法调度。
  • Q3: 如何避免 Pod 被驱逐?
    • 设置合理的 requests(至少满足应用基线需求),并确保节点资源充足。
      关键 Pod 使用 Guaranteed 类型。
http://www.dtcms.com/a/352205.html

相关文章:

  • 支持向量机(第二十九节课内容总结)
  • TensorFlow 面试题及详细答案 120道(61-70)-- 高级特性与工具
  • 如何在项目中集成XXL-JOB
  • uniapp 引入使用u-view 完整步骤,u-view 样式不生效
  • 重复文件删除查找工具 Duplicate Files Search Link v10.7.0
  • 【深度学习】Transformer 注意力机制与 LoRA target_modules 详解
  • 如何安装 VS2019 和 .NET Core SDK 2.2.301(winx64)?完整操作步骤(附安装包下载)
  • 基于YOLOv11训练无人机视角Visdrone2019数据集
  • 区块链技术探索与应用:从密码学奇迹到产业变革引擎
  • 从入门到理解:支持向量机的核心原理与实战思路
  • 计数组合学7.21(有界部分大小的平面分拆)
  • 车载铁框矫平机:一辆“会熨衣服”的工程车
  • 高性能异步任务编排框架:Gobrs-Async
  • 【项目】深房数据通——深圳房价可视化系统
  • 嵌入式第三十七课!!!TCP机制与HTTP协议
  • 【学习笔记】系统时间跳变会影响time接口解决措施
  • 相关法律、法规知识(五)
  • 单层膜可改善无铅钙钛矿太阳能电池
  • Java 企业应用单点登录(SSO)实现方案详解
  • 创维桌面云终端-创维LB2002-白盒-晶晨S905L3A-2+8G-线刷刷机包
  • 实验2 天气预报
  • Ultra Accelerator Link(UALink)Consortium
  • 网站测试报告:WEB应用反CSRF的本质与防御机制
  • 解决 pdf.mjs 因 MIME 类型错误导致的模块加载失败问题
  • day1_线性回归的实现 李沐动手学深度学习pytorch记录
  • 吱吱企业通讯软件保障企业办公安全与效率,助力企业高效发展
  • (LeetCode 每日一题) 3000. 对角线最长的矩形的面积(数组)
  • Jmeter基础:Jmeter聚合报告
  • 6pen Art
  • 校园勤工俭学微信小程序的设计与实现:基于数字化服务生态的赋能体系构建