在 Linux 上,约束分配给进程的资源。
和底层容器运行时都需要对接 cgroup
来强制执行[为 Pod 和容器管理资源],
这包括为容器化工作负载配置 CPU/内存请求和限制。
Linux 中有两个 cgroup 版本:cgroup v1 和 cgroup v2。cgroup v2 是新一代的 cgroup
API。
cgroup v2 是 Linux cgroup
API 的下一个版本。cgroup v2 提供了一个具有增强资源管理能力的统一控制系统。
cgroup v2 对 cgroup v1 进行了多项改进,例如:
一些 Kubernetes 特性专门使用 cgroup v2 来增强资源管理和隔离。
例如,[MemoryQoS] 特性改进了内存 QoS 并依赖于 cgroup v2 原语。
使用 cgroup v2 的推荐方法是使用一个默认启用 cgroup v2 的 Linux 发行版。
要检查你的发行版是否使用 cgroup v2,请参阅[识别 Linux 节点上的 cgroup 版本]。
cgroup v2 具有以下要求:
有关使用 cgroup v2 的 Linux 发行版的列表,
请参阅 [cgroup v2 文档]。
要检查你的发行版是否使用 cgroup v2,
请参阅你的发行版文档或遵循[识别 Linux 节点上的 cgroup 版本]中的指示说明。
你还可以通过修改内核 cmdline 引导参数在你的 Linux 发行版上手动启用 cgroup v2。
如果你的发行版使用 GRUB,则应在 /etc/default/grub
下的 GRUB_CMDLINE_LINUX
中添加 systemd.unified_cgroup_hierarchy=1
,
然后执行 sudo update-grub
。不过,推荐的方法仍是使用一个默认已启用 cgroup v2 的发行版。
要迁移到 cgroup v2,需确保满足[要求],然后升级到一个默认启用 cgroup v2 的内核版本。
kubelet 能够自动检测操作系统是否运行在 cgroup v2 上并相应调整其操作,无需额外配置。
切换到 cgroup v2 时,用户体验应没有任何明显差异,除非用户直接在节点上或从容器内访问 cgroup 文件系统。
cgroup v2 使用一个与 cgroup v1 不同的 API,因此如果有任何应用直接访问 cgroup 文件系统,
则需要将这些应用更新为支持 cgroup v2 的版本。例如:
cgroup 版本取决于正在使用的 Linux 发行版和操作系统上配置的默认 cgroup 版本。
要检查你的发行版使用的是哪个 cgroup 版本,请在该节点上运行 stat -fc %T /sys/fs/cgroup/
命令:
stat -fc %T /sys/fs/cgroup/
对于 cgroup v2,输出为 cgroup2fs
。
对于 cgroup v1,输出为 tmpfs
。