2

有没有办法可以在“会话”中运行 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选项,而是,这样状态仍然以目录本地方式维护。

4

1 回答 1

2

AFAIK,配置文件位于~/.kube/config而不是~/.kubeconfig. 我想您正在查看对您的答案的意见,所以您给了我一个很棒的想法,关于创建,受AWS CLIkubevm的启发,awsvm用于管理多个 Chef 服务器和管理多个 Ruby 版本。chefvmrvm

所以,本质上,你可以有一个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

让我知道它是否有用!

于 2018-11-05T23:04:59.983 回答