Kubernetes 上下文切换噩梦已结束
Source: Dev.to

如果你每天都在使用多个 Kubernetes 集群,你一定懂得其中的痛苦。生产、预发布、开发,甚至是上个月某人随手起的测试集群——它们全部都写在你的 kubeconfig 文件里,切换它们就像蒙着眼在迷宫里摸索。
我受够了,于是我写了 kubecfg。
什么是 kubecfg?
kubecfg 是一个简化 kubeconfig 管理的 CLI 工具。它可以让你:
- 添加 带自定义名称的新集群配置
- 列出 所有上下文,一目了然
- 切换 上下文并可选指定命名空间
- 交互式 管理命名空间
- 重命名 上下文,使其更易记
- 删除 不再需要的上下文
- 合并 多个 kubeconfig 文件
杀手级功能?带模糊搜索的交互式选择器。再也不需要复制粘贴冗长的上下文名称。
快速演示
带命名空间的上下文切换
kubecfg use -n
该命令会打开交互式选择器让你先选上下文,然后再询问要使用的命名空间。两次选择在同一流程中完成。
Select context
minikube
▸ production-eks
staging-gke
dev-local
✓ production-eks
Select namespace
default
kube-system
▸ backend-services
frontend
monitoring
✓ backend-services
Switched to context 'production-eks' with namespace 'backend-services'
只切换上下文
kubecfg use production-eks
带指定命名空间切换
kubecfg use production-eks -n backend-services
-n 参数很智能:不带值时进入交互式选择,直接提供值则直接使用。
安装
Homebrew(macOS)
brew tap kadirbelkuyu/tap
brew install kadirbelkuyu/tap/kubecfg
Go 安装
go install github.com/kadirbelkuyu/kubecfg@latest
从源码编译
git clone https://github.com/kadirbelkuyu/kubecfg.git
cd kubecfg
go build -o kubecfg .
sudo mv kubecfg /usr/local/bin/
命令详解
添加新集群
kubecfg add ~/Downloads/eks-config.yaml --name production-eks
原始文件保持不变。上下文会以你指定的名称加入主 kubeconfig。
列出所有上下文
kubecfg list
输出
CURRENT NAME CLUSTER SERVER NAMESPACE
* production-eks production-eks https://xxx.eks.amazonaws.com backend
staging-gke staging-gke https://xxx.gke.googleapis.com -
dev-local minikube https://192.168.49.2:8443 default
星号表示当前上下文。- 表示使用默认命名空间。
交互式上下文切换
kubecfg use
无需参数。会弹出交互式选择器,使用方向键移动,Enter 确认。
Select context
minikube
▸ production-eks
staging-gke
✓ production-eks
Switched to context 'production-eks'
命名空间管理
为当前上下文切换命名空间
kubecfg ns
交互式选择器会直接从集群读取可用命名空间:
Select namespace
default
kube-system
▸ backend-services
monitoring
✓ backend-services
Namespace set to 'backend-services'
直接设置命名空间
kubecfg ns kube-system
查看当前命名空间
kubecfg ns current
# Output: backend-services
重命名上下文
kubecfg rename arn:aws:eks:us-east-1:123456789:cluster/prod production
删除上下文
kubecfg remove old-cluster
会出现确认提示:
Remove context 'old-cluster'? [y/N]:
使用 --force 跳过提示:
kubecfg remove old-cluster --force
合并配置文件
kubecfg merge config1.yaml config2.yaml config3.yaml -o merged.yaml
所有上下文、集群和用户会合并到同一个文件中,重复项会被优雅处理。