一、cgroup 基础概念
(一)什么是 cgroup
cgroup(Control Groups)是 Linux 内核提供的资源隔离与控制机制,用于限制、统计和监控进程组(如容器)的资源使用。它可以管理多种资源类型,包括:
- CPU:分配核心数、时间片权重。
- 内存:限制最大使用量、Swap 控制。
- I/O:磁盘和网络带宽限制。
- 进程数:防止 fork bomb。
- 设备访问:限制特定设备使用。
(二)核心组件
| 组件 | 功能 |
|---|---|
| Hierarchy | 树状层级结构,每个层级绑定一个或多个子系统(如 CPU、Memory) |
| Subsystem | 资源控制器(如 cpu、memory、blkio),负责具体资源管理 |
| Cgroup | 层级中的节点,包含一组进程及其资源限制规则 |
| Task | 进程(线程),属于某个 cgroup,资源受其规则约束 |
(三)cgroup v1 vs v2
| 特性 | cgroup v1 | cgroup v2 |
|---|---|---|
| 层级结构 | 多层级,每个子系统独立 | 单一层级,统一管理所有子系统 |
| 资源分配模型 | 分散控制 | 统一权重分配(如 cpu.weight) |
| 内存控制 | memory.limit_in_bytes |
memory.max |
| 兼容性 | 广泛支持 | 需较新内核(≥4.15) |
二、Kubernetes 中的 cgroup
(一)资源限制
Kubernetes 通过 cgroup 实现对容器资源的限制,主要通过以下两种方式:
- limits:限制容器的资源使用量,如 CPU、内存等。
- requests:为容器请求资源,Kubernetes 调度器会根据请求的资源量进行调度。
例如,以下配置为容器设置了内存和 CPU 的限制:
resources


4319

被折叠的 条评论
为什么被折叠?



