安裝 kubectx 並快速切換 Kubernetes context 與 namespace
安裝 kubectx 並快速切換 Kubernetes context 與 namespace
在操作 Kubernetes 時,kubectl 會依照目前 kubeconfig 中設定的 context 決定要連線到哪個叢集,以及預設操作哪個 namespace。當環境只有一個 Minikube 或單一測試叢集時,直接使用 kubectl config use-context 還算容易管理;但只要 context 或 namespace 變多,每次切換都輸入完整指令就會變得有點繁瑣。
kubectx 和 kubens 是用來簡化這件事的工具。kubectx 可以快速查看與切換 Kubernetes context,kubens 則可以快速查看與切換目前 context 的 namespace。這篇文章會示範如何在 Ubuntu 環境安裝 kubectx,並搭配實際範例操作 kubectx 與 kubens。
官方專案連結:ahmetb/kubectx
kubectx 與 kubens 是什麼?
kubectx 和 kubens 都是圍繞 kubectl 使用體驗設計的小工具:
| 工具 | 用途 |
|---|---|
kubectx |
查看、切換 Kubernetes context,也就是切換目前 kubectl 操作的叢集或操作環境 |
kubens |
查看、切換目前 context 使用的 namespace |
如果平常會在多個 Kubernetes 環境之間切換,例如 minikube、測試環境、正式環境,或是在同一個叢集中頻繁操作不同 namespace,這兩個工具可以讓指令變得更短、更直覺。
安裝 kubectx
在 Ubuntu 或 Debian 環境中,可以直接透過 apt 安裝 kubectx:
1 | sudo apt install kubectx |
安裝過程會下載並安裝 kubectx 套件。完成後回到 shell 提示字元,就可以開始使用 kubectx 指令。
除了 apt 之外,官方也提供多種安裝方式,常見方式如下:
| 平台或工具 | 安裝指令 |
|---|---|
| Homebrew | brew install kubectx |
| apt | sudo apt install kubectx |
| Chocolatey | choco install kubens kubectx |
| Scoop | scoop bucket add main && scoop install main/kubens main/kubectx |
| winget | winget install --id ahmetb.kubectx && winget install --id ahmetb.kubens |
| Krew | kubectl krew install ctx && kubectl krew install ns |
如果不想透過套件管理工具安裝,也可以到官方 GitHub Releases 頁面下載對應平台的 binary,放到 PATH 中即可使用。
處理 KUBECONFIG 多檔案問題
安裝完成後,直接執行 kubectx 可能會遇到下列錯誤:
1 | kubectx |
畫面中的錯誤訊息如下:
1 | error: kubeconfig error: failed to load: cannot determine kubeconfig path: multiple files in KUBECONFIG are currently not supported |
這代表目前的 KUBECONFIG 環境變數指向多個 kubeconfig 檔案,但此版本的 kubectx 無法直接判斷要寫回哪一個 kubeconfig。解法是先將目前合併後的 kubeconfig 內容輸出成單一檔案,再讓 KUBECONFIG 指向這個單一設定檔。
先使用 kubectl config view --flatten 將目前可讀取到的 kubeconfig 合併成一份檔案:
1 | kubectl config view --flatten > ~/.kube/config_merged |
接著備份原本的 kubeconfig,並用合併後的檔案取代主要設定檔:
1 | mv ~/.kube/config ~/.kube/config.bak |
再編輯 ~/.bashrc,將 KUBECONFIG 指向單一 kubeconfig:
1 | nano ~/.bashrc |
在檔案中加入或調整下列設定:
1 | export KUBECONFIG=~/.kube/config |
儲存後重新載入 shell 設定:
1 | source ~/.bashrc |
完成後再次執行 kubectx,如果能正常列出 context,就代表設定已經修正完成。
使用 kubectx 查看與切換 context
直接執行 kubectx 可以列出目前 kubeconfig 中所有可用的 context:
1 | kubectx |
在範例中可以看到兩個 context:
dockertest-contextminikube
如果要切換到 dockertest-context,只需要把 context 名稱接在 kubectx 後面:
1 | kubectx dockertest-context |
切換完成後,後續執行的 kubectl 指令就會使用該 context。可以透過 kubectl get pods 驗證目前 context 是否能正常操作 Kubernetes 資源。
1 | kubectl get pods |
如果想切回上一個 context,可以使用:
1 | kubectx - |
這個用法很適合在兩個環境之間來回切換,例如本機測試環境與另一個開發用 context。
使用 kubens 查看與切換 namespace
kubens 的使用方式與 kubectx 很接近。直接執行 kubens 可以列出目前 context 中可用的 namespace:
1 | kubens |
如果要把目前 context 的預設 namespace 切換到 dockertest,可以執行:
1 | kubens dockertest |
切換完成後,直接執行 kubectl get all 就會查詢 dockertest namespace 內的資源,不需要再額外加上 -n dockertest。
1 | kubectl get all |
如果要切回上一個 namespace,也可以使用:
1 | kubens - |
常用指令整理
以下整理幾個 kubectx 與 kubens 的常用指令:
| 指令 | 用途 |
|---|---|
kubectx |
列出目前可用的 context |
kubectx <context-name> |
切換到指定 context |
kubectx - |
切回上一個 context |
kubens |
列出目前 context 中可用的 namespace |
kubens <namespace> |
切換目前 context 的預設 namespace |
kubens - |
切回上一個 namespace |
官方 README 中也提到,如果有安裝 fzf,kubectx 與 kubens 可以搭配互動式模糊搜尋選單使用。對於 context 或 namespace 很多的環境來說,這會比逐字輸入完整名稱更方便。
小結
kubectx 和 kubens 可以把 Kubernetes 日常操作中最常見的兩件事簡化:切換 context 與切換 namespace。安裝完成後,只要用 kubectx 選擇操作環境,再用 kubens 指定預設 namespace,就能讓後續的 kubectl 指令更簡潔,也能降低操作錯叢集或錯 namespace 的風險。
如果環境中使用多個 kubeconfig 檔案,遇到 multiple files in KUBECONFIG are currently not supported 錯誤時,可以先用 kubectl config view --flatten 合併成單一 kubeconfig,再讓 KUBECONFIG 指向該檔案。修正後就能正常使用 kubectx 與 kubens 管理 Kubernetes 操作環境。