Kubernetes 命名空间

命名空间(Namespace)是集群内部的逻辑分区,用来把资源分组隔离。它解决的是"一个集群被多个团队、多个环境共用时如何互不干扰"的问题——很多资源(如 Pod、Service)的名字只在同一个命名空间内唯一。

命名空间的作用

  • 资源分组:按项目、团队、环境划分,一目了然。
  • 权限边界:配合 RBAC 给不同命名空间授予不同权限。
  • 配额边界:可对单个命名空间设置资源限额,防止某团队吃光集群。
  • 逻辑隔离:注意它不做网络隔离,命名空间之间的互通由网络策略(NetworkPolicy)决定。

默认的四个命名空间

新建集群自带四个命名空间,各有用途:

命名空间用途
default未指定命名空间的资源默认放这里
kube-systemKubernetes 系统组件(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,多团队共用集群才不会乱。记住删除命名空间是级联删除,动手前先确认里面没有重要资源。

笔记加载中…