Namespace 是把业务和团队"分开管"的逻辑隔离;而 cgroup 是 Linux 在节点上把 CPU、内存这些"卡住限量"的资源隔离,一个管"边界",一个管"额度"。
Namespace 是集群里的"分区管理",cgroup 是节点上的"资源限流"。
命名空间是在多个用户之间通过资源配额划分集群资源的一种方法。而cgroup是用于对系统资源(如CPU、内存、磁盘 I/O、网络等)进行分组管理和限制

很多人听到"命名空间",第一反应是"是不是像虚拟机一样又起了个集群?"其实更准确的说法是:Kubernetes 只有一个物理集群,但它可以被切成很多个"逻辑小区",这些小区就是 Namespace。你可以把它理解成同一个商场里的不同楼层:大家共用一套水电和建筑(同一个集群和节点),但每层楼有自己的商铺、自己的管理规则、自己的门禁权限。
Namespace 最核心的价值,是把"多人、多团队、多项目"这种复杂场景变得好管理。它会给资源名字划一个范围:同名资源在不同 Namespace 可以同时存在,比如 dev 里一个 web,prod 里也可以有一个 web,互不冲突;但在同一个 Namespace 里,名字必须唯一。Namespace 也不会嵌套,一个资源只属于一个 Namespace,这让边界很清楚,谁的就是谁的,不会缠在一起。
而且 Namespace 不只是"起名字方便",它是管理的基本单位。权限(RBAC)通常按 Namespace 授权:A 团队只能操作 team-a 里的东西;资源配额(ResourceQuota)也常常按 Namespace 划:这个团队最多能用多少 CPU、多少内存、能建多少个 Pod。换句话说,Namespace 更像是"组织结构 + 权限边界 + 配额边界"的组合拳,用来隔离用户的业务,而不是隔离机器资源本身。
你会发现 Kubernetes 启动时就自带几个默认 Namespace,这也说明它是"集群管理"层面的东西:default 给你开箱即用;kube-system 放系统组件;kube-public 放一些全员可读的资源;kube-node-lease 用来放节点心跳相关的 Lease,帮助控制面判断节点是否健康。它们更像是集群内部的"功能分区",不是让你拿来跑业务的全部地方,但能让你理解:Namespace 的本质就是分区管理。
那 cgroup 呢?它不是 Kubernetes 发明的,是 Linux 内核提供的能力。Namespace 解决的是"大家在一个集群里怎么分开用",cgroup 解决的则是"在同一台机器上,谁能用多少资源"。你在 Pod 里写的 requests/limits,最后真正落地就是靠 kubelet 和容器运行时把限制下发到 cgroup:这个容器最多用多少 CPU、最多吃多少内存,超了会被限速,或者直接 OOM 掉。也就是说,cgroup 是硬杠杠,是节点层面真正管资源的那只手。
所以从"隔离"的角度看,这两者完全不是一件事:Namespace 让不同团队的资源、权限、配额分得清清楚楚,避免"你动了我的服务";cgroup 则保证某个 Pod 不会把整台节点的 CPU/内存吃光,避免"你把大家都拖死"。很多人把它们都叫隔离,但一个是管理隔离,一个是资源隔离,配合起来才是 Kubernetes 能在同一套物理集群上支撑多租户、多业务的关键。