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