这篇文章主要讲述如何查看、使用和删除命名空间,还有如何使用Kubernetes的命名空间来细分集群中的应用。
准备工作
- 搭建好 Kubernetes 集群:使用Kubeadm搭建Kubernetes(1.13.1)集群
- 对 Kubernetes Pod,Service 和 Deployment有一个基本了解
命名空间列表
列出集群中所使用的命名空间
$ kubectl get namespaces
NAME STATUS AGE
default Active 19d
kube-public Active 19d
kube-system Active 19d
Kubernetes启动时会默认初始化default、kube-public 和 kube-system 三个命名空间。
- default:非 Kubernetes 系统创建的对象的默认命名空间
- kube-public:该命名空间被自动创建,并且对所有用户(包括未授权用户)都是可读的。该命名空间一般留作集群使用,用于存放一些始终可以被整个集群访问、读取的公共资源。
- kube-system:Kubernetes 系统所创建的对象的命名空间
命名空间概要
可以通过下面的命令查看命名空间的概要信息:
kubectl get namespaces <name>
或者通过下面的命令获取命名空间的详细信息:
kubectl describe namespaces <name>
Name: kube-system
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
No resource limits.
注意
:详细信息中包含资源配额(如果存在)和资源限定范围。
资源配额
用于追踪命名空间中资源的实验总和,并且允许集群使用者限定命名空间可以使用的硬性资源。
限定范围定义了命名空间中某种资源可以使用的最小和最大值。
命名空间有两种状态:
-
Active
:命名空间可用 -
Terminating
:命名空间正在被删除,不能用于存放新对象
创建命名空间
创建一个名为my-namespace.yaml
的 YAML 文件,包含以下内容:
apiVersion: v1
kind: Namespace
metadata:
name: <insert-namespace-name-here>
然后执行:
kubectl create -f ./my-namespace.yaml
注意
:命名空间的名称必须是一个DNS兼容的标签。
还有一个可选的字段finalizers
,该字段用于设置一个观察者用于监听该命名空间的删除操作。如果你指定了一个不存在的finalizers
,该命名空间会被创建,但删除时会卡在Terminating
状态。
删除命名空间
kubectl delete namespaces <insert-some-namespace-name>
注意
:该命令会删除命名空间下的所有对象。
删除操作是异步的,所以在一段时间内你会看到命名空间处于Terminating
状态。