命名空间是什么
命名空间是集群里的逻辑隔离边界:大多数资源归属于某一个命名空间,名称只要在同一个命名空间内唯一即可。它决定了默认查询范围、权限授予范围与资源配额的生效范围。日常操作里最常踩的坑几乎都来自「忘了自己现在在哪个命名空间」。
什么不属于任何命名空间
集群级资源不归属命名空间,例如节点、存储类、集群角色与准入策略。这意味着在命名空间之间切换上下文时,看到的节点与存储类始终是同一份。理解这条边界,才能在排查时知道哪些对象需要跨命名空间视角去看。
基本信息
| 适用环境 | 任何 Kubernetes 发行版 |
|---|---|
| 常用系统命名空间 | 默认、系统组件、公共、节点租约四个 |
| 资源归属 | 大多数资源必须归属某个命名空间 |
| 集群级资源 | 节点、存储类、集群角色等不属于任何命名空间 |
| 切换默认值 | 通过修改当前上下文的默认命名空间实现 |
| 配额与限制 | 资源配额与默认限制按命名空间生效 |
典型使用场景
- 环境隔离:开发、测试、生产各用一个命名空间,减少互相影响
- 团队隔离:按团队划分命名空间,配合权限管理限定操作范围
- 配额管理:为每个命名空间设定资源配额,防止单业务占满集群
- 发布隔离:同一个应用的不同版本分别部署到不同命名空间
- 排查定位:确认对象实际所在的命名空间,避免在错误范围里查找
- 清理环境:删除命名空间即可连同其中资源一起回收
常用操作
常用操作
kubectl get ns # 列出所有命名空间
kubectl get ns --show-labels # 带上标签便于筛选
kubectl create ns staging # 新建命名空间
kubectl config set-context --current --namespace=staging # 切换默认命名空间
kubectl get pods -n kube-system # 在指定命名空间内查询
kubectl get events -A --sort-by=.lastTimestamp | tail -20 # 跨命名空间视角隔离能力边界
| 维度 | 命名空间能否隔离 | 说明 |
|---|---|---|
| 名称与查询范围 | 能 | 同名对象可存在于不同命名空间 |
| 权限 | 能 | 通过角色绑定限定在命名空间内 |
| 资源配额 | 能 | 配额与默认限制按命名空间生效 |
| 网络 | 默认不能 | 需要网络策略才能限制互通 |
| 节点与存储类 | 不能 | 这些是集群级资源,跨命名空间共享 |
脚本中建议每条命令都显式带上命名空间参数,避免依赖上下文默认值而误操作到其他环境。
删除命名空间会级联删除其中所有资源且不可撤销,执行前先列出里面的对象确认没有需要保留的内容。