【Kubernetes】(三) Namespace
·
好久没写和K8s相关的了,今天就开始继续写!!!
目录
一、Namespace 核心概念
Namespace 是 Kubernetes 提供的资源分组隔离方案,底层依赖同一个物理集群,为资源名称提供独立作用域:
- 资源名称仅需在命名空间内唯一,无需跨命名空间保证唯一
- 命名空间不可嵌套,每个 Kubernetes 资源只能归属一个命名空间
- 核心作用:通过资源配额,在多用户 / 多团队间划分集群资源
- 作用域限制:仅对命名空间级资源(如 Pod、Deployment、Service 等)生效,对集群级资源(如 Node、StorageClass、PersistentVolume 等)不适用
系统默认 4 个初始命名空间
Kubernetes 启动时会自动创建 4 个核心命名空间,各司其职:
表格
| 命名空间 | 核心作用 |
|---|---|
default |
默认命名空间,未指定命名空间的资源会自动创建于此,是新手入门的默认操作环境 |
kube-node-lease |
存储节点租约(Lease)对象,用于 kubelet 向 apiserver 发送心跳,实现节点故障检测 |
kube-public |
全可读命名空间,所有客户端(含未认证用户)均可读取,预留为集群全局公共资源使用 |
kube-system |
系统命名空间,存储 Kubernetes 核心组件的运行资源,是集群正常运行的核心 |
二、Namespace 两种创建方式
1. 命令行快速创建(适合临时场景)
# 创建名为 mynamespace 的命名空间
kubectl create namespace mynamespace
# 查看所有命名空间(ns 是 namespace 的简写)
kubectl get namespaces
执行后可看到新创建的命名空间状态为 Active,与 4 个默认命名空间并列。
2. YAML 文件创建(适合生产环境,可复用)
编写 namespace.yml 配置文件:
apiVersion: v1
kind: Namespace
metadata:
name: nobody
执行创建命令:
# 从 YAML 文件创建命名空间
kubectl create -f namespace.yml
创建完成后,可通过 kubectl get ns 验证命名空间已成功创建。
三、Namespace 核心用例与实操
1. 为资源指定命名空间
创建资源时通过 --namespace(简写 -n)指定归属,实现资源分组:
# 在 mynamespace 命名空间中创建 nginx Pod
kubectl run nginx --image=nginx --namespace=mynamespace
# 查看指定命名空间下的 Pod
kubectl get pod -n mynamespace
2. 设置默认命名空间
通过配置上下文,省略每次操作的 -n 参数,提升操作效率:
# 将当前上下文的默认命名空间设为 mynamespace
kubectl config set-context --current --namespace=mynamespace
# 验证配置是否生效
kubectl config view | grep namespace:
# 直接查看 Pod,自动匹配默认命名空间
kubectl get pod
四、关键注意事项与避坑指南
1. 删除风险警示
删除命名空间会级联删除其下所有资源(包括 Pod、Deployment、Service 等),操作前务必确认,避免误删业务资源。
2. 默认命名空间删除限制
若已将某命名空间设为默认,需先切换回其他命名空间(如 default),再执行删除操作:
# 切换默认命名空间回 default
kubectl config set-context --current --namespace=default
# 批量删除命名空间
kubectl delete namespaces mynamespace nobody
五、高频题解答
Q1:什么是 K8s 的 namespace?
A:Namespace 是 Kubernetes 提供的资源分组隔离机制,将同一物理集群划分为多个逻辑独立的虚拟集群,用于多用户、多项目间的资源划分,仅对命名空间级资源生效,对集群级资源不适用。
Q2:系统默认创建了哪几个 namespace?
A:共 4 个,分别是 default(用户默认命名空间)、kube-node-lease(节点心跳租约)、kube-public(全局可读公共资源)、kube-system(系统核心组件资源)。
更多推荐


所有评论(0)