在一个组织内部,不同的工作组可以在同一个 Kubernetes 集群中工作,Kubernetes 通过命名空间和 Context 的设置来实现对不同工作组进行区分,使得它们既可以共享同一个 Kubernetes 集群的服务,也能够互不干扰。
假设在我们的组织中有两个工作组:开发组和生产运维组。开发组在 Kubernetes 集群中需要不断创建、修改、删除各种 Pod、RC、Service 等资源对象,以便实现敏捷开发的过程。而生产运维组则需要使用严格的权限设置来确保生产系统中的 Pod、RC、Service 处于正常运行状态且不会被误操作。
创建 namespace
为了在 Kubernetes 集群中实现这两个分组,首先需要创建两个命名空间。
namespace-development.yaml
1 2 3 4
| apiVersion: v1 kind: Namespace metadata: name: development
|
namespace-production.yaml
1 2 3 4
| apiVersion: v1 kind: Namespace metadata: name: production
|
使用 kubectl create 命令完成命名空间的创建:
1 2
| $ kubectl create -f namespace-development.yaml $ kubectl create -f namespace-production.yaml
|
查看系统中的命名空间:
1
| $ kubectl get namespaces
|
定义 Context(运行环境)
接下来,需要为这两个工作组分别定义一个 Context,即运行环境。这个运行环境将属于某个特定的命名空间。
通过 kubectl config set-context 命令定义 Context,并将 Context 置于之前创建的命名空间中:
1 2 3
| $ kubectl config set-cluster kubernetes-cluster --server=https://192.168.1.128:8080 $ kubectl config set-context ctx-dev --namespace=development --cluster=kubernetes-cluster --user=dev $ kubectl config set-context ctx-prod --namespace=production --cluster=kubernetes-cluster --user=prod
|
使用 kubectl config view 命令查看已定义的 Context:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $ kubectl config view apiVersion: v1 kind: Config clusters: - cluster: server: http://192.168.1.128:8080 name: kubernetes-cluster contexts: - context: cluster: kubernetes-cluster namespace: development name: ctx-dev - context: cluster: kubernetes-cluster namespace: production name: ctx-prod current-context: ctx-dev preferences: {} users: []
|
注意,通过 kubectl config 命令在 ${HOME}/.kube 目录下生成了一个名为 config 的文件,文件内容即 kubectl config view 命令看到的内容。所以,也可以通过手工编辑该文件的方式来设置 Context。
设置工作组在特定 Context 环境中工作
使用 kubectl config use-context 命令来设置当前的运行环境。
下面的命令把当前运行环境设置为 ”ctx-dev“:
1
| $ kubectl config use-context ctx-dev
|
通过这个命令,当前的运行环境即被设置为开发组所需的环境。之后的所有操作都将在名为 “development” 的命名空间中完成。
各工作组之间的工作将不会相互干扰,并且它们都能够在同一个 Kubernetes 集群中同时工作。