Kubernetes Namespace
Namespace(命名空间)是Kubernetes系统中另一个非常重要的概念,Namespace在很多情况下用于实现多租户的资源隔离。Namespace通过将集群内部的资源对象"分配"到不同的Namespace中,形成逻辑上分组的不同项目、小组或者用户组,便于不同的分组在共享整个集群的资源的同时还能被分别管理
Kubernetes集群启动后,会创建一个名为"default"的Namespace
[root@master ~]# kubectl get namespaces
NAME STATUS AGE
default Active 5d
如果不特别指明Namespace,默认用户创建的Pod、RC、Service都将被系统创建到名为"default"
的Namespace中
案例:创建一个名为development的namespache,添加3个pod到namespache中
首先定义一个namespace的yaml,可以和pod写在一起,我们这里分开写
apiVersion: v1
kind: Namespace
metadata:
name: deployment
一旦创建了Namespace,我们创建资源对象时就可以指定这个资源对象属于哪个Namespache
创建Namespache
[root@master ~]# kubectl create -f namespache.yaml
namespace/deployment created
创建Pod指定Namespache为deployment,创建完成我们可以查看一下
[root@master ~]# kubectl get namespaces
NAME STATUS AGE
default Active 5d
deployment Active 1m
kube-public Active 5d
kube-system Active 5d
创建加入Namepcae的Pod
[root@master ~]# kubectl create -f namespache_nginx.yaml
deployment.apps/demo-deployment created
Pod的yaml如下:
[root@master ~]# cat namespache_nginx.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: abcdocker1
namespace: deployment
spec:
replicas: 3
selector:
matchLabels:
app: abcdocker
template:
metadata:
labels:
app: abcdocker
spec:
containers:
- name: nginx
image: daocloud.io/library/nginx:1.13.0-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 800
提示我们已经执行成功,我们现在执行命令查看
默认default下面已经找不到我们创建的项目,需要加上--namespace=namespace名称
删除Namespache
$ kubectl delete namespaces new-namespace
提示:
- [x] 1.删除一个namespace会自动删除所有属于该namespace的资源。
- [x] 2.default和kube-system命名空间不可删除。
- [x] 3.PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的。
- [x] 4.Events是否属于namespace取决于产生events的对象。
同时删除的时候也是同样的步骤
总结:
当我们给每个租户创建一个namespace来实现多租户的资源隔离时、还能结合Kubernetes的资源配额管理,现在不同租户能占用的资源,例如CPU使用量、内存使用量等