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