Kubernetes 命名空间
命名空间(Namespace)是集群内部的逻辑分区,用来把资源分组隔离。它解决的是"一个集群被多个团队、多个环境共用时如何互不干扰"的问题——很多资源(如 Pod、Service)的名字只在同一个命名空间内唯一。
命名空间的作用
- 资源分组:按项目、团队、环境划分,一目了然。
- 权限边界:配合 RBAC 给不同命名空间授予不同权限。
- 配额边界:可对单个命名空间设置资源限额,防止某团队吃光集群。
- 逻辑隔离:注意它不做网络隔离,命名空间之间的互通由网络策略(NetworkPolicy)决定。
默认的四个命名空间
新建集群自带四个命名空间,各有用途:
| 命名空间 | 用途 |
|---|---|
| default | 未指定命名空间的资源默认放这里 |
| kube-system | Kubernetes 系统组件(apiserver、etcd 等)所在 |
| kube-public | 公共资源,所有用户(含未认证)可读 |
| kube-node-lease | 节点心跳租约对象,供节点可用性检测使用 |
kubectl get namespaces
# NAME STATUS AGE
# default Active 30d
# kube-node-lease Active 30d
# kube-public Active 30d
# kube-system Active 30d
创建与删除命名空间
命令与 YAML 两种方式等价:
kubectl create namespace dev
kubectl delete namespace dev # 会级联删除其中所有资源,谨慎操作
apiVersion: v1
kind: Namespace
metadata:
name: test
后续所有 kubectl 命令都可用 -n 指定命名空间,不加则落到 default:
kubectl get pods -n dev # 查看 dev 下的 Pod
kubectl get pods -A # -A 表示所有命名空间
kubectl apply -f app.yaml -n dev # 把资源创建到 dev
ResourceQuota 限额
ResourceQuota 给命名空间设资源上限,比如 CPU、内存总量与对象数量:
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
namespace: dev
spec:
hard:
requests.cpu: "2" # 所有 Pod 累计最多请求 2 核
requests.memory: 4Gi
pods: "10" # 最多创建 10 个 Pod
超额创建会直接报错:Error from server (Forbidden): exceeded quota。配好限额后,可用 kubectl describe resourcequota -n dev 查看使用量。
何时该拆分命名空间
- 多团队共用集群:每团队一个命名空间,配额与权限都好管。
- 环境隔离:同一集群里划 dev / staging / prod 三套。
- 系统组件与业务分开:业务资源放各自命名空间,别与 kube-system 混在一起。
小结:命名空间是集群内的第一层"文件夹",先按团队或环境拆好,再配上 ResourceQuota 与 RBAC,多团队共用集群才不会乱。记住删除命名空间是级联删除,动手前先确认里面没有重要资源。