Kubernetes Kubelet 的 Cgroups 资源限制机制分析

本文详细介绍了Kubernetes中kubelet如何利用cgroups进行资源限制,包括系统预留、kube预留、QoS级别和Pod层级的限制策略,以及不同级别的资源分配和转换公式。

前言

容器技术的两大技术基石,想必大家都有所了解,即 namespace 和 cgroups。但你知道 cgroups 是如何在 kubernetes 中发挥作用的吗?kubelet 都设置了哪些 cgroups 参数来实现对容器的资源限制的呢?本文就来扒一扒 Kubernetes kubelet 的 cgroups 资源限制机制。

层级化的资源限制方式

kubelet 基于 cgroups 的树形结构,采用层级式的方式管理容器的资源限制,如下图所示:
在这里插入图片描述

Node Level Cgroups

Node 层级的资源限制主要是为了避免容器过度占用系统资源,导致节点资源耗尽,影响系统级(如 systemd)和 Kubernetes 依赖组件(如 kubelet 和 containerd)的正常运行,可以通过预留系统资源的方式,确保容器使用的资源总量在控制的范围内。

system-reserved
  • 默认行为:System Reserved Cgroups 默认不配置,需要通过参数显式启用
  • 执行时机:每次 kubelet 启动时执行检查和设置

下表描述了 system-reserved 可能设置的 cgroups 限制:

在这里插入图片描述
上述表格中的资源限制数值均由参数 --system-reserved 控制,不再赘述。

kube-reserved
  • 默认行为:Kube Reserved Cgroups 默认不配置,需要通过参数显式启用
  • 执行时机:每次 kubelet 启动时执行检查和设置

下表描述了 kube-reserved 可能设置的 cgroups 限制:

在这里插入图片描述
上述表格中的资源限制数值均由参数 --kube-reserved 控制,不再赘述。

kubepods
  • 默认行为:kubepods 默认启用配置,且无论如何都会刷新
    这是因为作为 Pods 顶级 cgroups 限制,操作系统默认设置的 cpu.shares=1024cpu.weight=100 过小,很可能出现 CPU 限流,使容器性能变差,因此需要显式刷新。
  • 执行时机:每次 kubelet 启动时执行检查和设置(部分参数同时会被 QoS Manager 周期性和触发式刷新)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值