k8s中什么是cpu请求,cpu限制,内存请求,内存限制,及与QoS的关系
在 Kubernetes (k8s) 中,资源管理是确保集群稳定性和性能的关键。Kubernetes 通过 CPU 请求(CPU Requests)、CPU 限制(CPU Limits)、内存请求(Memory Requests) 和 内存限制(Memory Limits) 来管理 Pod 的资源使用。这些资源设置与 服务质量(QoS,Quality of Service) 密切相关,直接影响 Pod 的调度、资源分配和驱逐策略。
1. CPU 请求(CPU Requests)
- 定义:
CPU 请求是 Pod 对 CPU 资源的最小需求。Kubernetes 调度器会根据节点的可用 CPU 资源来调度 Pod,确保节点能够满足 Pod 的 CPU 请求。 - 作用:
- 调度依据:Kubernetes 调度器会确保节点的可用 CPU 资源 ≥ Pod 的 CPU 请求。
- 资源保障:Pod 在运行时至少可以获得请求的 CPU 资源。
- 单位:
- 1 个 CPU 核心 =
1000m
(毫核),例如500m
表示 0.5 个 CPU 核心。
- 1 个 CPU 核心 =
- 示例:
resources: requests: cpu: "500m"
2. CPU 限制(CPU Limits)
- 定义:
CPU 限制是 Pod 可以使用的 CPU 资源的最大值。Pod 的 CPU 使用量不能超过此限制。 - 作用:
- 防止 Pod 过度占用 CPU 资源,影响其他 Pod 或节点的稳定性。
- Kubernetes 使用 Cgroups 来强制执行 CPU 限制。
- 单位:
- 与 CPU 请求相同,单位为毫核(
m
)。
- 与 CPU 请求相同,单位为毫核(
- 示例:
resources: limits: cpu: "1000m"
3. 内存请求(Memory Requests)
- 定义:
内存请求是 Pod 对内存资源的最小需求。Kubernetes 调度器会根据节点的可用内存资源来调度 Pod,确保节点能够满足 Pod 的内存请求。 - 作用:
- 调度依据:Kubernetes 调度器会确保节点的可用内存资源 ≥ Pod 的内存请求。
- 资源保障:Pod 在运行时至少可以获得请求的内存资源。
- 单位:
- 可以使用
Mi
(兆字节)或Gi
(千兆字节),例如512Mi
表示 512 兆字节。
- 可以使用
- 示例:
resources: requests: memory: "512Mi"
4. 内存限制(Memory Limits)
- 定义:
内存限制是 Pod 可以使用的内存资源的最大值。Pod 的内存使用量不能超过此限制。 - 作用:
- 防止 Pod 过度占用内存资源,导致节点内存耗尽(OOM,Out Of Memory)。
- Kubernetes 使用 Cgroups 来强制执行内存限制。
- 单位:
- 与内存请求相同,单位为
Mi
或Gi
。
- 与内存请求相同,单位为
- 示例:
resources: limits: memory: "1Gi"
5. QoS(服务质量)
Kubernetes 根据 Pod 的资源请求和限制,将 Pod 分为三种 QoS 类别:Guaranteed、Burstable 和 BestEffort。QoS 类别决定了 Pod 在资源紧张时的优先级和驱逐策略。
QoS 类别
-
Guaranteed(保证型)
- 条件:
- Pod 中的所有容器都设置了 CPU 和内存的请求和限制。
- 每个容器的 CPU 请求 = CPU 限制,且内存请求 = 内存限制。
- 特点:
- 最高优先级,Kubernetes 会尽量保证这类 Pod 的资源需求。
- 在资源不足时,最不容易被驱逐。
- 示例:
resources: limits: cpu: "1000m" memory: "1Gi" requests: cpu: "1000m" memory: "1Gi"
- 条件:
-
Burstable(突发型)
- 条件:
- Pod 中的至少一个容器设置了 CPU 或内存的请求或限制,但不满足 Guaranteed 的条件。
- 特点:
- 中等优先级,可以临时使用额外的资源(突发)。
- 在资源不足时,可能会被驱逐。
- 示例:
resources: limits: memory: "1Gi" requests: cpu: "500m"
- 条件:
-
BestEffort(尽力而为型)
- 条件:
- Pod 中的所有容器都没有设置 CPU 或内存的请求和限制。
- 特点:
- 最低优先级,资源使用不受保障。
- 在资源不足时,最先被驱逐。
- 示例:
resources: {}
- 条件:
QoS 与资源管理的关系
- 调度:
Kubernetes 调度器根据 Pod 的资源请求(CPU 和内存)选择适合的节点。 - 资源分配:
Pod 在运行时至少可以获得请求的资源,但不能超过限制。 - 驱逐策略:
当节点资源不足时,Kubernetes 会根据 QoS 类别决定哪些 Pod 被驱逐:- BestEffort Pod 最先被驱逐。
- Burstable Pod 次之。
- Guaranteed Pod 最后被驱逐。
总结
- CPU 请求 和 内存请求 是 Pod 对资源的最小需求,用于调度和资源保障。
- CPU 限制 和 内存限制 是 Pod 对资源的最大使用量,用于防止资源过度占用。
- QoS 根据资源请求和限制将 Pod 分为 Guaranteed、Burstable 和 BestEffort 三类,决定了 Pod 的优先级和驱逐顺序。
通过合理设置资源请求和限制,可以优化 Kubernetes 集群的资源利用率,并确保关键应用的稳定性。
本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/18400139
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略