个人随笔
目录
Kubernetes集群命名空间(Namespace)超详细实操笔记
2026-06-28 16:49:53
在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       5d1h

3.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   10s

4.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" deleted

5.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.local

7.3 实操验证

在 ns2 的 Pod 内部,通过 curl 测试跨命名空间访问:
# 跨命名空间访问 ns1 的 web-svc 服务
curl web-svc.ns1.svc.cluster.local

7.4 限制跨命名空间访问(网络隔离)

若需要实现不同命名空间网络隔离、禁止跨空间访问,单纯依靠 Namespace 无法实现,需要通过 NetworkPolicy 网络策略 配置网络访问规则,实现精准的集群网络隔离,适配生产环境安全管控需求。

7.5 核心总结

  • Namespace:资源隔离(资源名称分区、权限分区),不隔离网络;
  • 默认集群网络:全命名空间互通,跨空间可通过 Service 完整域名访问;
  • 网络隔离:需依赖 NetworkPolicy,而非命名空间。
 6

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2