前面建立的資源都放在 default。這次我們另外開一個叫 lab 的命名空間,體驗同名資源如何待在同一個叢集,卻不會互相撞名。
先建立命名空間,再確認它已經出現在清單裡:
kubectl create namespace lab
kubectl get namespaces
看到 lab 的狀態是 Active,表示它已經可以放入資源。如果名稱不存在,下一步指定 -n lab 時就會直接報錯。
default 裡已經有一個 web,現在我們在 lab 再建立一個同名 Deployment。-n lab 的意思,就是把這次操作送到 lab:
kubectl create deployment web --image=nginx:1.28 -n lab
kubectl rollout status deployment/web -n lab --timeout=120s
即使名字相同也能建立成功,因為兩個 Deployment 所在的命名空間不同。查詢或排錯時,除了資源名稱,也要一起確認它住在哪裡。
先各查一次,再用跨命名空間查詢比較結果。最後一個指令會多顯示 NAMESPACE 欄位,讓你看出每個 web 實際屬於哪裡:
kubectl get deployments -n default
kubectl get deployments -n lab
kubectl get deployments --all-namespaces
這系列會繼續在指令中明確寫出命名空間。如果你之前改過目前 context 的預設值,先切回 default,避免後面的指令跑到不同位置:
kubectl config set-context --current --namespace=default
先保留 lab,下一篇實作還會用到它。也別急著執行 kubectl delete namespace lab,因為刪除命名空間時,裡面的 Deployment、Pod 和其他資源都會一起消失。
參考:命名空間的操作方式