K8S cgroups详解

news2025/5/16 23:49:56

以下是 Kubernetes 中 cgroups(Control Groups) 的详细解析,涵盖其核心原理、在 Kubernetes 中的具体应用及实践操作:

一、cgroups 基础概念

1. 是什么?
  • cgroups 是 Linux 内核提供的 资源隔离与控制机制,用于限制、统计和监控进程组(如容器)的资源使用。

  • 可管理的资源类型:

    • CPU:分配核心数、时间片权重

    • 内存:限制最大使用量、Swap 控制

    • I/O:磁盘和网络带宽限制

    • 进程数:防止 fork bomb

    • 设备访问:限制特定设备使用

2. 核心组件
组件功能
Hierarchy树状层级结构,每个层级绑定一个或多个子系统(如 CPU、Memory)
Subsystem资源控制器(如 cpumemoryblkio),负责具体资源管理
Cgroup层级中的节点,包含一组进程及其资源限制规则
Task进程(线程),属于某个 cgroup,资源受其规则约束
3. cgroup v1 vs v2
特性cgroup v1cgroup v2
层级结构多层级,每个子系统独立单一层级,统一管理所有子系统
资源分配模型分散控制统一权重分配(如 cpu.weight
内存控制memory.limit_in_bytesmemory.max
兼容性广泛支持需较新内核(≥4.15)

二、Kubernetes 中的 cgroups 实现

1. 资源模型

Kubernetes 通过 Resource Requests/Limits 定义容器的资源需求,底层由容器运行时(如 containerd、Docker)转换为 cgroup 配置。

resources:
  requests:
    cpu: "500m"    # 0.5 CPU 核心
    memory: "1Gi"   # 1 GB 内存
  limits:
    cpu: "1"       # 1 CPU 核心
    memory: "2Gi"   # 内存硬限制
2. 核心子系统映射
Kubernetes 参数cgroup 子系统关键文件/参数
CPU Requestscpucpu.shares(权重)
CPU Limitscpucpu.cfs_period_us + cpu.cfs_quota_us
Memory Limitsmemorymemory.limit_in_bytes(v1)或 memory.max(v2)
HugePageshugetlbhugetlb.<size>.limit_in_bytes
Ephemeral Storageblkio(部分)通过 XFS 配额或 blkio.throttle 控制
3. cgroup 路径结构

容器 cgroup 路径示例(v1):

# 查看容器进程的 cgroup
$ cat /proc/<PID>/cgroup

# 示例输出:
12:memory:/kubepods/burstable/pod<UID>/<容器ID>
3:cpu,cpuacct:/kubepods/burstable/pod<UID>/<容器ID>

Kubernetes 层级命名规则:

/kubepods/[QoS-Class]/pod<Pod-UID>/<Container-ID>
  • QoS Classburstable(弹性)、besteffort(尽力而为)、guaranteed(保证)

三、实战操作:验证 cgroup 配置

1. 查看容器的 cgroup 限制

进入容器所在节点的 cgroup 目录(以内存为例):

# 查找容器对应的 cgroup 路径
$ CONTAINER_ID=$(docker ps | grep <容器名> | awk '{print $1}')
$ CGROUP_PATH=$(docker inspect $CONTAINER_ID | grep -i cgroup | grep memory | head -1 | cut -d'"' -f4)

# 查看内存限制
$ cat /sys/fs/cgroup/memory/$CGROUP_PATH/memory.limit_in_bytes
2147483648  # 2Gi
2. 动态调整 cgroup 参数(调试用)
# 临时修改 CPU 配额(慎用!)
echo 50000 > /sys/fs/cgroup/cpu/$CGROUP_PATH/cpu.cfs_quota_us  # 限制为 50ms/100ms 周期

四、Kubernetes 资源 QoS 与 cgroup

1. QoS 等级
QoS 级别条件cgroup 表现
Guaranteed所有容器设置 limits=requests高优先级,cpu.shares 根据 requests 分配,内存不足时最后被 OOMKill
Burstable至少一个容器设置 requests<limits 或未设置 limits中等优先级,资源超用时可能被限制或终止
BestEffort所有容器未设置 requests 和 limits最低优先级,资源紧张时优先被终止
2. OOM 处理机制
  • 当节点内存不足时,OOM Killer 按优先级终止容器:

    • BestEffort → 2. Burstable → 3. Guaranteed

  • 查看 OOM 事件:

    dmesg | grep -i "oom"
    journalctl -k | grep -i "oom"

五、高级配置

1. 自定义 cgroup 驱动

Kubernetes 支持两种 cgroup 驱动:

  • cgroupfs:直接写入 cgroup 文件系统(默认)。

  • systemd:通过 systemd 管理 cgroup(需节点使用 systemd)。

配置 kubelet 使用 systemd 驱动:

--cgroup-driver=systemd
2. 设置 cgroup 根目录

调整 kubelet 参数:

--cgroup-root=/custom-cgroup
3. Reserved Resources

为系统进程预留资源,避免容器占用全部资源:

# kubelet 配置
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
systemReserved:
  cpu: "500m"
  memory: "1Gi"

六、常见问题排查

1. 容器被 OOMKilled
  • 检查点

    kubectl describe pod <pod-name> | grep -i "OOM"
    kubectl get events --field-selector=reason=OOMKilled
  • 解决:调整 spec.containers[].resources.limits.memory

2. CPU 节流(Throttling)
  • 检查点

    kubectl top pod --containers
    cat /sys/fs/cgroup/cpu/$CGROUP_PATH/cpu.stat | grep nr_throttled
  • 解决:优化应用 CPU 使用或增加 limits.cpu

总结

  • 核心作用:Kubernetes 通过 cgroups 实现容器资源隔离,保障多租户环境稳定性。

  • 配置关键:合理设置 requests/limits,结合 QoS 策略优化资源分配。

  • 调试工具docker statskubectl top、直接查看 cgroup 文件系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2377215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

能源设备数据采集

在全球可持续发展目标与环境保护理念日益深入人心的时代背景下&#xff0c;有效管理和优化能源使用已成为企业实现绿色转型、提升竞争力的关键路径。能源设备数据采集系统&#xff0c;作为能源管理的核心技术支撑&#xff0c;通过对各类能源生产设备运行数据的全面收集、深度分…

Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)

1.protobuf简介 protobuf 即 Protocol Buffers&#xff0c;是一种轻便高效的结构化数据存储格式&#xff0c;与语言、平台无关&#xff0c;可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的&#xff0c;占用空…

[Linux性能优化] 线程卡顿优化。Linux加入USB(HID)热插拔线程占用CPU优化。Linux中CPU使用率过高优化

文章目录 [Linux性能优化] 线程卡顿优化。0、省流版本一、问题定位&#xff1a;CPU 资源分析二、线程卡顿现场复现线程优化前图片 三、线程卡顿优化方向1.如果是轮询方式2.如果是事件驱动方式 四、修改方式线程优化后图片 [Linux性能优化] 线程卡顿优化。 0、省流版本 如果采…

Ubuntu20.04下如何源码编译Carla,使用UE4源码开跑,踩坑集合

一、简介 作为一个从事算法研究的人员,无人驾驶仿真一直是比较重要的一部分,但是现在比较常见的算法验证都是在carla这个开源仿真平台上做的,所以我有二次开发carla的需求,今天就来讲讲编译CARLA。 网上的教材很多,但还是推荐大家看官网教程:Linux build - CARLA Simul…

26考研——中央处理器_数据通路的功能和基本结构(5)

408答疑 文章目录 三、数据通路的功能和基本结构数据通路的功能数据通路的组成组合逻辑元件&#xff08;操作元件&#xff09;时序逻辑元件&#xff08;状态元件&#xff09; 数据通路的基本结构CPU 内部单总线方式CPU 内部多总线方式专用数据通路方式 数据通路的操作举例通用寄…

区块链大纲笔记

中心化出现的原因是由于网络的形成&#xff08;不然就孤立了&#xff0c;这显然不符合现实&#xff0c;如&#xff0c;社会&#xff0c;计算机网路&#xff09;&#xff0c;接着由于网络中结点能力一般不对等同时为了便于管理等一系列问题&#xff0c;导致中心化网络的出现。&a…

浏览器自动化:RPA 解决方案的崛起

1. 引言 在 2025 年&#xff0c;浏览器自动化已成为企业和开发者不可或缺的工具。从网页数据抓取到自动化测试&#xff0c;这项技术不仅提高了效率&#xff0c;还推动了 Web 生态的发展。然而&#xff0c;随着浏览器指纹识别和反机器人检测的进步&#xff0c;传统的本地自动化…

手机换地方ip地址会变化吗?深入解析

在移动互联网时代&#xff0c;我们经常带着手机穿梭于不同地点&#xff0c;无论是出差旅行还是日常通勤。许多用户都好奇&#xff1a;当手机更换使用地点时&#xff0c;IP地址会随之改变吗&#xff1f;本文将深入解析手机IP地址的变化机制&#xff0c;帮助您全面了解这一常见但…

AI工具分享篇 | recraft.ai + figma 复刻技术路线图

recraft 介绍 recraft.ai 主要生成和编辑适合网站、印刷和营销的各种风格的矢量艺术、图标、3d图像和插图。其矢量化功能可将路线图转化为一个矢量图。 recraft 的注册流程非常的简单&#xff0c;邮箱注册即可&#xff0c;无需科学上网&#xff0c;3分钟就能搞定。看不懂英文…

部署安装jenkins.war(2.508)

实验目的&#xff1a;部署jenkins&#xff0c;并与gitlab关联bulid 所需软件&#xff1a;jdk-17_linux-x64_bin.tar.gz jenkins.war apache-tomcat-10.1.40.tar.gz 实验主机&#xff1a;8.10具有java环境,内存最少为4G&#xff0c;cpu双核 目录 jdk安装 …

JS手写代码篇---手写 Object.create

JS手写代码篇 在做手写题的时候&#xff0c;我们要思考两个问题 这个代码的作用是什么能够实现的效果是什么样子 1. 手写 Object.create 思路&#xff1a;创造一个对象&#xff0c;类似于Object.create()方法>将obj作为原型 // 手写 Object.create function create (ob…

spring boot Controller 和 RestController 的区别

spring boot Controller 和 RestController 的区别 5.3.1常用注解 Spring MVC控制器中常使用的注解有如下几种。 Controller Controller 标记在类上。使用Controller 标记的类表示是Spring MVC的Controller对象。分发处理器将会扫描使用了该注解的类&#xff0c;并检测其中的…

LeRobot 项目部署运行逻辑(七)—— ACT 在 Mobile ALOHA 训练与部署

全部流程为&#xff1a;硬件配置 -> 环境安装 -> 遥操作数据采集 -> 数据集可视化 -> 策略训练 -> 策略评估 在之前的笔记中已经完成了绝大部分&#xff0c;最后再记录一下最后的训练部署&#xff0c;算是最简单的部分了 目录 1 ACT 训练 2 ALOHA 部署 3 更…

高频交直流电流测量技术:射频PA与MEMS测试的简单解决方案

随着5G通信和智能传感器技术的快速发展&#xff0c;传统电流测量手段已难以满足现代电子设备的测试需求。最新一代交直流混合测量探头通过突破性的技术创新&#xff0c;正在重新定义射频功率器件和微机电系统的测试标准。 射频功率放大器测试新范式&#xff1a; 在5G基站等高…

原生微信小程序 textarea组件placeholder无法换行的问题解决办法

【问题描述】 微信小程序原生代码&#xff0c;使用文本域&#xff0c;placeholder使用\n 没有效果&#xff0c;网上找了一堆方案说使用 也没有效果 最后在一个前端大佬博客&#xff0c;找到解决办法&#xff0c;CSS设置word-wrap: break-word; white-space: pre-line; 【解决办…

网络协议分析 实验二 IP分片与IPv6

文章目录 索引及重要内容实验2 IP 高级实验实验2.1 IPv4协议分片实验实验2.2 IPV6协议实验2.3 ARP初级 索引及重要内容 实验2 IP 高级实验 实验2.1 IPv4协议分片实验 icmp的不可达报文 实验2.2 IPV6协议 实验2.3 ARP初级 arp –a 查看ARP缓存表内容 arp –s IP地址(格式&…

QT6 源(101)篇一:阅读与注释 QPlainTextEdit,其继承于QAbstractScrollArea,属性学习与测试

&#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09;属性学习与测试 &#xff1a; &#xff08;4&#xff09; &#xff08;5&#xff09; 谢谢

工业大数据的定义

目录 工业大数据的定义 工业大数据发展历程 工业大数据的特征 工业大数据的处理流程 工业大数据在处理上面临的挑战 工业大数据的有效处理方案 工业大数据处理相关案例 数益工联 x TDengine 中天钢铁 x TDengine 广州某企业工业互联网项目 x TDengine 格创东智 x TD…

126.在 Vue 3 中使用 OpenLayers 实现绘制正方形、正三角形、正五边形

🗺️ 项目效果(先看效果) 支持点击按钮绘制图形,效果如下: ✅ 正三角形 ✅ 正方形 ✅ 正五边形 ✅ 支持停止绘制 📌 前言 在 Web GIS 的实际项目中,我们经常需要绘制一些规则的图形,比如:正方形、正三角形、正五边形等,这在标注地块、规划图形、布设区域等场景中都…

3DVR制作的工具或平台

3DVR&#xff08;三维虚拟现实&#xff09;是利用三维图像技术和虚拟现实技术&#xff0c;将真实场景进行三维扫描并转换成计算机可识别的三维模型&#xff0c;使用户能够在虚拟空间中自由漫游&#xff0c;体验身临其境的感觉。3DVR技术结合了全景拍摄和虚拟现实&#xff0c;提…