理解Kubernetes中namespace是什么

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使用量、内存使用量等
posted @ 2021-12-17 10:59  Layzer  阅读(255)  评论(0)    收藏  举报