news 2026/9/2 10:29:54

容器 的 cpu request limit 与 linux cgroups 的关系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
容器 的 cpu request limit 与 linux cgroups 的关系

Kubernetes 通过对 Cgroups 的精细控制来实现其requestslimits机制。

简单来说:

  • requests-> 主要对应cpu.shares
  • limits-> 主要对应cpu.cfs_quota_uscpu.cfs_period_us

下面我们进行详细的分解和解释。


核心概念对应关系

Kubernetes 概念Cgroup 文件作用机制性质
spec.containers[].resources.requests.cpucpu.shares相对权重(Shares)软限制、弹性
spec.containers[].resources.limits.cpucpu.cfs_quota_us
cpu.cfs_period_us
绝对上限(Quota)硬限制、严格

1. CPU Request (requests.cpu) ->cpu.shares

  • 作用requests.cpu在 Kubernetes 中表示容器请求的、保证的最小 CPU 资源量。它主要影响 Pod 的调度——调度器会确保节点上有足够的可用资源(CPU 和内存)才会将 Pod 分配上去。
  • Cgroups 实现:Kubernetes 通过设置 Cgroup v1 的cpu.shares属性来实现这一点。
  • 工作原理
    • cpu.shaes是一个相对权重,而不是一个绝对的 CPU 核心数。
    • 它的默认值是 1024。
    • Kubernetes 的计算公式大致为:容器申请的 cpu.shares = 1024 * requests.cpu
    • 例如:如果一个容器设置了requests.cpu: 1.5,那么它的cpu.shares将被设置为1024 * 1.5 = 1536
  • 行为
    • 当节点上的 CPU 资源充足时,一个设置了requests.cpu的容器可以使用的 CPU可以超过其请求值,它几乎可以使用任何空闲的 CPU。
    • 当节点上的 CPU 资源紧张(多个容器竞争 CPU)时,CFS(完全公平调度器)会根据每个容器的cpu.shares比例来分配 CPU 时间。
    • 再例如:假设一个节点上只有两个 Pod:
      • Pod A:requests.cpu: 1->cpu.shares = 1024
      • Pod B:requests.cpu: 2->cpu.shares = 2048
      • 当两者都全力使用 CPU 时,它们将按照1024:2048(即1:2)的比例分配 CPU 时间。Pod A 大约获得 33% 的 CPU,Pod B 大约获得 66% 的 CPU。

总结:requests.cpu通过cpu.shares确保在资源竞争时获得最低保证份额,是一种“软”限制。


2. CPU Limit (limits.cpu) ->cpu.cfs_quota_us&cpu.cfs_period_us

  • 作用limits.cpu在 Kubernetes 中表示容器能使用的 CPU 资源的绝对硬性上限,无论节点上的 CPU 是否空闲,它都不能超过这个限制。
  • Cgroups 实现:Kubernetes 通过设置 Cgroup v1 的CPU 带宽控制(CPU bandwidth control)子系统来实现,即cpu.cfs_quota_uscpu.cfs_period_us这两个文件。
    • cpu.cfs_period_us:定义了一个时间周期(单位:微秒),通常固定设置为100,000 μs(即 100毫秒)。
    • cpu.cfs_quota_us:定义了在以上一个周期内,该容器最多可以使用的 CPU 时间(单位:微秒)。
  • 工作原理
    • 计算公式为:cpu.cfs_quota_us = limits.cpu * cpu.cfs_period_us
    • 例如:如果一个容器设置了limits.cpu: 1,那么:
      • cpu.cfs_period_us = 100000
      • cpu.cfs_quota_us = 1 * 100000 = 100000
      • 这意味着在每 100ms 的时间内,该容器最多可以使用 100ms 的 CPU 时间,即相当于独占 1 个 CPU 核心
    • 再例如:如果一个容器设置了limits.cpu: 1.5,那么:
      • cpu.cfs_quota_us = 1.5 * 100000 = 150000
      • 这意味着在每 100ms 的时间内,该容器最多可以使用 150ms 的 CPU 时间,即相当于独占 1.5 个 CPU 核心
    • 如果容器在周期内耗尽了它的配额(cpu.cfs_quota_us),它就会被节流(Throttled),必须等待下一个周期才能继续运行。

总结:limits.cpu通过cpu.cfs_quota_uscpu.cfs_period_us设置一个严格的“天花板”,是一个“硬”限制。


综合示例与实践意义

一个 Pod 的配置可以同时包含requestslimits

apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:

  • name: example-container
    image: nginx
    resources:
    requests:
    memory: “64Mi”
    cpu: “0.5” # 请求 0.5 核
    limits:
    memory: “128Mi”
    cpu: “1” # 限制最多使用 1 核

在这个例子中:

  1. 调度:调度器会寻找至少有 0.5 核空闲 CPU 和 64MiB 空闲内存的节点。
  2. Cgroups 设置
    • CPU:
      • cpu.shares = 1024 * 0.5 = 512
      • cpu.cfs_quota_us = 1 * 100000 = 100000
      • cpu.cfs_period_us = 100000
    • 内存:也会设置对应的memory.limit_in_bytes为 128MiB。

实践意义:

  • 设置requests而不设置limits:容器可以弹性使用尽可能多的空闲 CPU,但在竞争时享有保证的最低份额。适用于可以充分利用空闲资源但不需要严格限制的应用。
  • 设置limits而不设置requestsrequests会默认等于limits。这保证了 Pod 的资源,但缺乏弹性。通常不建议,除非你明确希望如此。
  • 同时设置requestslimits:这是最常见和推荐的做法。它既保证了 Pod 的调度和最小资源,又防止 bug 或异常导致单个 Pod 耗尽整个节点的资源( noisy neighbor 问题)。

因此,Kubernetes 通过将高级别的requestslimits概念映射到 Cgroups 底层的不同控制机制,实现了既灵活又严格的混合资源管理策略。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 9:06:00

30、脚本编程中的顶级设计、函数与流程控制

脚本编程中的顶级设计、函数与流程控制 1. 顶级设计理念 在处理复杂任务时,顶级设计是一种非常有效的方法。以停车为例,“停车”这个子任务可以进一步细分为以下步骤: 1. 寻找停车位 2. 将车驶入停车位 3. 关闭发动机 4. 拉起手刹 5. 下车 6. 锁车 而“关闭发动机”…

作者头像 李华
网站建设 2026/9/2 0:48:51

38、深入探索命令行:客户端/服务器架构与命名管道

深入探索命令行:客户端/服务器架构与命名管道 在编程领域,客户端/服务器架构是一种常见的编程架构,它可以利用诸如命名管道之类的通信方法,以及网络连接等其他进程间通信方式。其中,最广泛使用的客户端/服务器系统类型,当属网页浏览器与网页服务器之间的通信。在这个过程…

作者头像 李华
网站建设 2026/9/2 9:55:06

20、Perl编程:文件操作、哈希介绍及操作指南

Perl编程:文件操作、哈希介绍及操作指南 在Perl编程中,文件处理和数据结构的运用是非常重要的部分。下面将详细介绍文件操作、哈希(Hash)的相关知识。 文件操作 在Perl里,文件句柄的使用对于文件的读写十分关键。以下两种方式在功能上是一样的,但通常为方便起见,我们…

作者头像 李华
网站建设 2026/9/1 13:52:54

22、Perl正则表达式与程序交互实用指南

Perl正则表达式与程序交互实用指南 正则表达式在Perl中是非常强大的工具,它可以帮助我们处理各种文本匹配和替换任务。同时,Perl也提供了多种方式来与外部程序进行交互,这使得它在自动化任务和脚本编写方面表现出色。下面将详细介绍正则表达式的使用以及与外部程序交互的方…

作者头像 李华
网站建设 2026/9/2 17:48:12

核心期刊主编视角:如何甄别卓越学术论文

在学术前沿,核心期刊始终是彰显研究成果的关键舞台,其对论文质量的考量堪称严苛。身为核心期刊主编,肩负着遴选精品、助推学术发展的重任。那么,主编们究竟依据哪些标准来评判一篇论文的优劣?一、选题:创新…

作者头像 李华
网站建设 2026/9/2 19:22:34

大文件传输总卡壳?FastSend+cpolar 让跨网分享变简单

文章目录前言【视频教程】1.关于FastSend2.Docker部署3.简单使用FastSend4.安装cpolar内网穿透5. 配置公网地址6. 配置固定公网地址总结FastSend 与 cpolar 的搭配,解决了局域网限制,让大文件传输在跨网络场景下也能保持高效与安全,适合各类团…

作者头像 李华