Kubernetes namespace 簡單介紹

Kiwi lee
4 min readDec 21, 2021

--

介紹

藉由 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>

Reference

--

--

Kiwi lee
Kiwi lee

Written by Kiwi lee

Hi, I'm kiwi, Platform Engineer (SRE, DevOps). Python Engineer. Love art, books, longboard. https://kiwilee-blog.netlify.app/