有没有办法可以在“会话”中运行 kubectl,以便它从本地目录而不是从本地目录获取 kubeconfig ~/.kubeconfig
?
示例用例
鉴于问题的抽象性质,值得描述为什么这在示例中可能很有价值。如果有人有一个应用程序,称之为“a”,并且他们有 4 个 kubernetes 集群,每个集群都运行 a,他们可能有一个简单的脚本,该脚本kubectl
在每个集群中执行一些操作来冒烟测试 A 的新部署,例如,他们可能想要部署该应用程序,并查看之后在每个集群中自动扩展了多少个它的副本。
示例解决方案
就像在 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-context 插件,它以某种方式使 kubectl 总是检查本地 kubeconfig,如果可以的话,在运行之前将上下文设置为全局配置中与目录名称匹配的上下文。
我的另一个想法是创建不同的用户,每个用户都有不同的 kubeconfig 主文件。
当然,使用 virtualenv 之类的东西,你也许可以做一些 kubeconfig 文件有自己不同价值的事情。
最后的想法
最终,我认为这里的目标是颠覆 ~/.kubeconfig 文件具有任何特定含义的想法,而是着眼于在同一台机器上可以使用许多 kubeconfig 文件的方式,但是,不仅仅是使用--kubeconfig
选项,而是,这样状态仍然以目录本地方式维护。