跳转至

层次概念

名字空间

简介

在 Kubernetes 中,名字空间(Namespace) 提供一种机制,将同一集群中的资源划分为相互隔离的组。

同一名字空间内的资源名称要唯一,但跨名字空间时没有这个要求。

名字空间作用域仅针对带有名字空间的对象(例如 Deployment、Service 等),这种作用域对集群范围的对象 (例如 StorageClass、Node、PersistentVolume 等)不适用。

使用场景

名字空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑名字空间。当需要名字空间提供的功能时,请开始使用它们。

名字空间为名称提供了一个范围。资源的名称需要在名字空间内是唯一的,但不能跨名字空间。 名字空间不能相互嵌套,每个 Kubernetes 资源只能在一个名字空间中。

不必使用多个名字空间来分隔仅仅轻微不同的资源,例如同一软件的不同版本: 应该使用来区分同一名字空间中的不同资源。

对于生产集群,请考虑不要使用 default 名字空间,而是创建其他名字空间来使用

初始名字空间

  • default: 系统默认,无需创建新的名字空间即可开始使用新集群
  • kube-node-lease: 包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubelet 发送, 由此控制面能够检测到节点故障,常用于Log场景
  • kube-public: 所有的客户端(包括未经身份验证的客户端)都可以读取该名字空间。 该名字空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读
  • kube-system: 用于 Kubernetes 系统创建的对象

使用名字空间

避免使用前缀 kube- 创建名字空间,因为它是为 Kubernetes 系统名字空间保留的

format

Bash
1
2
3
4
5
6
 kubectl get namespace
NAME              STATUS   AGE
default           Active   7h15m
kube-node-lease   Active   7h15m
kube-public       Active   7h15m
kube-system       Active   7h15m

为请求设置名字空间

要为当前请求设置名字空间,请使用 --namespace 参数

创建 Pod 并指定命名空间

Bash
1
kubectl run nginx --image=nginx --namespace=<XXX>
  • kubectl run: 创建一个新的 Pod
  • nginx: Pod 的名称
  • --image=nginx: 使用 nginx 镜像来创建容器
  • --namespace=<名字空间名称>: 指定 Pod 所属的命名空间`

查询特定命名空间中的 Pods

Bash
1
kubectl get pods --namespace=<XXX>

用来获取特定命名空间中的所有 Pods 的信息