在 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 集群管理的基础技能之一。

更多推荐