流式Git管理:让AI编码助手的提交速度不再拖后腿
2026/9/18 3:43:09
Kubernetes 通过对 Cgroups 的精细控制来实现其requests和limits机制。
简单来说:
requests-> 主要对应cpu.shareslimits-> 主要对应cpu.cfs_quota_us和cpu.cfs_period_us下面我们进行详细的分解和解释。
| Kubernetes 概念 | Cgroup 文件 | 作用机制 | 性质 |
|---|---|---|---|
spec.containers[].resources.requests.cpu | cpu.shares | 相对权重(Shares) | 软限制、弹性 |
spec.containers[].resources.limits.cpu | cpu.cfs_quota_uscpu.cfs_period_us | 绝对上限(Quota) | 硬限制、严格 |
requests.cpu) ->cpu.sharesrequests.cpu在 Kubernetes 中表示容器请求的、保证的最小 CPU 资源量。它主要影响 Pod 的调度——调度器会确保节点上有足够的可用资源(CPU 和内存)才会将 Pod 分配上去。cpu.shares属性来实现这一点。cpu.shaes是一个相对权重,而不是一个绝对的 CPU 核心数。容器申请的 cpu.shares = 1024 * requests.cpurequests.cpu: 1.5,那么它的cpu.shares将被设置为1024 * 1.5 = 1536。requests.cpu的容器可以使用的 CPU可以超过其请求值,它几乎可以使用任何空闲的 CPU。cpu.shares比例来分配 CPU 时间。requests.cpu: 1->cpu.shares = 1024requests.cpu: 2->cpu.shares = 20481024:2048(即1:2)的比例分配 CPU 时间。Pod A 大约获得 33% 的 CPU,Pod B 大约获得 66% 的 CPU。总结:requests.cpu通过cpu.shares确保在资源竞争时获得最低保证份额,是一种“软”限制。
limits.cpu) ->cpu.cfs_quota_us&cpu.cfs_period_uslimits.cpu在 Kubernetes 中表示容器能使用的 CPU 资源的绝对硬性上限,无论节点上的 CPU 是否空闲,它都不能超过这个限制。cpu.cfs_quota_us和cpu.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_uslimits.cpu: 1,那么:cpu.cfs_period_us = 100000cpu.cfs_quota_us = 1 * 100000 = 100000limits.cpu: 1.5,那么:cpu.cfs_quota_us = 1.5 * 100000 = 150000cpu.cfs_quota_us),它就会被节流(Throttled),必须等待下一个周期才能继续运行。总结:limits.cpu通过cpu.cfs_quota_us和cpu.cfs_period_us设置一个严格的“天花板”,是一个“硬”限制。
一个 Pod 的配置可以同时包含requests和limits:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
在这个例子中:
cpu.shares = 1024 * 0.5 = 512cpu.cfs_quota_us = 1 * 100000 = 100000cpu.cfs_period_us = 100000memory.limit_in_bytes为 128MiB。实践意义:
requests而不设置limits:容器可以弹性使用尽可能多的空闲 CPU,但在竞争时享有保证的最低份额。适用于可以充分利用空闲资源但不需要严格限制的应用。limits而不设置requests:requests会默认等于limits。这保证了 Pod 的资源,但缺乏弹性。通常不建议,除非你明确希望如此。requests和limits:这是最常见和推荐的做法。它既保证了 Pod 的调度和最小资源,又防止 bug 或异常导致单个 Pod 耗尽整个节点的资源( noisy neighbor 问题)。因此,Kubernetes 通过将高级别的requests和limits概念映射到 Cgroups 底层的不同控制机制,实现了既灵活又严格的混合资源管理策略。