[k8s 生態鏈 完美組合 Day10] k8s namespace 介紹
今天來介紹 namespace , 這是 k8s 設計出來抽象的 virtual cluster , 可以應用的層面很廣,下面我們就來依依說明。
namespace 可以應用在不同的商業情境、不同的開發團隊,讓一個實體的 k8s cluster,可以切出幾個虛擬的 cluster。
kubectl --kubeconfig ~/.kube/k3s.yaml get namespace
NAME STATUS AGE
default Active 8d
kube-system Active 8d
kube-public Active 8d
kube-node-lease Active 8d
Namespace 特點
- 在同一個 K8s 中,每個 Namespaces 的名稱都是要獨特的
- 當一個 Namespaces 被刪除時,在該 Namespace 裡的所有物件也會被刪除
- 可以透過 Resource Quotas 限制一個 Namespaces 所可以存取的資源
資源限制
apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
---
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quotas
namespace: test-namespace
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "1"
requests.memory: 10Gi
實務分享
夠過上面的設定就能限制住各個 namespace 硬體資源的控制。
這邊跟大家分享一下,我服務公司的 namespace 架構的討論。
我們實體的 k8s 架設了三份,分成 dev、qa、prod。然後每個專案在三個站都會有獨立 namespace。雖然這樣的設定比較花錢 (三套 k8s),但是因為 k8s 本身也是會有需要升級的問題,如果用一個站台依照 dev、qa、prod 去切換 namespace的話,k8s 只要一升級,同時影響的範圍會很大。所以最終我們決定採取拆三套才能保障真正的隔離乾淨。