Linux CGroups v2 介绍

发布时间: 更新时间: 总字数:451 阅读时间:1m 作者: IP上海 分享 网址

Linux 中有两个 cgroup 版本:cgroup v1 和 cgroup v2。cgroup v2 是新一代的 cgroup API。

介绍

  • cgroup v2 提供了一个具有增强资源管理能力的统一控制系统
  • API 中单个统一的层次结构设计
  • 更安全的子树委派给容器
  • 更新的功能特性, 例如压力阻塞信息(Pressure Stall Information,PSI)
  • 跨多个资源的增强资源分配管理和隔离
    • 统一核算不同类型的内存分配(网络内存、内核内存等)
    • 考虑非即时资源变化,例如页面缓存回写
  • 一些 Kubernetes 特性专门使用 cgroup v2 来增强资源管理和隔离。例如,MemoryQoS 特性改进了内存 QoS 并依赖于 cgroup v2 原语。

Linux 发行版 cgroup v2 支持

有关使用 cgroup v2 的 Linux 发行版的列表, 请参阅 cgroup v2 文档。

  • Container-Optimized OS(从 M97 开始)
  • Ubuntu(从 21.10 开始,推荐 22.04+)
  • Debian GNU/Linux(从 Debian 11 Bullseye 开始)
  • Fedora(从 31 开始)
  • Arch Linux(从 2021 年 4 月开始)
  • RHEL 和类似 RHEL 的发行版(从 9 开始)
  • 容器运行时支持 cgroup v2。例如:
    • containerd v1.4 和更高版本
    • cri-o v1.20 和更高版本

识别 Linux 节点上的 cgroup 版本

# cgroup v2 输出为 cgroup2fs; cgroup v1,输出为 tmpfs
stat -fc %T /sys/fs/cgroup/

实现

可用的 cgroup 驱动有两个:

  • cgroupfs
  • systemd

docker

  • 查看
docker info | grep "Cgroup Driver"
  • 配置 /etc/docker/daemon.json
{
    "exec-opts": [
        "native.cgroupdriver=systemd"
    ]
}

参考

  1. https://kubernetes.io/zh-cn/docs/concepts/architecture/cgroups/
  2. https://github.com/opencontainers/runc/blob/main/docs/cgroup-v2.md
  3. https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#cgroup-drivers
  4. https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数