Kubernetes 如何将kubectl配置文件与~/.kube/config合并?

Kubernetes 如何将kubectl配置文件与~/.kube/config合并?,kubernetes,Kubernetes,是否有一个简单的kubectl命令来获取kubeconfig文件(包含集群+上下文+用户)并将其作为附加上下文合并到~/.kube/config文件中?执行以下操作: export KUBECONFIG=~/.kube/config:~/someotherconfig kubectl config view --flatten 然后,如果需要,您可以将其导出到一个新文件。如果您想将两个配置文件合并到一个配置文件中 我发现了这种方法(不确定这是否是最简单的) 然后在需要的地方复制新的配置文件,

是否有一个简单的
kubectl
命令来获取
kubeconfig
文件(包含集群+上下文+用户)并将其作为附加上下文合并到~/.kube/config文件中?

执行以下操作:

export KUBECONFIG=~/.kube/config:~/someotherconfig 
kubectl config view --flatten

然后,如果需要,您可以将其导出到一个新文件。

如果您想将两个配置文件合并到一个配置文件中

我发现了这种方法(不确定这是否是最简单的)


然后在需要的地方复制新的配置文件,如果您发现自己经常这样做,也不要忘记取消设置KUBECONFIG环境变量。。。现在还有用于
kubectl
krew
插件包管理器

krew
插件“”可以帮助您管理
~/.kube/config
文件

使用
konfig
插件,语法如下:

kubectl-konfig导入-s new.yaml

要安装
krew

要安装
konfig
kubectl krew立即使用多个
kubeconfig
安装konfig

有时您有一堆小的kubeconfig文件(例如,每个集群一个),但您希望使用
kubectl
等工具或同时处理多个上下文的工具同时使用它们

为此,您需要一个“合并的”kubeconfig文件。在下面的“合并kubeconfig文件”一节中,我们将解释如何将kubeconfig文件合并到单个文件中,但也可以在内存中合并它们

通过在
KUBECONFIG
环境变量中指定多个文件,可以临时将KUBECONFIG文件缝合在一起,并在
kubectl
中使用它们

#
#内存合并中的Kubeconfig
#
导出KUBECONFIG=file1:file2
kubectl get pods——上下文=cluster-1
kubectl get pods——上下文=集群2
#
#以你为例
#合并kubeconfig文件w/$HOME/.kube/config(w/cp备份)
#
cp$HOME/.kube/config$HOME/.kube/config.backup.$(日期+%Y-%m-%d.%H:%m:%S)
KUBECONFIG=$HOME/.kube/config:file2:kubectl配置视图--合并--展平>\
~/.kube/merged\u kubeconfig&&mv~/.kube/merged\u kubeconfig~/.kube/config
kubectl get pods——上下文=cluster-1
kubectl get pods——上下文=集群2
合并kubeconfig文件 由于kubeconfig文件是结构化的YAML文件,因此您不能仅仅附加它们以获得一个大的kubeconfig文件,但是
kubectl
可以帮助您合并这些文件:

#
#合并kubeconfig文件w/$HOME/.kube/config(w/cp备份)
#
cp$HOME/.kube/config$HOME/.kube/config.backup.$(日期+%Y-%m-%d.%H:%m:%S)
KUBECONFIG=$HOME/.kube/config:file2:file3 kubectl配置视图--合并--展平>\
~/.kube/merged\u kubeconfig&&mv~/.kube/merged\u kubeconfig~/.kube/config
kubectl get pods——上下文=cluster-1
kubectl get pods——上下文=集群2
从kubeconfig文件中提取上下文 假设您遵循了之前的合并kubeconfig文件,并且在
$HOME/.kube/config
中有一个合并的kubeconfig文件。现在,您需要将集群的信息提取到一个可移植的kubeconfig文件中,该文件只包含连接到该集群所需的部分

运行:

在这个命令中,我们将有关
context-1
的数据从
$HOME/.kube/config
提取到
config-context-1
文件。
--minify
标志允许我们仅提取有关该上下文的信息,
--flatte
标志允许我们保持凭据不被删除


参考文章:

动态合并您的多个配置文件。bashrc:

export KUBECONFIG=/Users/<user>/.kube/config:/Users/<user>/.kube/other.config
source <(kubectl completion bash)

如果您使用bash,您可以使用它简单地添加配置:

function kmerge() {
 DATE=$(date +"%Y%m%d%H%M")
 KUBECONFIG=~/.kube/config:$1 kubectl config view --flatten > ~/.kube/mergedkub && mv ~/.kube/config ~/.kube/config-$DATE && mv ~/.kube/mergedkub ~/.kube/config
}
然后只需使用“kmerge$newConfigfile”来添加这个。
请注意,clusternames等应与现有配置条目不同

如果希望在
~/.kube
目录中具有某种结构,可以按照这些说明操作

  • 将以下代码段添加到
    ~/.bashrc
  • 分别在
    ~/.kube/config.d
    下添加配置文件
  • 调用
    更新\u kubeconfig
    ,或打开新终端
  • update\u kubeconfig
    只查看
    ~/.kube/config.d
    目录,如果在
    ~/.kube/config
    下有任何比当前配置文件更新的文件,它会对其进行更新

    函数更新\u kubeconfig(){
    [!-d“$HOME/.kube/config.d”]&mkdir$HOME/.kube/config.d-p-v
    #仅当配置目录中有新文件时才会运行
    本地新文件=$(查找$HOME/.kube/config.d/-newer$HOME/.kube/config-type f | wc-l)
    如果[[$new_files-ne“0”]];则
    本地当前上下文=$(kubectl配置当前上下文)#保存最后一个上下文
    本地kubeconfigfile=“$HOME/.kube/config”#新配置文件
    cp-一个$kubeconfigfile“${kubeconfigfile}{(日期+%Y%m%d%H%m%S”)”#备份
    本地kubeconfig_文件=“$kubeconfig文件:$(ls$HOME/.kube/config.d/*| tr'\n'':')”
    KUBECONFIG=$KUBECONFIG\u文件kubectl配置视图--合并--展平>“$HOME/.kube/tmp”
    mv“$HOME/.kube/tmp”$kubeconfig文件和&chmod 600$kubeconfig文件
    导出KUBECONFIG=$kubeconfigfile
    kubectl配置使用上下文$current_context--namespace=default
    fi
    }
    #这将在您每次使用source.bashrc时调用。如果您每次都要手动调用它,请将其删除
    更新_kubeconfig
    
    ~/.kube/confing.d
    删除文件将不会再次调用脚本。正如@rafaelrezend所指出的,检查配置文件中是否存在可能导致问题的名称冲突


    接下来,我不建议使用kubectl合并kubeconfig文件

    • 如上所述,这是一项手动工作(设置环境变量等)
    • 缺点是当通过“kubectl”使用此上下文时 config use context“它将当前上下文写入kubecon
      export KUBECONFIG=/Users/<user>/.kube/config:/Users/<user>/.kube/other.config
      source <(kubectl completion bash)
      
      kubectl config view
      
      function kmerge() {
       DATE=$(date +"%Y%m%d%H%M")
       KUBECONFIG=~/.kube/config:$1 kubectl config view --flatten > ~/.kube/mergedkub && mv ~/.kube/config ~/.kube/config-$DATE && mv ~/.kube/mergedkub ~/.kube/config
      }
      
      konfig=$(KUBECONFIG=~/.kube/config:new-config.yaml kubectl config view --flatten)
      
      echo "$konfig" > ~/.kube/config