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

Kubernetes 如何使用kubectl工具(以有状态/本地方式)同时管理来自不同目录的多个集群?,kubernetes,local,kubectl,kubeconfig,Kubernetes,Local,Kubectl,Kubeconfig,是否有一种方法可以在“会话”中运行kubectl,使其从本地目录而不是从~/.kubeconfig获取kubeconfig 示例用例 鉴于这个问题的抽象性质,值得在一个例子中说明为什么这可能是有价值的。如果有人有一个应用程序,称之为“a”,他们有4个kubernetes集群,每个集群运行a,他们可能有一个简单的脚本,在每个集群中执行一些kubectl操作,以冒烟测试a的新部署,例如,他们可能想要部署该应用程序,然后查看每个集群中自动缩放了多少副本 示例解 在git中,可能会有一个“如果可以找到本

是否有一种方法可以在“会话”中运行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
cd第一集群
猫库贝肯
第一簇
...
EOF
kubectl得到豆荚
p4
然后,在另一个终端:

cd firstcluster
cat << EOF > kubeconfig
firstcluster
...
EOF
kubectl get pods
p4
cd secondcluster/
cat << EOF > kubeconfig
secondcluster
...
EOF
kubectl get pods
p1
p2
p3
cd第二集群/
猫库贝肯
第二簇
...
EOF
kubectl得到豆荚
p1
p2
p3
因此,完全相同的kubectl命令(无需设置上下文)实际上是针对新集群运行的,具体取决于您所在的目录

一些解决方案的想法
  • 我的一个想法是,编写一个kubectl上下文插件,它以某种方式使kubectl始终检查本地kubeconfig,在运行之前尽可能在后台将上下文设置为与目录名匹配的全局配置中的上下文

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

  • 当然,使用virtualenv之类的工具,您可能可以在kubeconfig文件具有不同价值的地方执行某些操作

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

AFAIK,配置文件在
~/.kube/config
下,而不是
~/.kubeconfig
下。我想你正在看关于你的答案的意见,所以你给了我一个关于创建的好主意,灵感来自于,管理多个Chef服务器和管理多个Ruby版本

因此,本质上,您可以有一个
kubevm
设置,在不同的
~/.kube
配置之间切换。您可以像这样使用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

让我知道它是否有用

这是一个很好的解决方案!我想你的答案是:不,至少在库贝特没有。我会追踪Kubevm并很快开始玩它!对于我的团队来说,这似乎是一个很好的解决方案。对,没有管理多个kubectl配置的正式解决方案