iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0

叢集昨天建好了,先來認識 namespace,順便熟悉一下 kubectl 最常用的三個指令

namespace 可以想成叢集裡面的資料夾,把資源分區放,彼此不會混在一起。同一個名字在不同 namespace 裡可以各自存在,但在同一個 namespace 裡就得是唯一的。Kubernetes 自己的元件也住在 namespace 裡,就是 kube-system 那一包

先看看叢集裡本來就有哪些,然後建一個自己的

kubectl get namespaces
kubectl create namespace ithome-lab
kubectl get namespaces

https://ithelp.ithome.com.tw/upload/images/20260918/20176154VKN47xxdtT.png

除了 default 跟 kube-system,還會看到幾個名字裡有 kube 的,那些都是叢集自己在用的,不要去動它。之後三十天我的東西都會放在 ithome-lab,這樣要重來的時候,整個 namespace 砍掉就好,不會誤傷別的

接著是 get,get 是列出某一類資源現在有哪些,加 -n 指定 namespace

kubectl get pods -n ithome-lab
kubectl get all -n ithome-lab

https://ithelp.ithome.com.tw/upload/images/20260918/20176154GFMAdd0Sb9.png

現在什麼都沒有,會回一句 No resources found,這是正常的,因為我還沒放任何東西進去

然後是 describe,get 給你一份清單,describe 給你單一個資源的細節,最下面通常還會有 Events

kubectl describe namespace ithome-lab

https://ithelp.ithome.com.tw/upload/images/20260918/20176154H7f9Q4CLkx.png

最後是 explain,它可以直接查某個資源有哪些欄位可以寫,等於離線版的手冊

kubectl explain pod
kubectl explain pod.spec.containers

https://ithelp.ithome.com.tw/upload/images/20260918/201761541PmZuQj3yS.png

kubectl explain pod.spec.containers太長了,就不截了

後面要開始寫 YAML 的時候,與其每次都去翻官方文件,不如直接 explain 一層一層點進去看

還有一個小地方,如果覺得每次都要打 -n ithome-lab 很煩,可以把目前 context 的預設 namespace 改掉

kubectl config set-context --current --namespace=ithome-lab
kubectl config get-contexts

# 切回預設
# kubectl config set-context --current --namespace=default

https://ithelp.ithome.com.tw/upload/images/20260918/201761547Ob1y7FZar.png

不過我自己還是會乖乖把 -n 打出來

明天見 :D


上一篇
Day 3 建 K8s 叢集
下一篇
Day 5 Pod
系列文
讓Claude Code當我的 K8s 助教:部署、故障排查與入門可觀測性7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
justin_log
iT邦新手 5 級 ‧ 2026-09-18 13:35:42

文章中提到可以使用 kubectl config set-context --current --namespace=ithome-lab 來切換預設 namespace,但你最後提到自己還是習慣每次都顯式帶上 -n 參數。在團隊協作或正式 production 環境的操作習慣中,這兩種作法各自有哪些優缺點與潛在風險?另外有建議搭配什麼工具(例如 kubectx / kubens 或 prompt 提示外掛)來避免切換環境或 namespace 時的操作失誤嗎?

看更多先前的回應...收起先前的回應...
noalowo iT邦新手 4 級 ‧ 2026-09-18 13:44:49 檢舉

謝謝學長的問題
set-context 少打字,但它改的是 kubeconfig,全域而且會一直留著,指令本身看不出會打到哪個 namespace,貼給別人照跑結果也會因人而異。-n 比較麻煩,但每一行自己把目標講清楚,可以直接複製和 review。缺點是忘記打會默默退回預設 namespace,所以我會把 namespace 也寫進 manifest,帶了 -n 卻對不上時 kubectl 會直接報錯
工具的話,kubectx / kubens 讓切換變快,但不會讓切換變安全。claude 推薦把 context 和 namespace 顯示在 prompt 上(bash/zsh 用 kube-ps1,PowerShell 可以用 starship 或 oh-my-posh),production 的 context 設成紅色。正式環境最根本的做法還是個人帳號唯讀、變更走 CI/CD 或 GitOps,讓人不需要手動對 prod 下寫入指令

noalowo iT邦新手 4 級 ‧ 2026-09-18 13:47:38 檢舉

/images/emoticon/emoticon06.gif

明天見

把 namespace 寫進 Manifest 達到 -n 交叉驗證報錯確實是非常棒的防呆!

不過實務上如果同一套 Manifest 要用 Helm / Kustomize 部署到不同環境(如 dev / staging / prod),大家通常會把 Manifest 裡的 metadata.namespace 拿掉,改由 CI/CD Pipeline 帶參數進去,這時候手動維護跟自動化流程就會產生一點權衡。

另外用 Prompt 顯示 context + prod 著色這招真的必備,沒裝 kube-ps1 真的不敢隨便下指令 🤣

noalowo iT邦新手 4 級 ‧ 2026-09-18 13:59:10 檢舉

/images/emoticon/emoticon38.gif

我要留言

立即登入留言