RootFS-Quotas:容器磁盘配额管理
containerd rootfs quota, 基于containerd的非侵入式容器rootfs限额方案
·
一款专为 containerd 环境打造,轻松搞定容器根文件系统的磁盘配额管理。
地址: github: vulyon/rootfs-quotas
痛点与挑战
在容器生态中,以下场景屡见不鲜:
- 磁盘被撑爆:某个容器的日志、缓存文件突然“失控”,瞬间占用数百 GB 磁盘空间。
- 节点故障:单个容器写满
/var/lib/containerd,导致整个节点磁盘耗尽,影响其他服务。 - 排查困难:Kubernetes Pod 因磁盘压力被驱逐,但难以快速定位肇事容器。
- 功能缺失:containerd + overlay2 环境下,缺乏类似 Docker
--storage-opt size=10G的原生限制支持。
解决方案:
RootFS-Quota 为容器根文件系统提供自动化、规则化的磁盘配额管理。无需手动干预,无需修改镜像或容器配置,即可解决上述痛点。
核心亮点
- 自动生效 + 规则灵活
- 容器启动时自动应用配额。
- 支持按容器名、镜像、K8s Pod 设置规则。
- 支持差异化限制(如:边车容器 100M,数据库 10G)。
- 全生命周期管理
- 实时监听 containerd 事件,响应迅速。
- 容器删除后自动清理配额,无残留。
- 无侵入性,现有容器不受影响。
- 广泛兼容
- 支持 Docker(containerd 运行时)、Kubernetes 及原生 containerd (ctr/nerdctl)。
- 支持 XFS 和 ext4 文件系统。
工作原理
底层基于 Linux 内核成熟的 Project Quota 技术。
代码段
graph TD
A[容器创建完成] --> B(containerd 事件监听)
B -->|实时捕捉状态变化| C{规则匹配引擎}
subgraph Rules [预设匹配规则]
R1[容器名称]
R2[镜像名称/标签]
R3[Pod 元数据]
end
Rules -.-> C
C -->|匹配成功| D[应用项目配额]
subgraph Action [执行动作]
D1[提取 upperdir 目录]
D2[分配项目 ID]
D3[设置配额限制 xfs_quota]
end
D --> Action
- 事件监听:订阅 containerd 事件流,监控容器生命周期。
- 路径探测:定位容器的
upperdir(overlay 可写层)。 - 规则匹配:根据配置(容器/镜像/Pod)确定配额大小。
- 配额生效:利用 Project Quota 在
upperdir强制执行限制。 - 自动清理:容器销毁时同步移除配额配置。
文件系统支持:
- XFS:原生支持(推荐)。
- ext4:需在挂载参数中添加
prjquota。
快速上手
1. 配置文件 (config.yaml)
YAML
manager:
runtime: containerd # 运行时类型
mountPoint: /var/lib/containerd # 挂载路径
autoQuota: true # 开启自动配额
size: 30G # 默认兜底配额
matchRules:
# 规则: nginx 镜像限制 5G
- size: 5G
level: image
selector:
name: nginx
# 规则: production 命名空间下,名称以 database- 开头的 Pod 限制 20G
- size: 20G
level: pod
selector:
namespace: production
name: database-
2. 启动代理
Bash
./rootfs-quota -config /etc/quota-agent/config.yaml
适用场景
| 场景 | 描述 |
|---|---|
| 多租户环境 | 防止单一租户容器占用所有磁盘资源。 |
| 开发集群 | 为开发者的容器设置宽松配额,防止构建产物失控。 |
| 生产 K8s | 按负载类型分级: • 边车:小额度 • 应用:中额度 • 有状态:大额度 |
| 安全防御 | 避免恶意或意外的“磁盘炸弹”攻击。 |
项目优势
RootFS-Quota 填补了 containerd 在 overlay 文件系统下配额管理的空白:
- 零侵入:无需修改 containerd 源码。
- 全兼容:适配现有镜像与生态。
- 高性能:支持数千容器并发,基于内核机制,开销极低。
参与贡献
如果您在生产环境中遇到问题,或有新的功能建议,欢迎加入我们:
- 提交 Issue 反馈 Bug 或需求。
- 提交 Pull Request 贡献代码。
未来规划 (Roadmap)
- 支持更多文件系统(如 btrfs)。
- 集成 Prometheus 监控指标。
- 支持 Kubernetes 方式(deployment+daemonset)。
- 支持软配额 (Soft Limit) 与硬配额 (Hard Limit)。
📚 了解更多
如果您觉得项目有用,欢迎在 GitHub 上点个 Star 支持!
更多推荐

所有评论(0)