有没有一种方法可以在“会话”中运行kubectl,使其从本地目录而不是从本地目录获取kubeconfig
~/.kubeconfig
?
示例用例
考虑到这个问题的抽象性质,值得在一个例子中描述一下为什么这可能是有价值的。如果有人有一个应用程序,称之为“a”,他们有4个kubernetes集群,每个集群运行一个,他们可能有一个简单的脚本,可以执行一些操作
kubectl
每个集群中的操作要冒烟测试应用程序的新部署,例如,他们可能想要部署应用程序,然后查看每个集群中自动缩放的应用程序副本数。
示例解决方案
在git中,可能会有一个“如果可以找到本地kubeconfig文件,请尝试使用该文件”作为git风格的全局设置:
kubectl global set-precedence local-kubectl
然后,在一个终端中:
cd firstcluster
cat << EOF > kubeconfig
firstcluster
...
EOF
kubectl get pods
p4
然后,在另一个终端:
cd secondcluster/
cat << EOF > kubeconfig
secondcluster
...
EOF
kubectl get pods
p1
p2
p3
因此,完全相同的kubectl命令(无需设置上下文)实际上是针对新集群运行的,具体取决于您所在的目录。
一些解决方案的想法
-
我的一个想法是,编写一个kubectl上下文插件,不知何故,它让kubectl始终检查本地kubeconfig,在运行之前尽可能在后台将上下文设置为与目录名匹配的全局配置中的上下文。
-
我的另一个想法是创建不同的用户,每个用户都有不同的kubeconfig主文件。
-
当然,使用virtualenv之类的工具,您可能可以在kubeconfig文件有其不同价值的地方做一些事情。
最后的想法
最终我认为这里的目标是颠覆a~/的观点。kubeconfig文件有任何特定的含义,相反,请查看许多kubeconfig文件可以在同一台机器中使用的方式,而不仅仅是使用
--kubeconfig
选项,但状态仍然以目录本地方式维护。