介紹
藉由 namespace 可以作到 project 的 resources 的隔離,使不同的 project 可以有相同名字的 deployment, services 。可以當作在 cluster 又在加上一層 virtual cluster 的分割,這個好處是不需要多開實體的 cluster 裡面又包含了 master node 的相關服務。
同一個 namespace 的資源名稱是唯一性
不同 namespaces 的資源名稱可以相同
查看目前的 namespace
# 名字
kubectl get namespaces# 更多資訊
kubectl describe namespaces
預設的 namespaces 如下
NAME STATUS AGE
default Active 1d
kube-node-lease Active 1d
kube-public Active 1d
kube-system Active 1d
- default: object 沒有設定 namespace 的預設
- kube-system: kubernetes 系統使用的
- kube-public: 公開給所有 users ,方便取得目前 cluster 的使用率之類
kube-node-lease
This namespace holds Lease objects associated with each node. Node leases allow the kubelet to send heartbeats so that the control plane can detect node failure.
Create 新的 namespace
避免使用 kube-
作為 namespace 的開頭
kubectl create namespace <ns-name>
Switch 到別的 namespace
kubectl config set-context --current --namespace=<ns-name>
確認目前的 namespace: 透過 kubectl config 來查看
# 在裡面可以找到 namespaces
kubectl config view# 利用 grep 來篩選
kubectl config view --minify | grep namespace:
運行在指定 namespace 的 pod
kubectl run nginx --image=nginx --namespace=<ns-name>
查看在指定 namespace 的 pods
kubectl get pods --namespace=<ns-name>
Namepsace 的特性
- 彼此的 namespace 基本上不能互連 (這個我不是非常確定 QQ)
- Namespace delete 掉,裡面的 resources 也跟著不見!
- 可透過 Resouce Quotas 調控/限制系統的資源 !!必要的
在 yaml 檔的寫法
...
kind: pod
metatdata:
namespace: <ns-name>
name: <pod-name>