CentOS Overlay如何进行资源分配
小樊
36
2025-12-29 10:34:27
CentOS 上 Overlay 资源分配实践
一、先明确 Overlay 的类型
- OverlayFS 文件系统:内核的联合文件系统,将多个目录层叠为一个统一视图,常用于容器镜像/目录层叠与 chroot 场景。
- Docker 的 overlay2 存储驱动:容器运行时把镜像/容器层存放在 /var/lib/docker/overlay2 下,性能与可维护性优于早期驱动。
- Docker Overlay 网络:基于 VXLAN 的覆盖网络,用于跨主机容器通信,与磁盘/内存无关。
以上三者“资源分配”的对象不同:文件系统关注磁盘/Inode,容器存储驱动关注数据层大小与配额,网络关注带宽/连接,请按场景选择对应方案。
二、按场景的资源分配方法
- 容器场景(Docker overlay2)
- 磁盘与 Inode:将 /var/lib/docker 放在 XFS 上,启用 ftype=1 与 项目配额(project quota),再在 Docker 启用 overlay2.size=上限 实现“每个容器层”的磁盘上限。示例要点:
- 格式化与挂载:mkfs.xfs -n ftype=1 -f /dev/mapper/vg-docker;mount -o pquota,uqnoenforce /dev/mapper/vg-docker /var/lib/docker
- Docker 配置:/etc/docker/daemon.json 中加入
{
“storage-drvier”: “overlay2”,
“storage-opts”: [“overlay2.size=10G”]
}
- 重启 Docker 后生效;该方式便于容量告警与按容器层统计。
- 内存/CPU:用 cgroups 限制容器进程(或 Pod 的 cgroup)内存/CPU,例如创建 memory:mygroup 并设置 memory.limit_in_bytes=100MB,再把容器/Pod 的主进程 PID 加入该 cgroup,即可限制其资源使用。
- 非容器场景(直接在 CentOS 上使用 OverlayFS 目录层叠)
- 容量与 Inode:OverlayFS 的可写层在 upperdir,因此“可写占用”受 upperdir 所在文件系统配额/容量约束;若需配额,请将 upperdir 放在 XFS 并启用 project quota。
- 监控与告警:对 upperdir 所在分区设置 磁盘/Inode 告警;若需按“目录”维度统计,可结合 LVM 快照或文件系统项目配额做核算。
- 网络场景(Docker Overlay 网络)
- 带宽/连接:Overlay 网络本身不提供“每容器带宽”开关,建议在宿主机用 tc/tbf/htb 对 veth 或物理口限速,或在 CNI 插件层(如 Calico)启用带宽插件;连接数由应用与内核参数共同决定。
三、关键注意事项
- 内核与文件系统
- 使用 overlay2 建议 内核 ≥ 4.9;在 CentOS 7 上 /var/lib/docker 建议使用 XFS 且 ftype=1,否则 overlay2 可能不可用或不稳定。
- 若需项目配额(project quota),XFS 挂载需带 pquota;某些环境会搭配 uqnoenforce 做“软配额/仅统计”以便监控先行。
- 容量与 Inode
- OverlayFS 层过多可能导致 inode 耗尽(尤其在大量小文件场景),应优先选用 XFS 并监控 Inode 使用率,必要时做分层与清理策略。
- 变更与回滚
- 调整 Docker 存储驱动或挂载选项后需 重启 Docker;变更 /var/lib/docker 的挂载点前务必 备份数据 并规划停机窗口。