第 4 章:Pod 分類 Namespaces
Namespaces 是什麼
Kubernetes 提供了抽象的 Cluster (virtual cluster) 的概念,讓我們能根據專案不同、執行團隊不同,或是商業考量,將原本擁有實體資源的單一 Kubernetes Cluster ,劃分成幾個不同的抽象的 Cluster (virtual cluster)
K8S cluster 內建 default
, kube-system
與 kube-public
這三個 namespaces
-
default
預設的 Namespaces 名稱為 default,過去我們產生的物件像是 Deployment, Services 等若沒特別指定 Namespace 都是存放在名稱為 default 的 namespaces 中
-
kube-system
在 Kubernetes 中,較特別的資源都會存放在 kube-system 這個 namespace。像是 kube-dns 或是 heapster 都是存放在該 namepsace 中。為了預防這些物件不小心被使用者刪除或更改導致集群毀損
-
kube-public
kube-public 也是個特殊的 namespace,存放在裡面的物件可被所有的使用者讀取
Namespaces 特點
- 在同一個 Kubernetes Cluster 中,每個 Namespaces 的名稱都是要獨特的
- 當一個 Namespaces 被刪除時,在該 Namespace 裡的所有物件也會被刪除
- 可以透過 Resource Quotas 限制一個 Namespaces 所可以存取的資源
建立 Namespaces
kubectl create namespace newspace
namespace "newspace" created
透過 kubectl get namespaces
可以查看剛創建好的 namespaces
切換預設 Namespaces
若要查看目前在哪個 Namespace 底下,可用以下指令
kubectl config view | grep namespace:
可以看到預設為 default
。可以透過 kubectl config set-context
指令,將預設的指令切換為 newspace
,指令如下:
kubectl config set-context \
> $(kubectl config current-context) \
>--namespace=newspace
Context "minikube" modified.
若再用指令查看目前預設的 namespace,可以發現原本的 default 變為 newspace 了,
刪除單一 Namespaces
kubectl delete namespaces newspace
namespace "newspace" deleted
需留意的是,default 與 kube-system 是無法被刪除的 namespaces
實作:限制某一 Namespaces 的運算資源
hellospace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: hellospace
---
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quotas
namespace: hellospace
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "1"
requests.memory: 10Gi
---
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-quotas
namespace: hellospace
spec:
hard:
services: "2"
services.loadbalancers: "1"
secrets: "1"
configmaps: "1"
replicationcontrollers: "10"
在 hellospace.yaml 中,我們新創建了一個 hellospace
的 namespace,且限制該 namespace
-
運算資源 (compute-quotas)
CPU 最多只有 1 core ,以及 memory 的使用被限制在 10Gi 以下
-
物件資源(object-quotas)
限制
hellospace
最多只能有 2 個 services 物件,且只能有 1 個 loadbalancer, secret, 以及 configmap。
使用 kubectl create
創建,
kubectl create -f ./hellospace.yaml
namespace "hellospace" created
resourcequota "compute-quotas" created
resourcequota "object-quotas" created
創建完之後,可用 kubectl get
查看在 hellospace
裡的 Resource Quotas
$ kubectl get resourcequotas -n hellospace
NAME AGE
compute-quotas 5m
object-quotas 5m
用 kubectl describe
分別查看 compute-quotas 與 object-quotas 的內容
- compute-quotas
- object-quotas
可以發現,在 hellospace
中已有一個 secret 物件,若這時我們再創建一個新的 secret 物件,會發生什麼事呢,會看到 Kubernetes 發出 超出可允許的使用 quota
警告。代表 hellospace 受 comput-quotas 與 object-quotas 的限制