温馨提示×

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 的挂载点前务必 备份数据 并规划停机窗口。

0