kubernetes中pod spec设置的limits request会转换为哪些参数进行限制
在 Kubernetes 中,Pod 的 spec 中定义的 requests 和 limits 是用于管理和限制容器资源使用的重要参数。它们主要涉及 CPU 和内存资源。当你为一个容器设置了 requests 和 limits,Kubernetes 会将这些值转换为底层系统(如 Linux cgroups)中的相应参数,以对容器进行资源管理和限制。
1. CPU 限制和请求
- CPU Requests (requests.cpu):
- 定义: 指定了容器在调度时所需的最小 CPU 资源。调度器使用此值来决定在哪个节点上运行 Pod,以确保节点具有足够的可用 CPU 资源。
- 转换为 cgroups 参数:
- 在 Linux cgroups 中,requests.cpu 影响的是 cpu.shares。cpu.shares 是相对权重,用于决定在节点资源紧张时,容器可以获得多少 CPU 资源。默认情况下,一个 CPU 核心的 cpu.shares` 设置为 1024。
- CPU Limits (limits.cpu):
- 定义: 指定了容器可以使用的最大 CPU 资源。容器的 CPU 使用量不能超过这个限制。
- 转换为 cgroups 参数:
- 在 Linux cgroups 中,limits.cpu 影响的是 cpu.cfs_quota_us 和 cpu.cfs_period_us。这些参数限制了容器可以使用的 CPU 时间。例如,cpu.cfs_quota_us 设定为 100ms 意味着容器每 100ms 的周期中最多只能使用 100ms 的 CPU 时间,相当于限制容器使用一个 CPU 核心。
2. 内存限制和请求
- Memory Requests (requests.memory):
- 定义: 指定了容器在调度时所需的最小内存资源。调度器会根据这个值来确保节点有足够的可用内存资源。
- 转换为 cgroups 参数:
- 在 Linux cgroups 中,requests.memory 不直接转换为一个硬性限制参数,而是影响调度决策,确保节点具有足够的内存资源来启动容器。
- Memory Limits (limits.memory):
- 定义: 指定了容器可以使用的最大内存资源。容器的内存使用量不能超过这个限制,如果超过,可能会触发 OOM(Out Of Memory)杀手。
- 转换为 cgroups 参数:
- 在 Linux cgroups 中,limits.memory 转换为 memory.limit_in_bytes。这是一个硬性限制,容器使用的内存量不能超过这个值。如果容器尝试使用超过该值的内存,会触发 OOM 杀手,导致容器被终止。
5. 总结
- CPU Requests → cpu.shares (相对权重)
- CPU Limits → cpu.cfs_quota_us 和 cpu.cfs_period_us (CPU 时间配额)
- Memory Requests → 影响调度,但不直接限制 (无直接 cgroups 参数)
- Memory Limits → memory.limit_in_bytes (硬性内存限制)
通过这些机制,Kubernetes 可以在集群节点上有效地管理和隔离容器资源,确保不同的工作负载得到公平和合理的资源分配。
4.干货分享(自取)
- 1. kubernetes CKA认证学习视频
- 2. AI人工智能学习资料下载
- 3. 信息安全管理体系(ISMS)制度模板分享
- 4. 文档翻译工具,支持word、pdf、ppt、excel
- 5. PuTTY中文版安装包
- 6. MobaXterm中文版安装包