Namespace是kubernetes系统中一种非常重要的资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
默认情况下,kubernetes集群中所有的Pod都是可以相互访问的,但是在实际过程中,可能不想让两个Pod之间进行相互的访问,那么此时就可以将两个Pod划分到不同的namespace下。kubenetes通过将集群内部的资源分配到不同的Namespace中,形成逻辑上的“组”,以便于不同资源的组进行隔离和管理。
可以通过kubernetes的授权机制,将不同的namespace交给不同的租户进行管理,这样就形成多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,如cpu使用量,内存使用量等,来实现租户可用资源的管理
kubernetes在集群启动后,会默认创建几个namespace
[root@master ~]# kubectl get ns NAME STATUS AGE default Active 40h #所有未指定namespace的对象都会被分配到default空间中 kube-node-lease Active 40h #集群节点之间的心跳维护,v1.13开始引入 kube-public Active 40h #此命名空间下的资源可以被所有人访问(包括未认证的用户) kube-system Active 40h #所有有kubernetes系统创建的资源都处在这个命名空间
操作方式
# 查看所有的ns [root@master ~]# kubectl get ns NAME STATUS AGE default Active 40h kube-node-lease Active 40h kube-public Active 40h kube-system Active 40h # 查看指定的ns [root@master ~]# kubectl get ns kube-system NAME STATUS AGE kube-system Active 40h [root@master ~]# kubectl get ns default NAME STATUS AGE default Active 40h # 指定输出格式 kubectl get ns ns名称 -o [json/wide/yaml] [root@master ~]# kubectl get ns default -o yaml apiVersion: v1 kind: Namespace metadata: creationTimestamp: "2021-09-25T14:37:46Z" name: default resourceVersion: "146" selfLink: /api/v1/namespaces/default uid: 924536fd-013d-4f5b-8f2b-2d4abc179ca5 spec: finalizers: - kubernetes status: phase: Active # 创建namespace kubectl create ns dev # 删除namespace kubectl delete ns dev
以配置文件的方式创建一个namespace
首先准备一个yaml文件: ns-dev.yml
apiVersion: v1 kind: Namespace metadata: name: dev
然后就可以执行对应的创建和删除命令了
创建: kubectl create -f ns-dev.yml
删除: kubectl delete -f ns-dev.yml