文章目录
2021-12-20 更新
由于 kubie
是开一个子 shell 它会导致 direnv
失效,也就是说 kubie
和 direnv
无法共同使用,我只好再去尝试其他兼容的方案,毕竟如果换回 kubectx
就依然有维护 kubeconfig 的烦恼。这里找到一个新的工具 kubecm 可以帮助做 kubeconfig 的合并。
不过其实它也包含了 kubectx 的功能,但我的 kubectx 还提供了自动补全等东西,就这么一直用着了。
开始
如果需要维护很多 kubernetes 集群,每个集群都有一个 kubeconfig 的 yaml 那么在 ~/.kube
目录下就会有一大堆的 yaml 。在频繁切换和修改不同的集群的内容的时候,一个不小心就可能把 A 集群的东西部署到 B 集群造成运维事故。这里介绍下到目前为止维护对多个集群环境的一些痛点和实践。
首先先总结下痛点吧:
- 多个集群以及集群的 namespace 切换比较繁琐,通常需要 KUBECONFIG 环境变量的切换
- 不晓得自己当前处于哪个集群下
- 在使用 kustomize 或者 helm 对集群做更新的时候需要确保自己切换了 kubeconfig,除了小心之外没什么办法阻止错位的环境部署
下面记录下自己在试图解决这些痛点过程中找到的还不错的方案。
kubectx 快速切换上下文和 namespace
kubectx
可以切换 ~/.kube/config
文件中的多个 context
,然后可以通过 kubens
命令切换不同的 namespace
。但如果我有一堆 kubeconfig yaml 的话还需要额外的一步,将它们合并到 ~/.kube/config
文件里。这个步骤用 kubectl 就能搞定:
KUBECONFIG=~/.kube/config:~/.kube/other.yaml kubectl config view \
--merge --flatten > out.txt
不过依然是多了一步,而且既然有添加就有删除,如果其中一个集群的配置文件变化了或者废弃了就需要把这个集群剃掉:
kubectl config unset users.gke_project_zone_name
kubectl config unset contexts.aws_cluster1-kubernetes
kubectl config unset clusters.foobar-baz
zsh / bash / fish 集成展示当前 context
既然 kubectl config current-context