Kubernetes可以使用Namespaces(命名空间)创建多个虚拟集群。当团队或项目中具有许多用户时,可以考虑使用Namespace来实现多租户的资源隔离。

Namespace为名称提供了一个范围。资源的Names在Namespace中具有唯一性。

Namespace是一种将集群资源划分为多个用途(通过 resource quota)的方法。

在未来的Kubernetes版本中,默认情况下,相同Namespace中的对象将具有相同的访问控制策略。

k8s集群启动后,会创建一个名为"default"的Namespace,如果不特别指明一个资源对象的Namespace属性,则用户创建的资源对象都会使用默认的"default"。

大多数Kubernetes资源(例如pod、services、replication controllers或其他)都在某些Namespace中,但Namespace资源本身并不在Namespace中。而低级别资源(如Node和persistentVolumes)不在任何Namespace中。Events是一个例外:它们可能有也可能没有Namespace,具体取决于Events的对象。

 

创建Namespace

(1) 命令行直接创建

$ kubectl create namespace new-namespace

 

(2) 通过文件创建

$ cat my-namespace.yaml

apiVersion: v1

kind: Namespace

metadata:

  name: new-namespace

 

$ kubectl create -f ./my-namespace.yaml

注意:命名空间名称满足正则表达式[a-z0-9]([-a-z0-9]*[a-z0-9])?,最大长度为63位

 

删除Namespace

 

$ kubectl delete namespaces new-namespace

注意:

删除一个namespace会自动删除所有属于该namespace的资源。

default和kube-system命名空间不可删除。

PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的。

Events是否属于namespace取决于产生events的对象。

查看 Namespace

使用以下命令列出群集中的当前的Namespace:

$ kubectl get namespaces

NAME STATUS AGE

default Active 1d

kube-system Active 1d

 

Kubernetes从两个初始的Namespace开始:

default

kube-system 由Kubernetes系统创建的对象的Namespace

将一个资源对象放入名为"development"的命名空间里:

apiVersion: v1

kind: Pod

metadata:

  name: busybox

  namespace: development

spec:

  containers:

  - image: busybox

    command:

    - sleep

    - "3600"

    name: busybox

 

设置请求的名称空间

要临时设置Request的Namespace,请使用--namespace 标志。

例如:

$ kubectl --namespace=<insert-namespace-name-here> run nginx --image=nginx

$ kubectl --namespace=<insert-namespace-name-here> get pods

注:如果不加--namespace参数,kubectl get将仅显示属于"default"命名空间的资源对象。

 

可以使用kubectl命令将创建的Namespace可以永久保存在context中。

$ kubectl config set-context $(kubectl config current-context) --namespace=<insert-namespace-name-here>

# Validate it

$ kubectl config view | grep namespace:

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐