【kubernetes - 1.28版本】-10 K8S命名空间

文章目录

  • [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
相关推荐
tedcloud1233 小时前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
syntaxsage4 小时前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器
java_logo4 小时前
Docker 部署 Samba:轻松搭建局域网文件共享
运维·docker·容器·文件共享·samba·smb·轩辕镜像
草莓熊Lotso4 小时前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
todoitbo14 小时前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器
时间售卖铺14 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
云-缩影19 小时前
拆解函数计算 Serverless GPU 部署 AI 模型:Flux 生图和语音复刻怎么跑的
人工智能·云原生·serverless
是枚小菜鸡儿吖20 小时前
Home Assistant跨品牌智能家居教程:Docker部署、米家接入、vivo桥接与远程访问
docker·容器·智能家居
螺蛳粉 螺蛳粉1 天前
第 02 篇:镜像分层与 containerd 2.x 实战:SystemdCgroup 与 pause 镜像配置踩坑(底座认知 02)
docker·云原生·容器·kubernetes·etcd·containerd·kube-apiserver