Kubernetes Namespace&Context

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

Namespace的创建

Kubernetes集群会帮我们创建一个名称为default的命名空间:

QQ截图20191109160144.png

默认情况下,我们的pod、rc、service等Kubernetes资源都是使用这个命名空间,此外我们也可以创建自己的命名空间。

定义一个命名空间配置dev-namesapce.yml:

1
2
3
4
apiVersion: v1
kind: Namespace
metadata:
name: dev # dev命名空间

创建该命名空间:

QQ截图20191109160534.png

使用Namespace

使用命名空间只需要在创建Kubernetes资源对象的时候指定即可,比如创建一个tomcat-rc.yml,并指定命名空间为dev:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1
kind: ReplicationController
metadata:
name: tomcat-rc
namespace: dev # 指定命名空间
spec:
replicas: 2
selector:
name: tomcat
template:
metadata:
name: tomcat
labels:
name: tomcat
spec:
containers:
- name: tomcat
image: tomcat
ports:
- containerPort: 8080
hostPort: 8081

创建该rc:

20191109161045.png

可以看到,defalut命名空间下并没有任何pod,而dev命名空间下则有两个tomcat pod实例。

命名空间只是名称上的隔离,不同命名空间下的pod,service等还是可以相互访问的。

Context的创建和使用

我们可以通过创建Context(上下文),指定使用的命名空间,然后使用该Context,来完成默认的命名空间切换。

在创建Context前,我们查看下Kubernetes默认的配置:

QQ截图20191109162819.png

可以看到,当前默认的Context名称为kubernetes-admin@kubernetes,由此可以推断,它和defalut这个命名空间挂钩。

创建一个新的Context,名称为ctx-dev,命名空间使用上面创建的dev:

QQ截图20191109162659.png

其中/root/.kube/config为Kubernetes配置。

创建成功后,我们使用ctx-dev这个Context:

QQ截图20191109163224.png

可以看到,现在不需要指定-n dev就可以获取到dev命名空间下的pod了,也证实了Context的切换是成功的。

如果想要恢复默认的Context,将Context指定为kubernetes-admin@kubernetes:

QQ截图20191109163514.png

请作者喝瓶肥宅水~

TOP