是否有一个简单的kubectl
命令来获取kubeconfig
文件(包含群集+上下文+用户)并将其合并到〜/ .kube / config文件中作为附加上下文?< / p>
答案 0 :(得分:34)
这样做:
KUBECONFIG=~/.kube/config:~/someotherconfig
kubectl config view --flatten
如果需要,您可以将其传输到新文件。
答案 1 :(得分:3)
有可能,请按照以下步骤操作:
从你的配置文件创建一个备份:
cp ~/.kube/config-bkp
用你的新配置文件创建一个文件:
vi ~/.kube/new-config
将它们合并到配置中:
KUBECONFIG=~/.kube/config:~/.kube/new-config kubectl config view --flatten > ~/.kube/config
要查看可用的上下文,请使用:
kubectl config get-contexts
要更改上下文,请使用:
kubectl config use-context YOUR-CONTEXT-NAME
答案 2 :(得分:2)
kubeconfigs
有时您有一堆小的 kubeconfig 文件(例如,每个群集一个),但是您想同时使用kubectl
或kubectx之类的工具来全部使用它们一次处理多个上下文。
为此,您需要一个“合并的” kubeconfig 文件。在下面的 “合并kubeconfig文件” 部分中,我们说明了如何将 kubeconfigs 合并到一个文件中,但是您也可以将它们合并内存中。
通过在KUBECONFIG
环境变量中指定多个文件,您可以将 kubeconfig 文件临时缝合在一起,并在kubectl
中全部使用它们。
#
# Kubeconfig in-memory merge
#
export KUBECONFIG=file1:file2
kubectl get pods --context=cluster-1
kubectl get pods --context=cluster-2
#
# For your example
# merging your kubeconfig file w/ $HOME/.kube/config (w/ cp backup)
#
cp $HOME/.kube/config $HOME/.kube/config.backup.$(date +%Y-%m-%d.%H:%M:%S)
KUBECONFIG= $HOME/.kube/config:file2: kubectl config view --merge --flatten > \
~/.kube/merged_kubeconfig && mv ~/.kube/merged_kubeconfig ~/.kube/config
kubectl get pods --context=cluster-1
kubectl get pods --context=cluster-2
由于 kubeconfig 文件是结构化的YAML文件,因此您不能仅将它们附加以获得一个大的 kubeconfig 文件,但是kubectl
可以帮助您合并这些文件文件:
#
# Merging your kubeconfig file w/ $HOME/.kube/config (w/ cp backup)
#
cp $HOME/.kube/config $HOME/.kube/config.backup.$(date +%Y-%m-%d.%H:%M:%S)
KUBECONFIG=$HOME/.kube/config:file2:file3 kubectl config view --merge --flatten > \
~/.kube/merged_kubeconfig && mv ~/.kube/merged_kubeconfig ~/.kube/config
kubectl get pods --context=cluster-1
kubectl get pods --context=cluster-2
假设您遵循了合并kubeconfig文件之前的内容,并且在$HOME/.kube/config
中有一个合并的 kubeconfig 文件。现在,您想将群集的信息提取到可移植的 kubeconfig 文件中,该文件仅包含连接到该群集所需的部分。
运行:
KUBECONFIG=$HOME/.kube/config kubectl config view \
--minify --flatten --context=context-1 > $HOME/.kube/config-context-1
#
# using --kubeconfig flag
#
kubectl get pods --kubeconfig=$HOME/.kube/config-context-1
#
# or
# using `KUBECONFIG` environment variable
#
KUBECONFIG=$HOME/.kube/config-context-1 kubectl get pods
#
# or
# keep using kubeconfig file at $HOME/.kube/config (which has the merged context)
#
kubectl get pods --context=cluster-1
在此命令中,我们从context-1
到$HOME/.kube/config
文件中提取关于config-context-1
的数据。 --minify
标志允许我们仅提取有关该上下文的信息,而--flatten
标志允许我们保留未删除的凭据。
答案 3 :(得分:0)
如果要将两个配置文件合并到一个文件中
我找到了这种方式(不确定这是否最简单)
# Add the two config files to the env var
export KUBECONFIG=~/.kube/config:~/Desktop/configFile2.yaml
# Review that you have two configurations in one view
kubectl config view
# View the raw config and output to a new file
kubectl config view --raw > /tmp/config
然后将新的配置文件复制到所需的位置,也请不要忘记unset KUBECONFIG
env变量
答案 4 :(得分:0)
如果您发现这样做很多。.现在还有kubectl的'krew'插件包管理器。还有一个用于管理./kube/config文件的插件。
使用“ konfig”插件的语法为:
kubectl konfig import -s new.yaml
要安装团队,请执行以下操作:https://github.com/kubernetes-sigs/krew
答案 5 :(得分:0)
要在您的.bashrc中动态合并多个配置文件:
export KUBECONFIG=/Users/<user>/.kube/config:/Users/<user>/.kube/other.config
source <(kubectl completion bash)
获取新资源后,请验证:
kubectl config view
答案 6 :(得分:0)
如果您使用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”添加它。 请注意,群集名称等应与现有的配置条目不同!
答案 7 :(得分:0)
今后,我不建议使用 kubectl 合并 kubeconfig 文件。
相反,我建议使用一种工具来规避此类问题,例如递归搜索和显示 kubeconfig 文件的所有可用上下文并处理临时副本。
结帐 kubeswitch(我编写的用于处理 > 1000 个 kubeconfig 文件的工具)和 this section explaining how it works。
如果您正在寻找一种也可以进行命名空间切换和其他相关操作的工具,请查看“kubie”。
答案 8 :(得分:0)
正如@talarczykco 在顶部答案的评论中提到的,返回到同一个 ~/.kube/config
只会写入第二个文件,并且您将丢失原始内容!
这里有一个更安全的方法,先捕获完整的输出然后管道。
注意必须用 kubeconfig
将变量 "
括起来,否则会丢失所有换行符!
konfig=$(KUBECONFIG=~/.kube/config:new-config.yaml kubectl config view --flatten)
echo "$konfig" > ~/.kube/config