目录
[一、Namespace 核心概念:什么是 Kubernetes Namespace?](#一、Namespace 核心概念:什么是 Kubernetes Namespace?)
[Kubernetes 初始默认 Namespace](#Kubernetes 初始默认 Namespace)
[二、Namespace 实操创建:命令行与 YAML 双方式](#二、Namespace 实操创建:命令行与 YAML 双方式)
[2.1 命令行创建(kubectl create namespace)](#2.1 命令行创建(kubectl create namespace))
[2.2 YAML 文件创建(资源配置式)](#2.2 YAML 文件创建(资源配置式))
[三、Namespace 实际应用:资源归属与默认命名空间配置](#三、Namespace 实际应用:资源归属与默认命名空间配置)
[3.1 为 Namespace 部署资源](#3.1 为 Namespace 部署资源)
[3.2 设置默认 Namespace(简化操作)](#3.2 设置默认 Namespace(简化操作))
[四、总结:Namespace 的核心价值与使用场景](#四、总结:Namespace 的核心价值与使用场景)
前言:
在 Kubernetes(K8s)集群的日常运维与开发中,随着业务团队、项目数量的增加,集群内资源的管理、隔离与资源配额分配成为核心痛点。而 Namespace(命名空间) 正是 Kubernetes 解决这一问题的核心机制,它为集群提供了 "虚拟集群" 级别的资源隔离能力,是多团队、多项目共享物理集群的关键基础。
一、Namespace 核心概念:什么是 Kubernetes Namespace?
Kubernetes 支持在同一个物理集群上抽象出多个虚拟集群 ,这些虚拟集群就是 Namespace。其核心价值在于资源隔离与命名范围划分,具体特性如下:
- 命名唯一性 :资源名称需在 Namespace 内唯一,跨 Namespace 则无需唯一(例如两个不同 Namespace 下可同时存在名为
nginx的 Pod)。 - 不支持嵌套:Namespace 之间是相互独立的,无法嵌套,每个 Kubernetes 资源仅归属一个 Namespace。
- 资源配额隔离:通过 Namespace 可对集群资源(CPU、内存等)进行配额划分,实现多用户 / 多团队间的资源公平分配,避免单一方资源占用过度。
Kubernetes 初始默认 Namespace
Kubernetes 集群启动时会自动创建 4 个初始 Namespace,用于存放系统核心资源,不可随意删除:
表格
| Namespace 名称 | 核心作用 |
|---|---|
default |
未指定 Namespace 时,资源默认归属的命名空间,新集群可直接使用无需手动创建。 |
kube-node-lease |
存放节点 Lease(租约)对象,Kubelet 通过租约发送心跳,让控制面实时检测节点故障,保障集群节点可用性。 |
kube-public |
所有客户端(含未验证客户端)均可读取,预留为集群公共资源使用,其 "公共属性" 仅为约定而非强制要求。 |
kube-system |
存放 Kubernetes 系统组件创建的资源(如控制面、网络插件等),确保系统核心进程的隔离与管理。 |
二、Namespace 实操创建:命令行与 YAML 双方式
创建 Namespace 是 Kubernetes 基础操作,支持命令行(kubectl) 和YAML 配置文件两种主流方式,以下结合实操截图详细说明。
2.1 命令行创建(kubectl create namespace)
通过 kubectl 命令可快速创建 Namespace,且能直接查看创建结果,适合临时创建或自动化脚本场景。
实操步骤与截图解析
bash
# 1. 创建名为 mynamespace 的 Namespace
kubectl create namespace mynamespace
# 2. 查看所有 Namespace,验证创建结果
kubectl get namespaces
- 执行
kubectl create namespace mynamespace后,返回namespace/mynamespace created表示创建成功; - 执行
kubectl get namespaces(可简写为kubectl get ns)后,输出列表中新增mynamespace,状态为Active,说明命名空间已正常启用; - 列表中同时包含默认的 4 个初始 Namespace,与前文概念完全对应。
2.2 YAML 文件创建(资源配置式)
YAML 方式是 Kubernetes 标准化的资源管理方式,适合版本控制、持久化管理,是生产环境的推荐方案。
实操步骤与截图解析
bash
# 1. 编写 YAML 文件定义 Namespace 资源
cat > namespace.yml <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: nobody
EOF
# 2. 通过 YAML 创建 Namespace
kubectl create -f namespace.yml
apiVersion: v1:Namespace 对应的 API 版本,固定为v1;kind: Namespace:明确资源类型为命名空间;metadata.name: nobody:指定 Namespace 名称为nobody。
三、Namespace 实际应用:资源归属与默认命名空间配置
创建 Namespace 后,核心用途是归属于特定命名空间的资源管理,包括资源指定部署、默认命名空间切换等,以下结合实操案例说明。
3.1 为 Namespace 部署资源
以部署 Nginx Pod 为例,明确指定资源归属的 Namespace,实现资源隔离:
bash
# 在 mynamespace 下创建 Nginx Pod
kubectl run nginx --image=nginx --namespace=mynamespace
# 查看 mynamespace 下的 Pod,需指定 -n/--namespace 参数
kubectl get pod -n mynamespace
核心解读:
--namespace=mynamespace:指定 Pod 仅部署在mynamespace下,与其他命名空间的同名资源完全隔离;- 执行
kubectl get pod -n mynamespace可精准查看该命名空间内的资源,避免跨命名空间资源干扰。
3.2 设置默认 Namespace(简化操作)
若长期操作某一个 Namespace 下的资源,可通过配置设置默认命名空间,省略后续查询 / 操作的 --namespace 参数,提升效率:
bash
# 1. 设置当前上下文的默认 Namespace 为 mynamespace
kubectl config set-context --current --namespace=mynamespace
# 2. 验证默认 Namespace 配置
kubectl config view | grep namespace:
# 3. 直接查看 Pod,无需指定 -n 参数
kubectl get pod
核心解读:
set-context --current --namespace=mynamespace:将当前操作上下文的默认命名空间设为mynamespace;- 配置生效后,执行
kubectl get pod可直接查看默认命名空间(mynamespace)内的资源,无需额外指定-n参数,简化日常操作。
四、总结:Namespace 的核心价值与使用场景
Kubernetes Namespace 是集群资源管理的 "基石",核心价值体现在三个方面:
- 资源隔离:多团队、多项目共享物理集群,避免资源命名冲突与资源占用干扰;
- 环境划分:快速创建开发、测试、生产等独立环境,保障环境隔离;
- 资源配额:基于 Namespace 分配 CPU、内存等资源配额,实现集群资源的精细化管理。