Namespace (命名空间)
最主要的功能就是用来进行资源的隔离。
默认情况下,Kubernetes 中所有的 Pod 都是可以互相访问的,但如果我们不想让某两个或者多个 Pod 之间进行相互访问,那么我们就可将这些 Pod 划分到不同的 Namespace 下面来实现对 Pod 的隔离(就像当是对这些 Pod 进行分组),方便我们对其 Namespace 下的资源进行使用和管理。
Namespace 为名称提供了一个范围,资源的 Names 在 Namespace 中具有唯一性。
创建 Namespace
创建 ns 有两种方法:
- 直接使用命令创建
$ kubectl create namespace namespace名称
eg:创建一个名为 xxx 的ns
$ kubectl create ns xxx
namespace 'xxx' created
- 通过 yaml 文件创建
- a. 编辑 yaml 文件
$ cat my-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: xxx # 此处 xxx 即为 ns 名称
- b.创建 ns
$ kubectl create -f ./my-namespace.yaml
namespace/xxx created
注意:命名空间名称满足正则表达式[a-z0-9]([-a-z0-9]*[a-z0-9])?,最大长度为63位
删除 Namespace
删除ns 有两种方法:
- 直接使用命令删除
$ kubectl delete namespaces namespace名称
eg:删除一个名为 xxx 的ns
$ kubectl delete ns xxx
namespace 'xxx' delete
- 通过 yaml 文件删除
- a. 使用创建时的 yaml 文件
$ cat my-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: xxx # 此处 xxx 即为 ns 名称
- b.删除 ns
$ kubectl delete -f ./my-namespace.yaml
namespace/xxx delete
注意:
- 删除一个namespace会自动删除所有属于该namespace的资源。
- default和kube-system命名空间不可删除。
- PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的。
- Events是否属于namespace取决于产生events的对象.
查看 Namespace
# 查看 ns
kubectl get ns # namespace 可以简写为 ns
# 查询结果
NAME STATUS AGE
default Active 3y78d # 默认的 Namespace,操作中若未指定 Namespace,则都为默认。
kube-node-lease Active 45h # 由 Kubernetes 节点发送的心跳有助于确定节点的可用性。
kube-public Active 45h # 自动创建,所有用户(包括未经过身份验证的用户)都可以读取。
kube-system Active 45h # Kubernetes 系统创建的对象的命名空间。
# 以上命名空间为 Kubernetes 在启动之后,默认创建的。
以 wide/yaml/json 文件的形式输出 Namespace 的详细信息
$ kubectl get ns namespace名称 -o wide/yaml/json
注:建议指定 ns 名称,若不指定则会输出所有 ns 的详细信息。