前言
该项目脱胎于 mergeKubeConfig 项目,最早写该项目的目的是在一堆杂乱无章的 kubeconfig 中*的切换。随着需要操作的 Kubernetes 集群越来越多,在不同的集群之间切换也越来越麻烦,而操作 Kubernetes 集群的本质不过是通过 kubeconfig
访问 Kubernetes 集群的 API Server,以操作 Kubernetes 的各种资源,而 kubeconfig
不过是一个 yaml 文件,用来保存访问集群的密钥,最早的 mergeKubeConfig 不过是一个操作 yaml 文件的 Python 脚本。而随着 golang 学习的深入,也就动了重写这个项目的念头,就这样 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
或者直接下载二进制可执行文件
brew install sunny0826/tap/kubecm
Linux
下载二进制可执行文件
# 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
下载二进制可执行文件,并将文件移动到 $PATH
中即可
命令行自动补全
kubecm 提供了和 kubectl 一样的 completion 命令行自动补全功能(支持 bash/zsh)
以 zsh
为例,在 $HOME/.zshrc
中添加
source <(kubecm completion zsh)
然后使用 source
命令,使其生效
source $HOME/.zshrc
之后,在输入 kubecm
后按 tab 键,就可以看到命令行自动补全的内容
操作 kubeconfig
kubecm 可以实现 kubeconfig
的查看、添加、删除、合并、重命名和切换
查看
# 查看 $HOME/.kube/config 中所有的 context
kubecm
添加
# 添加 example.yaml 到 $HOME/.kube/config.yaml,该方式不会覆盖源 kubeconfig,只会在当前目录中生成一个 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,只会在当前目录中生成一个 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
效果展示
结语
kubecm 项目的初衷为学习 golang 并熟悉 client-go 的使用,随着使用的深入,断断续续增加了不少功能,开发出了一个看上去还算正规的项目。总的来说都是根据自己的喜好来开发的业余项目,欢迎各位通过 ISSUE 来进行交流和讨论。