在一个组织内部,不同的工作组可以在同一个Kubernetes集群中工作,Kubernetes通过Namespace(命名空间)和Context的设置对不同的工作组进行区分,使得它们既可以共享同一个Kubernetes集群的服务,也可以互不干扰,如图10.2所示。

图10.2 集群环境共享和隔离
假设在我们的组织中有两个工作组:开发组和生产运维组。开发组在Kubernetes集群中需要不断创建、修改及删除各种Pod、RC、Service等资源对象,以便实现敏捷开发。生产运维组则需要通过严格的权限设置来确保生产系统中的Pod、RC、Service处于正常运行状态且不会被误操作。
为了在Kubernetes集群中实现这两个分组,首先需要创建两个命名空间。
创建命名空间1:

创建命名空间2:

使用kubectl create命令完成命名空间的创建:

查看系统中的命名空间:

接下来,需要为这两个工作组分别定义一个Context,即运行环境。这个运行环境将属于某个特定的命名空间。
通过kubectl config set-context命令定义Context,并将Context置于之前创建的命名空间中:


通过kubectl config view命令查看已定义的Context:

通过kubectl config命令在${HOME}/.kube目录下生成了一个名为“config”的文件,文件的内容即kubectl config view命令显示的内容。所以,也可以通过手工编辑该文件的方式来设置Context。
我们可以通过kubectl config use-context <context_name>命令设置当前运行环境。通过下面的命令将把当前运行环境设置为ctx-dev:

运行这个命令后,当前运行环境被设置为开发组所需的环境。之后的所有操作都将在名为development的命名空间中完成。
现在,以redis-slave RC为例创建两个Pod:

查看创建好的Pod:

可以看到容器被正确创建并运行起来了。而且,由于当前运行环境是ctx-dev,所以不会影响生产运维组的工作。
切换到生产运维组的运行环境中:

查看RC和Pod:

结果为空,说明看不到开发组创建的RC和Pod了。
现在也为生产运维组创建两个redis-slave的Pod:

查看创建好的Pod:

可以看到容器被正确创建并运行起来了,并且当前运行环境是ctx-prod,也不会影响开发组的工作。
至此,我们为两个工作组分别设置了两个运行环境,设置好当前运行环境时,各工作组之间的工作将不会相互干扰,并且都能在同一个Kubernetes集群中同时工作。