namespace介紹
namespace是k8s系統中的一種非常重要的資源,它的主要作用是用來實現多套環境的資源隔離或者多租戶的資源隔離
默認情況下,k8s集群中的所有的pod都是可以相互訪問的。但是在實際中,可能不想讓兩個pod之間進行互相的訪問,
哪此時就可以將兩個pod划分到不同的namespace下。k8s將通過將集群內部的資源分配到不同的namespace中,可以形成邏輯上的”組“,
以方便不同的組的資源進行隔離使用和管理
可以通過k8s的授權機制,將不同的namespace交給不同租戶進行管理,這樣就實現了多租戶的資源隔離。
此時還能結合k8s的資源配額機制,限定不同租戶能占用的資源,例如cpu使用量,內存使用量等,來實現租戶可用資源的管理
k8s集群啟動之后,默認會創建幾個namespace
[root@master ~]# kubectl get namespace NAME STATUS AGE default Active 41h #所有未指定namespace的對象都會被分配在default命名空間 kube-node-lease Active 41h #集群節點之間的心跳維護,v1.13開始引入 kube-public Active 41h #此命名空間下的資源可以被所有人訪問(包括未認證用戶) kube-system Active 41h #所有由k8s系統創建的資源都處於這個命名空間
namespace資源的具體操作
查看
查看所有的ns
[root@master ~]# kubectl get ns NAME STATUS AGE default Active 41h kube-node-lease Active 41h kube-public Active 41h kube-system Active 41h
查看指定的ns
#命令:kubectl get ns ns名稱 -o 格式參數
#k8s支持的格式很多,比較常見的是wide、json、yaml
[root@master ~]# kubectl get ns default -o yaml apiVersion: v1 kind: Namespace metadata: creationTimestamp: "2021-06-30T09:42:21Z" name: default resourceVersion: "174" selfLink: /api/v1/namespaces/default uid: 111a15fb-6387-4879-aa7a-82c2a5f0dcc7 spec: finalizers: - kubernetes status: phase: Active
查看ns詳情
#命令 kubectl describe ns ns名稱 [root@master ~]# kubectl describe ns default Name: default Labels: <none> Annotations: <none> Status: Active #Active 命名空間正在使用中,Terminating 正在刪除命名空間
#Resource quota 針對namespace做的資源限制
#LimitRange針對namespace的每個組件做的資源限制 No resource quota. No LimitRange resource.
創建
#創建namespace
[root@master ~]# kubectl create ns dev namespace/dev created
刪除
[root@master ~]# kubectl delete ns dev namespace "dev" deleted
配置方式
首先准備一個yaml文件:ns-dev.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
[root@master ~]# vim namespace-dev.yaml [root@master ~]# kubectl create -f namespace-dev.yaml namespace/dev created [root@master ~]# kubectl get ns dev NAME STATUS AGE dev Active 66s [root@master ~]# kubectl delete -f namespace-dev.yaml namespace "dev" deleted [root@master ~]# kubectl get ns dev Error from server (NotFound): namespaces "dev" not found