在Kubernetes(简称K8s)集群中,命名空间(Namespace)是核心资源隔离组件,主要用于实现集群资源的逻辑划分与隔离,是日常集群管理、多环境部署、多团队协作的基础核心能力。本文将从零讲解Namespace的核心作用、查询、创建、删除全流程实操命令,搭配真实集群案例,适合新手入门学习与日常运维查阅。
一、命名空间(Namespace)核心作用
Namespace是K8s中对各类资源和对象的抽象逻辑集合,核心作用是实现集群资源的逻辑隔离,避免不同业务、不同环境的资源相互冲突。其核心特性如下:
- 资源归属规则:日常常用的 Pod、Service、Deployment 等工作负载资源,都隶属于某一个命名空间,未手动指定命名空间的资源,会默认分配到
default命名空间。 - 非命名空间资源:并非所有K8s资源都隶属于命名空间,集群级资源独立于所有命名空间之外,常见的有 Node(节点)、PersistentVolume(持久化卷)、Namespace(命名空间本身)等。
简单来说:命名空间可以将一个K8s物理集群,逻辑上划分为多个独立的虚拟集群,适配开发、测试、生产多环境隔离场景。
二、查看集群所有命名空间
K8s集群初始化后会自动创建4个默认命名空间,可通过核心命令查看全局命名空间列表,命令支持简写,运维使用更便捷。
核心查询命令
kubectl get namespaces(完整命令)简写方式:kubectl get namespace / kubectl get ns集群默认命名空间详解
[root@k8s-master1 ~]# kubectl get namespaces
NAME STATUS AGE
default Active 130m ube-node-lease Active 130m
kube-public Active 130m kube-system Active 130m
k各默认命名空间作用:
- default:默认工作命名空间,所有未指定命名空间的资源,全部默认部署在此空间。
- kube-node-lease:节点租约命名空间,用于维护集群节点心跳、节点状态检测,保障集群节点稳定性。
- kube-public:公共命名空间,该空间下的所有资源支持全集群用户访问,无权限隔离限制。
- kube-system:系统核心命名空间,K8s集群所有系统组件、核心服务资源均部署在此空间,严禁随意修改、删除。
三、查看指定命名空间下的资源
日常运维中,可精准查询某一个命名空间下的全部资源或指定类型资源,方便排查问题、统计资源占用情况。
3.1 查看命名空间下所有资源
核心命令:
kubectl get all --namespace=命名空间名称(可简写 -n 命名空间名称)示例:查询
kube-system 系统命名空间下的所有资源[root@k8s-master1 ~]# kubectl get all --namespace=kube-system
NAME READY STATUS RESTARTS AGE
pod/calico-kube-controllers-7fdc86d8ff-cskfq 1/1 Running 3 5d1h
pod/calico-node-9dpc9 1/1 Running 2 5d1h
pod/calico-node-jdmxw 1/1 Running 3 5d1h
pod/calico-node-krwps 1/1 Running 2 5d1h
pod/calico-node-tttlr 1/1 Running 2 5d1h
pod/coredns-65dbdb44db-mm7cr 1/1 Running 2 5d1h
pod/dashboard-metrics-scraper-545bbb8767-q66bc 1/1 Running 2 5d1h
pod/kubernetes-dashboard-65665f84db-nll6k 1/1 Running 4 5d1h
pod/metrics-server-869ffc99cd-8f4jd 1/1 Running 3 5d1h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/dashboard-metrics-scraper ClusterIP 10.2.246.128 <none> 8000/TCP 5d1h
service/kube-dns ClusterIP 10.2.0.2 <none> 53/UDP,53/TCP,9153/TCP 5d1h
service/kubernetes-dashboard NodePort 10.2.213.30 <none> 443:21351/TCP 5d1h
service/metrics-server ClusterIP 10.2.232.121 <none> 443/TCP 5d1h
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/calico-node 4 4 4 4 4 beta.kubernetes.io/os=linux 5d1h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/calico-kube-controllers 1/1 1 1 5d1h
deployment.apps/coredns 1/1 1 1 5d1h
deployment.apps/dashboard-metrics-scraper 1/1 1 1 5d1h
deployment.apps/kubernetes-dashboard 1/1 1 1 5d1h
deployment.apps/metrics-server 1/1 1 1 5d1h
NAME DESIRED CURRENT READY AGE
replicaset.apps/calico-kube-controllers-7fdc86d8ff 1 1 1 5d1h
replicaset.apps/coredns-65dbdb44db 1 1 1 5d1h
replicaset.apps/dashboard-metrics-scraper-545bbb8767 1 1 1 5d1h
replicaset.apps/kubernetes-dashboard-65665f84db 1 1 1 5d1h
replicaset.apps/metrics-server-869ffc99cd 1 1 1 5d1h3.2 查看命名空间下指定类型资源
核心命令:
kubectl get 资源类型 --namespace=命名空间名称示例:查询
kube-system 命名空间下的所有Pod资源[root@k8s-master1 ~]# kubectl get pod --namespace=kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7fdc86d8ff-cskfq 1/1 Running 3 5d1h
calico-node-9dpc9 1/1 Running 2 5d1h
calico-node-jdmxw 1/1 Running 3 5d1h
calico-node-krwps 1/1 Running 2 5d1h
calico-node-tttlr 1/1 Running 2 5d1h
coredns-65dbdb44db-mm7cr 1/1 Running 2 5d1h
dashboard-metrics-scraper-545bbb8767-q66bc 1/1 Running 2 5d1h
kubernetes-dashboard-65665f84db-nll6k 1/1 Running 4 5d1h
metrics-server-869ffc99cd-8f4jd 1/1 Running 3 5d1h四、创建自定义命名空间
K8s支持命令行快速创建和YAML文件编排创建两种方式,命令行适合快速测试,YAML方式适合标准化、可复用的生产环境部署。
4.1 命令行快速创建(简易版)
核心命令:
kubectl create namespace 命名空间名称实操案例:创建名为 ns1 的命名空间
[root@k8s-master1 ~]# kubectl create namespace ns1
namespace/ns1 created
# 查看创建结果
[root@k8s-master1 ~]# kubectl get ns
NAME STATUS AGE
default Active 5d1h
kube-node-lease Active 5d1h
kube-public Active 5d1h
kube-system Active 5d1h
ns1 Active 10s4.2 YAML文件创建(生产推荐)
YAML是K8s资源编排的标准方式,所有K8s资源均支持通过YAML文件定义、创建,具备可复用、可版本管理、标准化的优势。同时可通过内置命令查询资源语法文档。
4.2.1 常用语法查询命令
kubectl edit 资源类型 资源名:在线编辑已有资源的YAML配置kubectl get 资源类型 资源名 -o yaml:导出已有资源的完整YAML配置kubectl explain 资源类型:查看资源的官方语法文档、字段说明
示例:查询命名空间语法规则
# 查看namespace完整语法参数
kubectl explain namespace
# 查看namespace下级metadata字段语法
kubectl explain namespace.metadata
# 查看metadata下name字段语法说明
kubectl explain namespace.metadata.name 4.2.2 编写YAML配置文件并创建资源
1、新建配置文件
create_ns2.yml[root@k8s-master1 ~]# vim create_ns2.yml文件内容:
apiVersion: v1 # K8s API版本,命名空间固定为v1
kind: Namespace 资源类型:命名空间
metadata: 源元数据
name: ns2 命名空间名称,全局唯一
# # 资 # 2、应用YAML文件,创建命名空间
[root@k8s-master1 ~]# kubectl apply -f create_ns2.yml
namespace/ns2 created
# 验证创建结果
[root@k8s-master1 ~]# kubectl get ns
NAME STATUS AGE
default Active 5d2h
kube-node-lease Active 5d2h
kube-public Active 5d2h
kube-system Active 5d2h
ns1 Active 10m
ns2 Active 46s五、删除命名空间
5.1 核心注意事项(重中之重)
- 删除命名空间会级联删除该命名空间下的所有资源(Pod、Service、Deployment等),类似于MySQL中删除数据库会清空库内所有表,操作风险极高,生产环境需谨慎操作。
- 集群默认命名空间
default、kube-system、kube-public、kube-node-lease禁止删除,删除会导致集群瘫痪。
5.2 命令行删除
核心命令:
kubectl delete namespace 命名空间名称实操案例:删除 ns1 命名空间
[root@k8s-master1 ~]# kubectl delete namespace ns1
namespace "ns1" deleted5.3 YAML文件删除
通过创建资源的YAML文件反向删除对应资源
[root@k8s-master1 ~]# kubectl delete -f create_ns2.yml
namespace "ns2" deleted
# 验证删除结果
[root@k8s-master1 ~]# kubectl get ns
NAME STATUS AGE
default Active 5d2h
kube-node-lease Active 5d2h
kube-public Active 5d2h
kube-system Active 5d2h六、总结
1、Namespace是K8s集群资源逻辑隔离的核心,核心用于多环境、多业务资源分区,规避资源名称冲突;
2、集群4个默认命名空间各司其职,系统空间严禁随意改动;
3、日常运维核心命令:
get ns(查询)、create ns(创建)、delete ns(删除)、get all -n(查询空间资源);4、生产环境优先使用YAML文件管理命名空间,保证资源配置可追溯、可复用,删除操作务必谨慎。
七、拓展:不同命名空间的 Service 和 Pod 能否互相访问?
结论先行:默认情况下,K8s 允许不同命名空间的 Pod、Service 互相访问,无命名空间隔离网络限制。Namespace 仅做资源逻辑隔离,不做网络隔离,这是新手最容易踩的误区。
7.1 跨命名空间访问核心规则
- Pod 层面:不同命名空间的 Pod 可直接通过对方 Pod 真实 IP 互通,无需任何配置,集群内部网络互通。
- Service 层面:不同命名空间访问 Service 不能仅写 Service 名称,必须使用完整域名 才可正常解析访问。
7.2 跨命名空间 Service 访问标准域名格式
通用格式:
服务名.命名空间名.svc.cluster.local示例场景:
- ns1 命名空间:存在 service 服务
web-svc - ns2 命名空间:需要访问 ns1 下的
web-svc
访问域名:
web-svc.ns1.svc.cluster.local7.3 实操验证
在 ns2 的 Pod 内部,通过 curl 测试跨命名空间访问:
# 跨命名空间访问 ns1 的 web-svc 服务
curl web-svc.ns1.svc.cluster.local7.4 限制跨命名空间访问(网络隔离)
若需要实现不同命名空间网络隔离、禁止跨空间访问,单纯依靠 Namespace 无法实现,需要通过 NetworkPolicy 网络策略 配置网络访问规则,实现精准的集群网络隔离,适配生产环境安全管控需求。
7.5 核心总结
- Namespace:资源隔离(资源名称分区、权限分区),不隔离网络;
- 默认集群网络:全命名空间互通,跨空间可通过 Service 完整域名访问;
- 网络隔离:需依赖 NetworkPolicy,而非命名空间。
