文章目录
- [K8S 命名空间:Namespace 的作用与增删查](#K8S 命名空间:Namespace 的作用与增删查)
-
- [一、Namespace 的作用](#一、Namespace 的作用)
- [二、查看 Namespace](#二、查看 Namespace)
-
- [1. 列出所有命名空间](#1. 列出所有命名空间)
- [2. 各命名空间的含义](#2. 各命名空间的含义)
- [3. 查看某个命名空间下的资源](#3. 查看某个命名空间下的资源)
- [三、查看所有命名空间下的 Pod](#三、查看所有命名空间下的 Pod)
- [四、创建 Namespace](#四、创建 Namespace)
-
- [1. 命令行创建](#1. 命令行创建)
- [2. YAML 文件创建](#2. YAML 文件创建)
- [五、删除 Namespace](#五、删除 Namespace)
-
- [1. 命令行删除](#1. 命令行删除)
- [2. 按 YAML 文件删除](#2. 按 YAML 文件删除)
- 六、常用命令速查
K8S 命名空间:Namespace 的作用与增删查
!note 核心摘要
- 是什么:Namespace 是对一组资源和对象的抽象集合,用于在同一个集群内做资源分组与隔离。
- 谁能归属 :Pod、Service、Deployment 等命名空间级资源必须属于某个 Namespace(未指定时归入
default);Node、PersistentVolume、Namespace 等集群级资源不属于任何 Namespace。- 常用操作 :
get查看(-n指定某个、-A查全部)、create或 YAML 创建、delete删除。下文命令提示符
[root@master ~]#表示在 master 节点上执行。
一、Namespace 的作用
- Namespace 是对一组资源和对象的抽象集合。
- 常见的 Pod、Service、Deployment 等都属于某一个 Namespace,默认是
default。 - 并非所有资源都属于 Namespace,Node、PersistentVolume、Namespace 等就不属于任何 Namespace。
| 资源 | 是否属于 Namespace | 说明 |
|---|---|---|
| Pod、Service、Deployment 等 | 是 | 未指定时自动归入 default |
| Node | 否 | 集群级资源 |
| PersistentVolume | 否 | 集群级存储资源 |
| Namespace | 否 | 它本身就是命名空间的载体 |
二、查看 Namespace
1. 列出所有命名空间
bash
[root@master ~]# kubectl get namespaces # namespaces 可简写为 namespace 或 ns
| NAME | STATUS | AGE |
|---|---|---|
| default | Active | 19d |
| kube-node-lease | Active | 19d |
| kube-public | Active | 19d |
| kube-system | Active | 19d |
| kubernetes-dashboard | Active | 46h |
!tip 简写提示
kubectl get namespaces等价于kubectl get namespace、kubectl get ns。
2. 各命名空间的含义
| 命名空间 | 说明 |
|---|---|
default |
所有未指定 Namespace 的对象都会被默认分配到这里 |
kube-system |
所有由 Kubernetes 系统创建的资源都处于这个命名空间 |
kube-public |
此命名空间下的资源可以被所有人访问 |
kube-node-lease |
存放各节点的 Lease 对象,用于节点心跳 |
kubernetes-dashboard |
Dashboard(Web UI)组件所在的命名空间 |
3. 查看某个命名空间下的资源
bash
[root@master yaml]# kubectl get all -n kube-system
kubectl get all 会一次性列出该命名空间下默认展示的多种资源,下面按资源类型分开看:
Pod
| NAME | READY | STATUS | RESTARTS | AGE |
|---|---|---|---|---|
| pod/calico-kube-controllers-658d97c59c-4hkgb | 1/1 | Running | 3 (29h ago) | 2d4h |
| pod/calico-node-64qd9 | 1/1 | Running | 0 | 5h12m |
| pod/calico-node-bbg5q | 1/1 | Running | 0 | 5h12m |
| pod/calico-node-m2x7h | 1/1 | Running | 0 | 5h12m |
| pod/coredns-66f779496c-fb7qd | 1/1 | Running | 0 | 2d21h |
| pod/coredns-66f779496c-rk6xn | 1/1 | Running | 0 | 2d21h |
| pod/etcd-master | 1/1 | Running | 0 | 2d21h |
| pod/kube-apiserver-master | 1/1 | Running | 0 | 2d21h |
| pod/kube-controller-manager-master | 1/1 | Running | 0 | 2d21h |
| pod/kube-proxy-cml6g | 1/1 | Running | 0 | 2d21h |
| pod/kube-proxy-tk7gl | 1/1 | Running | 0 | 2d21h |
| pod/kube-proxy-tqnz5 | 1/1 | Running | 0 | 2d21h |
| pod/kube-scheduler-master | 1/1 | Running | 0 | 2d21h |
| pod/metrics-server-57999c5cf7-d2nhb | 1/1 | Running | 0 | 24h |
Service
| NAME | TYPE | CLUSTER-IP | EXTERNAL-IP | PORT(S) | AGE |
|---|---|---|---|---|---|
| service/kube-dns | ClusterIP | 10.96.0.10 | 53/UDP,53/TCP,9153/TCP | 2d21h | |
| service/metrics-server | ClusterIP | 10.104.246.91 | 443/TCP | 24h |
DaemonSet
| NAME | DESIRED | CURRENT | READY | UP-TO-DATE | AVAILABLE | NODE SELECTOR | AGE |
|---|---|---|---|---|---|---|---|
| daemonset.apps/calico-node | 3 | 3 | 3 | 3 | 3 | kubernetes.io/os=linux | 2d4h |
| daemonset.apps/kube-proxy | 3 | 3 | 3 | 3 | 3 | kubernetes.io/os=linux | 2d21h |
Deployment
| NAME | READY | UP-TO-DATE | AVAILABLE | AGE |
|---|---|---|---|---|
| deployment.apps/calico-kube-controllers | 1/1 | 1 | 1 | 2d4h |
| deployment.apps/coredns | 2/2 | 2 | 2 | 2d21h |
| deployment.apps/metrics-server | 1/1 | 1 | 1 | 24h |
ReplicaSet
| NAME | DESIRED | CURRENT | READY | AGE |
|---|---|---|---|---|
| replicaset.apps/calico-kube-controllers-658d97c59c | 1 | 1 | 1 | 2d4h |
| replicaset.apps/coredns-66f779496c | 2 | 2 | 2 | 2d21h |
| replicaset.apps/metrics-server-57999c5cf7 | 1 | 1 | 1 | 24h |
!note 一句话理解
kubectl get all -n kube-system就是在看「集群核心组件全家桶」:apiserver、etcd、controller-manager、scheduler、coredns、calico 网络、kube-proxy、metrics-server。
三、查看所有命名空间下的 Pod
bash
[root@master ~]# kubectl get pods -A # -A 表示所有命名空间
| NAMESPACE | NAME | READY | STATUS | RESTARTS | AGE |
|---|---|---|---|---|---|
| default | nginx-7854ff8877-dfv7g | 1/1 | Running | 0 | 19d |
| default | nginx-7854ff8877-lm7gx | 1/1 | Running | 0 | 19d |
| default | nginx-7854ff8877-ntp7t | 1/1 | Running | 0 | 19d |
| default | tomcat-test-75469fdc74-24bsh | 1/1 | Running | 0 | 22h |
| default | tomcat-test-75469fdc74-9wzps | 1/1 | Running | 0 | 22h |
| kube-system | calico-kube-controllers-658d97c59c-8nnql | 1/1 | Running | 0 | 19d |
| kube-system | calico-node-5t2r8 | 1/1 | Running | 0 | 2d5h |
| kube-system | calico-node-hfkjr | 1/1 | Running | 0 | 2d5h |
| kube-system | calico-node-s8jpz | 1/1 | Running | 0 | 2d5h |
| kube-system | coredns-66f779496c-bcq9q | 1/1 | Running | 0 | 19d |
| kube-system | coredns-66f779496c-wlphs | 1/1 | Running | 0 | 19d |
| kube-system | etcd-master | 1/1 | Running | 2 (19d ago) | 19d |
| kube-system | kube-apiserver-master | 1/1 | Running | 2 (19d ago) | 19d |
| kube-system | kube-controller-manager-master | 1/1 | Running | 2 (19d ago) | 19d |
| kube-system | kube-proxy-27r8d | 1/1 | Running | 2 (19d ago) | 19d |
| kube-system | kube-proxy-6wbkr | 1/1 | Running | 1 (19d ago) | 19d |
| kube-system | kube-proxy-92wqj | 1/1 | Running | 1 (19d ago) | 19d |
| kube-system | kube-scheduler-master | 1/1 | Running | 2 (19d ago) | 19d |
| kube-system | metrics-server-57999c5cf7-ppvqq | 1/1 | Running | 0 | 2d5h |
| kubernetes-dashboard | dashboard-metrics-scraper-5657497c4c-jpc9d | 1/1 | Running | 0 | 47h |
| kubernetes-dashboard | kubernetes-dashboard-746fbfd67c-nm5c7 | 1/1 | Running | 0 | 47h |
!tip 等价写法
kubectl get pods -A与kubectl get pods --all-namespaces等价,都表示查看全部命名空间下的 Pod。对比上一步:
-n <命名空间>查一个,-A查全部。
四、创建 Namespace
1. 命令行创建
bash
[root@master ~]# kubectl create namespace web1
namespace/web1 created
[root@master ~]# kubectl get ns
| NAME | STATUS | AGE |
|---|---|---|
| default | Active | 19d |
| kube-node-lease | Active | 19d |
| kube-public | Active | 19d |
| kube-system | Active | 19d |
| kubernetes-dashboard | Active | 47h |
| web1 | Active | 6s |
2. YAML 文件创建
K8S 中几乎所有的资源都可以通过 YAML 编排来创建。写 YAML 之前,先学会读官方语法。
(1)查看已有资源的 YAML
bash
[root@master ~]# kubectl get ns web1 -o yaml
yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2025-07-09T09:09:22Z"
labels:
kubernetes.io/metadata.name: web1
name: web1
resourceVersion: "178328"
uid: 9a8d53c6-87d4-49b8-a96e-bbb62be37909
spec:
finalizers:
- kubernetes
status:
phase: Active
(2)在线编辑资源
使用 kubectl edit <资源类型> <资源名> 可以直接编辑运行中资源的 YAML:
bash
[root@master ~]# kubectl edit namespaces web1
(3)查询语法文档
用 kubectl explain 逐层查看字段含义:
bash
[root@master ~]# kubectl explain namespace # 查看 namespace 支持的全部字段
[root@master ~]# kubectl explain namespace.metadata # 查看 metadata 下级字段
[root@master ~]# kubectl explain namespace.metadata.name # 查看 name 字段说明
(4)编写并应用 YAML
bash
[root@master ~]# vim create_web2.yaml
yaml
apiVersion: v1 # api 版本
kind: Namespace # 资源类型
metadata: # 元数据
name: web2 # 命名空间名称
用 kubectl apply -f 应用该文件:
bash
[root@master ~]# kubectl apply -f create_web2.yaml
namespace/web2 created
[root@master ~]# kubectl get ns
| NAME | STATUS | AGE |
|---|---|---|
| default | Active | 19d |
| kube-node-lease | Active | 19d |
| kube-public | Active | 19d |
| kube-system | Active | 19d |
| kubernetes-dashboard | Active | 47h |
| web1 | Active | 12m |
| web2 | Active | 6s |
五、删除 Namespace
!warning 删除前务必确认
- 删除一个 Namespace 会自动删除该命名空间下的所有资源 (类似 MySQL 中
drop database会删掉库里的所有表),请慎重操作。default、kube-system、kube-public命名空间不可删除。
1. 命令行删除
bash
[root@master ~]# kubectl delete namespaces web1
namespace "web1" deleted
2. 按 YAML 文件删除
bash
[root@master ~]# kubectl delete -f create_web2.yaml
namespace "web2" deleted
六、常用命令速查
| 操作 | 命令 |
|---|---|
| 查看全部命名空间 | kubectl get ns |
| 查看某命名空间下的资源 | kubectl get all -n <命名空间> |
| 查看全部命名空间下的 Pod | kubectl get pods -A |
| 创建命名空间 | kubectl create ns <命名空间> |
| 查看资源 YAML | kubectl get ns <命名空间> -o yaml |
| 在线编辑资源 | kubectl edit ns <命名空间> |
| 查询字段语法 | kubectl explain ns.metadata.name |
| 应用 YAML | kubectl apply -f <文件>.yaml |
| 删除命名空间 | kubectl delete ns <命名空间> |
| 按 YAML 文件删除 | kubectl delete -f <文件>.yaml |