You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用Kubernetes特权模式后/sys/fs/cgroup/cpuset.cpus丢失问题

Kubernetes特权Pod中cpuset.cpus文件消失问题解析

问题描述

在Kubernetes Pod中启用特权模式后,/sys/fs/cgroup/cpuset.cpus文件消失,具体测试步骤:

  • 创建无特权模式的Pod(test.yaml),配置CPU请求与限制均为4核、内存2Gi;
  • 进入容器执行cat /sys/fs/cgroup/cpuset.cpus,可正常返回分配的CPU列表(如44,46,100,102),环境采用cgroupv2文件系统;
  • 删除原Pod后,添加securityContext.privileged: true参数创建新Pod;
  • 再次进入容器执行相同命令,提示cat: /sys/fs/cgroup/cpuset.cpus: No such file or directory。

环境信息

  • Kubernetes版本:1.26.2
  • Cgroup驱动:systemd
  • Containerd版本:1.6.20
  • OS版本:Ubuntu 22.04.2
  • 内核:5.15.0-76-generic

原因分析

当Pod启用特权模式时,容器会直接挂载宿主机的完整cgroup根目录,而非Kubernetes为普通Pod创建的独立cgroup子层级:

  1. 普通Pod的cgroup逻辑:在cgroupv2环境下,Kubernetes会为每个非特权Pod创建独立的cgroup子层级(路径类似/sys/fs/cgroup/kubepods/...),该层级会继承并应用Pod配置的CPU限制,因此子层级下存在cpuset.cpus文件,记录分配给Pod的CPU核心列表。
  2. 特权Pod的cgroup逻辑:特权容器会直接使用宿主机的cgroup根目录(/sys/fs/cgroup),而根cgroup默认不会生成cpuset.cpus文件——因为根cgroup包含宿主机全部CPU资源,无需通过该文件指定可用CPU,系统会直接使用所有核心。
  3. systemd驱动的影响:当采用systemd作为cgroup驱动时,特权容器的cgroup管理会跳过Kubernetes的资源隔离层,直接复用宿主机的cgroup命名空间,进一步导致容器内无法看到针对该Pod的专属cpuset配置文件。

内容的提问来源于stack exchange,提问作者PJConnol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:32:53