0

0

Linux container runtime 的 cgroup-driver=systemd vs cgroupfs 统一迁移

冷漠man

冷漠man

发布时间:2026-02-17 15:35:02

|

807人浏览过

|

来源于php中文网

原创

这是典型的 cgroup 驱动不匹配问题:宿主机用 systemd 管理 cgroups,但 kubelet 配置为 cgroupfs,导致无法获取根 cgroup 统计,进而使资源限制、oom 判定等功能失效。

linux container runtime 的 cgroup-driver=systemd vs cgroupfs 统一迁移

为什么 kubelet 启动失败并报 “failed to run Kubelet: failed to get root cgroup stats”?

这是典型的 cgroup 驱动不匹配问题:宿主机用 systemd 管理 cgroups(现代主流发行版默认),但 kubelet 却配置成 cgroupfs,导致它找不到正确的 cgroup 根路径,连带容器运行时(如 containerd)的统计、OOM 判定、CPU/内存限制全部失效。

  • 检查当前系统实际使用的 cgroup 版本:stat -fc %T /sys/fs/cgroup —— 若输出 cgroup2fs,说明是 cgroup v2 + systemd;若为 cgroupfs 且目录下有 systemd 子目录,大概率是 cgroup v1 + systemd 混合模式
  • kubelet--cgroup-driver 必须和 containerdconfig.toml[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 下的 SystemdCgroup = true/false 严格一致
  • 常见错误:只改 kubelet 参数,忘了同步改 containerd 配置,结果 kubelet 起来了,但 Pod 一直卡在 ContainerCreating

如何安全地把已运行集群从 cgroupfs 迁移到 systemd

不能直接改参数重启,否则所有 Pod 的 cgroup 路径会断开,资源限制立即失效,可能触发批量 OOM 或 CPU 抢占异常。

  • 先确认 containerd 已启用 systemd cgroup:编辑 /etc/containerd/config.toml,确保 SystemdCgroup = true,然后执行 sudo systemctl restart containerd
  • 再更新 kubelet:修改 /var/lib/kubelet/kubeadm-flags.env(或 systemd unit 文件中的 Environment="KUBELET_EXTRA_ARGS=..."),加入 --cgroup-driver=systemd
  • 必须滚动重启节点:逐台 drain → 停 kubelet → 清空 /var/lib/kubelet/cgroup(如有)→ 启 kubelet → 等 Ready → uncordon。跳过清空步骤可能导致旧 cgroup 目录残留,kubelet 统计错乱

systemd cgroup driver 在 cgroup v2 下有哪些实际差异?

cgroup v2 是单层树、统一接口,而 systemd 驱动在 v2 下不再依赖 /sys/fs/cgroup/<controller>/kubepods/...</controller> 这类传统路径,而是通过 systemd unit 名称(如 kubepods-burstable-podxxx.slice)组织层级,这对监控和调试带来变化。

Heeyo
Heeyo

Heeyo:AI儿童启蒙陪伴师,风靡于硅谷的儿童AI导师和玩伴

下载
  • crictl statskubectl top pod 仍可用,但底层数据来自 systemd 的 dbus 接口或 /sys/fs/cgroup/cgroup.procs,不是传统文件读取
  • 手动 inspect cgroup:用 systemctl status <unit-name></unit-name> 查资源使用,或 cat /sys/fs/cgroup/<unit-name>/cpu.max</unit-name>(v2)代替旧版 cpu.cfs_quota_us
  • 某些老版本监控 agent(如早期 cadvisor)对 v2 + systemd 支持不完整,可能显示 0 值或 panic,需升级到 v0.47+

哪些场景下硬切 systemd 会出意料之外的问题?

不是所有环境都适合一刀切。尤其当节点混用多种运行时(比如同时跑 Docker、Podman、containerd),或使用自定义 cgroup 路径时,systemd 驱动可能绕过你预设的隔离逻辑。

  • Docker 用户注意:Docker CE 24.0+ 默认用 systemd cgroup,但若你还在用 dockerd --exec-opt native.cgroupdriver=cgroupfs,和 kubelet 的 systemd 驱动共存会导致 cgroup 层级冲突
  • 内核参数未调优:cgroup v2 + systemd 要求 systemd.unified_cgroup_hierarchy=1,若 BIOS/UEFI 启用了 legacy cgroup,该参数会被忽略,kubelet 会静默回退到 cgroup v1 行为,但日志不报错
  • SELinux 强制模式下,systemd 创建的 cgroup slice 可能被策略拒绝写入,表现为 Pod 启动超时,需检查 ausearch -m avc -ts recent

迁移的核心不是改一个参数,而是确认整个 cgroup 生命周期——从内核挂载、systemd 初始化、containerd 创建 runtime、到 kubelet 分配 pod scope——全部落在同一套语义里。少一环,就可能在半夜收到 CPU 使用率突增告警,却查不到是哪个 Pod 在啃资源。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1486

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

403

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2225

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

37

2026.01.19

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

265

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

512

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

411

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

447

2024.04.08

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

462

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.2万人学习

Git 教程
Git 教程

共21课时 | 3.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号