kubecm
2023-01-04
概述
该项目脱胎于 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
安装
github地址:https://github.com/sunny0826/kubecm
Linux
# linux x86_64
curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v0.21.0/kubecm_v0.21.0_Linux_x86_64.tar.gz
tar -zxvf kubecm.tar.gz kubecm
cd kubecm
sudo mv kubecm /usr/local/bin/
MacOS
brew install sunny0826/tap/kubecm
# 或者如下方式
wget https://github.com/sunny0826/kubecm/releases/download/v0.21.0/kubecm_v0.21.0_Darwin_arm64.tar.gz
tar xf kubecm_v0.21.0_Darwin_arm64.tar.gz
./kubecm
命令行自动补全
kubecm 提供了和 kubectl 一样的 completion 命令行自动补全功能(支持 bash/zsh)
以 zsh
为例,在 $HOME/.zshrc
中添加
echo 'source <(kubecm completion zsh)' >> ~/.zshrc
# 使用 source 命令,使其生效
source $HOME/.zshrc
操作 kubeconfig
kubecm 可以实现 kubeconfig 的查看、添加、删除、合并、重命名和切换
查看
# 查看 $HOME/.kube/config 中所有的 context
kubecm list
添加
# 添加 example.yaml 到 $HOME/.kube/config.yaml
# 该方式不会覆盖源 kubeconfig,会在当前目录中生成一个 config.yaml 文件,该文件保存的是原本的kubeconfig内容
kubecm add -f example.yaml
# 注意 需要选择 true 选项
kubecm add -f etek-prod-zhongyulong
Add Context: etek-prod-zhongyulong
👻 True
「etek-prod-zhongyulong」 write successful!
+------------+---------------------------------+-----------------------+--------------------+--------------------------------+--------------+
| CURRENT | NAME | CLUSTER | USER | SERVER | Namespace |
+============+=================================+=======================+====================+================================+==============+
| * | test-prod-logs@cluster.local | cluster.local | test-prod-logs | https://172.16.xx.xxx:6443 | default |
+------------+---------------------------------+-----------------------+--------------------+--------------------------------+--------------+
| | test-prod-zhangsan | cluster-12345 | user-123456 | https://172.16.xx.xxx:6443 | default |
+------------+---------------------------------+-----------------------+--------------------+--------------------------------+--------------+
# 功能同上,但是会将 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
效果展示