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

示例用例

考虑到问题的抽象性质,值得在一个示例中说明为什么这可能是有值(value)的。如果某人有一个应用程序,将其称为“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选项,而是,以仍然以目录本地方式维护状态的方式。

    最佳答案

    AFAIK,配置文件位于~/.kube/config下,而不是~/.kubeconfig下。我想您正在对您的答案发表意见,因此您给了我关于创建 kubevm 的好主意,灵感来自 awsvm AWS CLI chefvm 的管理多个Chef服务器和 rvm 的管理多个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
    

    让我知道它是否有用!

    10-08 19:30