
前言
該項目脫胎于 mergeKubeConfig 項目,最早寫該項目的目的是在一堆雜亂無章的 kubeconfig 中自由的切換。隨著需要操作的 Kubernetes 集群越來越多,在不同的集群之間切換也越來越麻煩,而操作 Kubernetes 集群的本質(zhì)不過是通過 kubeconfig 訪問 Kubernetes 集群的 API Server,以操作 Kubernetes 的各種資源,而 kubeconfig 不過是一個 yaml 文件,用來保存訪問集群的密鑰,最早的 mergeKubeConfig 不過是一個操作 yaml 文件的 Python 腳本。而隨著 golang 學(xué)習(xí)的深入,也就動了重寫這個項目的念頭,就這樣 kubecm 誕生了。
kubecm
kubecm 由 golang 編寫,支持 Mac Linux 和 windows 平臺,delete rename switch 提供比較實用的交互式的操作,目前的功能包括:
- add :添加新的
kubeconfig到$HOME/.kube/config中 - completion :命令行自動補全功能
- delete:刪除已有的
context,提供交互式和指定刪除兩種方式 - merge:將指定目錄中的
kubeconfig合并為一個kubeconfig文件 - rename:重名指定的
context,提供交互式和指定重命名兩種方式 - switch:交互式切換
context
安裝
kubecm 支持 Mac Linux 和 windows 平臺,安裝方式也比較簡單:
MacOS
使用 brew 或者直接下載二進(jìn)制可執(zhí)行文件
brew install sunny0826/tap/kubecm
Linux
下載二進(jìn)制可執(zhí)行文件
# linux x86_64
curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v${VERSION}/kubecm_${VERSION}_Linux_x86_64.tar.gz
tar -zxvf kubecm.tar.gz kubecm
cd kubecm
sudo mv kubecm /usr/local/bin/
Windows
下載二進(jìn)制可執(zhí)行文件,并將文件移動到 $PATH 中即可
命令行自動補全
kubecm 提供了和 kubectl 一樣的 completion 命令行自動補全功能(支持 bash/zsh)
以 zsh 為例,在 $HOME/.zshrc 中添加
source <(kubecm completion zsh)
然后使用 source 命令,使其生效
source $HOME/.zshrc
之后,在輸入 kubecm 后按 <kbd>tab</kbd> 鍵,就可以看到命令行自動補全的內(nèi)容

操作 kubeconfig
kubecm 可以實現(xiàn) kubeconfig 的查看、添加、刪除、合并、重命名和切換
查看
# 查看 $HOME/.kube/config 中所有的 context
kubecm
添加
# 添加 example.yaml 到 $HOME/.kube/config.yaml,該方式不會覆蓋源 kubeconfig,只會在當(dāng)前目錄中生成一個 config.yaml 文件
kubecm add -f example.yaml
# 功能同上,但是會將 example.yaml 中的 context 命名為 test
kubecm add -f example.yaml -n test
# 添加 -c 會覆蓋源 kubeconfig
kubecm add -f example.yaml -c
刪除
# 交互式刪除
kubecm delete
# 刪除指定 context
kubecm delete my-context
合并
# 合并 test 目錄中的 kubeconfig,該方式不會覆蓋源 kubeconfig,只會在當(dāng)前目錄中生成一個 config.yaml 文件
kubecm merge -f test
# 添加 -c 會覆蓋源 kubeconfig
kubecm merge -f test -c
重命名
# 交互式重命名
kubecm rename
# 將 dev 重命名為 test
kubecm rename -o dev -n test
# 重命名 current-context 為 dev
kubecm rename -n dev -c
效果展示

結(jié)語
kubecm 項目的初衷為學(xué)習(xí) golang 并熟悉 client-go 的使用,隨著使用的深入,斷斷續(xù)續(xù)增加了不少功能,開發(fā)出了一個看上去還算正規(guī)的項目??偟膩碚f都是根據(jù)自己的喜好來開發(fā)的業(yè)余項目,歡迎各位通過 ISSUE 來進(jìn)行交流和討論。