Skip to content

NameSpace

名称空间,用来对集群资源进行隔离划分。默认只隔离资源,不隔离网络。每个Kubernetes资源只能在一个名称空间中,Kubernetes名称空间支持不同的项目、团队或客户去使用Kubernetes集群。 Alt text

说明

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

在Dashboard页面中,可以查看名称空间:
Alt text

1. 自带名称空间

Kubernetes启动时会创建四个初始名称空间:

  1. default:主要便于你无需创建新的名称空间即可开始使用新集群。
  2. kube-node-lease:该名称空间包含用于与各个节点关联的Lease(租约)对象。 节点租约允许kubelet发送心跳, 由此控制面能够检测到节点故障。
  3. kube-public:该名称空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读。
  4. kube-system:该名称空间用于Kubernetes系统创建的对象。

2. 查看名称空间

  1. 查看名称空间列表
sh
[root@node101 ~]# kubectl get namespace
NAME                   STATUS   AGE
default                Active   12d
kube-node-lease        Active   12d
kube-public            Active   12d
kube-system            Active   12d
kubernetes-dashboard   Active   3d21h
## 或者使用简写形式
[root@node101 ~]# kubectl get ns
NAME                   STATUS   AGE
default                Active   12d
kube-node-lease        Active   12d
kube-public            Active   12d
kube-system            Active   12d
kubernetes-dashboard   Active   3d21h
  1. 查看名称空间详情
sh
[root@node101 ~]# kubectl describe ns kube-system
Name:         kube-system
Labels:       kubernetes.io/metadata.name=kube-system
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.

名称空间可以处于下列两个阶段中的一个:

  • Active:名称空间正在被使用中。
  • Terminating:名字空间正在被删除,且不能被用于新对象。

3. 创建名称空间

通过命令或者YAML文件方式都可以创建名称空间。

  1. 使用命令方式创建
sh
[root@node101 ~]# kubectl create namespace hello-dev
namespace/hello-dev created
  1. 使用YAML方式创建
    创建hello-test.yml文件,内容如下:
yml
apiVersion: v1
kind: Namespace
metadata:
  name: hello-test

执行命令:

sh
[root@node101 ~]# kubectl create -f hello-test.yml
namespace/hello-test created
[root@node101 ~]# kubectl get ns
NAME                   STATUS   AGE
default                Active   12d
hello-dev              Active   7m58s
hello-test             Active   18s
kube-node-lease        Active   12d
kube-public            Active   12d
kube-system            Active   12d
kubernetes-dashboard   Active   3d22h

4. 删除名称空间

删除名称空间会删除名称空间下的所有内容, 删除操作是异步的,所以该开始你会看到名称空间处于Terminating状态。

sh
## k8s自带的名称空间都不能随便删除
[root@node101 ~]# kubectl delete ns default
Error from server (Forbidden): namespaces "default" is forbidden: this namespace may not be deleted
[root@node101 ~]# kubectl delete ns hello-dev hello-test
namespace "hello-dev" deleted
namespace "hello-test" deleted