Kubernetes名称空间可以使不同的项目、团队或客户共享同一个 Kubernetes 集群
# 使用名称空间切分集群
该企业可以将一个Kubernetes集群切分成两个名称空间:development 和 production。创建名称空间的 yaml 文件:
apiVersion: v1
kind: Namespace
metadata:
name: development
labels:
name: development
-执行命令以创建 development 名称空间:
kubectl create -f https://kuboard.cn/statics/learning/namespace/dev.yaml
-执行命令以创建 production 名称空间:
kubectl create -f https://kuboard.cn/statics/learning/namespace/prod.yaml
-执行命令查看已创建的名称空间
kubectl get namespaces --show-labels
---development
-执行命令以检查当前的 kubectl 上下文
kubectl config view
-执行命令
kubectl config current-context
-输出结果如下所示
lithe-cocoa-92103_kubernetes
-为 kubectl 定义一个上下文,以便在不同的名称空间中工作。cluster 和 user 字段的取值从前面的 current context 复制过来:
kubectl config set-context dev --namespace=development --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes
kubectl config set-context prod --namespace=production --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes
-上面的命令创建了两个 kubectl 的上下文,使得您可以在两个不同的名称空间中工作
-切换到 development 名称空间:
kubectl config use-context dev
-验证
kubectl config current-context
dev
-此时,通过 kubectl 向 Kubernetes 集群发出的所有指令都限定在名称空间 development 里
-创建一个 nginx
kubectl run snowflake --image=nginx:1.7.9 --replicas=2
-刚刚创建的 Deployment 副本数为 2,运行了一个 nginx 容器。
kubectl get deployment
-执行命令
kubectl get pods -l run=snowflake
此时,开发人员可以做任何他想要做的操作,所有操作都限定在名称空间 development 里,而无需担心影响到 production 名称空间中的内容。
-切换到 production 名称空间:
kubectl config use-context prod
-production 名称空间应该是空的,下面两个命令将返回的结果都应该为空:
kubectl get deployment
kubectl get pods
-此时,我们在 production 名称空间运行另一个 deployment:
kubectl run cattle --image=nginx:1.7.9 --replicas=5
kubectl get deployment
-执行命令
kubectl get pods -l run=cattle
至此,我们可以了解到,用户在一个名称空间创建的内容对于另外一个名称空间来说是不可见的。
也可以为不同的名称空间定义不同的访问权限控制