如何使用kubectl工具(以有状态/本地方式)同时管理来自不同目录的多个集群



有没有一种方法可以在"会话"中运行kubectl,使其从本地目录而不是从~/.kubeconfig获取kubeconfig?

用例示例

考虑到这个问题的抽象性,有必要在一个例子中描述为什么这可能很有价值。如果有人有一个应用程序,称之为"a",并且他们有4个kubernetes集群,每个集群运行一个,他们可能有一个简单的脚本,在每个集群中执行一些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上下文插件,它以某种方式使kubectl始终检查本地kubeconfig,如果可以的话,在运行之前在后台将上下文设置为全局配置中与目录名匹配的上下文。

  • 我的另一个想法是创建不同的用户,每个用户都有不同的kubeconfig主文件。

  • 当然,使用virtualenv之类的东西,您可能能够在kubeconfig文件具有不同值的情况下执行某些操作。

最终想法

最终,我认为这里的目标是颠覆~/.kubeconfig文件具有任何特定含义的想法,而是研究在同一台机器中使用许多kubeconfig文件的方法,然而,不仅使用--kubeconfig选项,而且还可以以目录本地方式维护状态。

AFAIK,配置文件在~/.kube/config下,而不是~/.kubeconfig下。我想你对你的答案有意见,所以你给了我创建kubevm的好主意,灵感来自AWS CLI的awsvm、管理多个Chef服务器的chefvm和管理多个Ruby版本的rvm

因此,从本质上讲,您可以有一个在不同~/.kube配置之间切换的kubevm设置。您可以使用这样的CLI:

# Use a specific config
kubevm use {YOUR_KUBE_CONFIG|default}
# or
kubevm YOUR_KUBE_CONFIG
# Set your default config
kubevm default YOUR_KUBE_CONFIG
# List your configurations, including current and default
kubevm list
# Create a new config
kubevm create YOUR_KUBE_CONFIG
# Delete a config
kubevm delete YOUR_KUBE_CONFIG
# Copy a config
kubevm copy SRC_CONFIG DEST_CONFIG
# Rename a config
kubevm rename OLD_CONFIG NEW_CONFIG
# Open a config directory in $EDITOR
kubevm edit YOUR_KUBE_CONFIG
# Update kubevm to the latest
kubevm update

如果有用,请告诉我!

最新更新