Kubernetes Namespace 详解:资源隔离与多租户管理
在 Kubernetes 的集群管理中,Namespace(命名空间) 是实现资源隔离与多租户管理的核心机制之一。它允许在一个物理集群上划分出多个虚拟集群,满足多团队、多项目并行使用集群的场景需求。
一、Namespace 核心概念
Kubernetes 的 Namespace 为资源名称提供作用域:
- 同一命名空间内的资源名称必须唯一,不同命名空间的资源名称可重复;
- 命名空间之间不能相互嵌套,每个 Kubernetes 资源仅属于一个命名空间;
- 它是多用户场景下通过资源逻辑划分实现资源隔离的有效方法。
二、Kubernetes 初始命名空间
集群启动时会自动创建四个初始命名空间,各自承担不同角色:
| 命名空间 | 作用说明 | 
|---|---|
| default | 默认命名空间,不创建新命名空间时,资源默认部署到该命名空间 | 
| kube-node-lease | 包含与节点关联的 Lease(租约)对象,用于 kubelet 心跳检测,保障节点故障识别 | 
| kube-public | 所有客户端(含未认证客户端)可读,预留给集群级公共资源(如集群信息配置),“公共性” 为社区约定 | 
| kube-system | 用于部署 Kubernetes 系统组件(如 kube-dns、dashboard 等)的命名空间 | 
三、Namespace 创建方式
1. 命令行创建
通过kubectl命令直接创建,示例:
kubectl create namespace mynamespace
创建后,可通过以下命令查看所有命名空间:
kubectl get namespaces
2. YAML 文件创建
编写 YAML 配置文件(如namespace.yml)定义命名空间:
apiVersion: v1
kind: Namespace
metadata:name: nobody
通过以下命令应用配置文件创建:
kubectl create -f namespace.yml
四、Namespace 实用用例
1. 为资源指定 Namespace
创建资源时,通过--namespace参数指定所属命名空间。以创建 Nginx Pod 为例:
kubectl run nginx --image=nginx --namespace=mynamespace
查看该命名空间下的 Pod:
kubectl get pod -n mynamespace
2. 设置默认 Namespace
为避免每次操作都指定--namespace,可设置默认命名空间:
kubectl config set-context --current --namespace=mynamespace
验证默认命名空间:
kubectl config view | grep namespace:
之后执行资源查询(如kubectl get pod)会默认在该命名空间下操作。
3. 删除 Namespace
删除命名空间时会同时删除其下所有资源。若要删除已设为默认的命名空间,需先切换默认命名空间再执行删除:
# 切换默认命名空间为default
kubectl config set-context --current --namespace=default
# 删除命名空间
kubectl delete namespaces mynamespace nobody
总结
Namespace 是 Kubernetes 实现资源隔离、多租户管理的关键工具。通过合理规划命名空间,团队可在共享物理集群的同时,保障资源的逻辑隔离与管理效率。掌握其创建、使用和删除的细节,是 Kubernetes 集群管理的基础技能之一。
