一行kubectl命令将配置文件与〜/ .kube/config合并?

Cha*_*had 24 kubernetes

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

jax*_*orm 47

做这个:

KUBECONFIG=~/.kube/config:~/someotherconfig 
kubectl config view --flatten
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据需要将其传输到新文件.

  • 使用管道`KUBECONFIG =〜/ .kube / this-config:〜/ .kube / other-config kubectl config view --flatten>〜/ .kube / config` (6认同)
  • 建议:合并前检查设置中是否存在名称冲突。例如,如果您的 users.name 在配置文件中恰好相同,kubectl 将选择第一个。因此,某些集群的身份验证将失败。 (6认同)
  • 该管道对于全新的kubeconfigs是安全的,但请确保*不*将以前存在的`〜/ .kube/config`和新的`other-config`的内容合并回`〜/ .kube/config`; 重定向将在读取之前截断目标,并且您将只看到`other-config`的输出. (5认同)
  • 或者您可以使用 `moreutils` 中的 `sponge`:`KUBECONFIG=~/.kube/this-config:~/.kube/other-config kubectl config view --flatten | 海绵 > ~/.kube/config` (5认同)

Exe*_*ero 26

kubeconfigs一次使用多个

有时您有一堆小的kubeconfig文件(例如每个集群一个),但您想一次使用它们,使用像kubectlkubectx这样的工具一次处理多个上下文。

为此,您需要一个“合并”的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
Run Code Online (Sandbox Code Playgroud)

合并 kubeconfig 文件

由于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
Run Code Online (Sandbox Code Playgroud)

从 kubeconfig 文件中提取上下文

比方说,你跟着前合并kubeconfig文件,并有合并kubeconfig文件$HOME/.kube/config。现在您想将集群的信息提取到一个可移植的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
Run Code Online (Sandbox Code Playgroud)

在这个命令中,我们context-1$HOME/.kube/configtoconfig-context-1文件中提取数据。该--minify标志允许我们仅提取有关该上下文的信息,并且该--flatten标志允许我们保持凭据未编辑。

参考文章: https : //ahmet.im/blog/mastering-kubeconfig/


Edd*_*dez 8

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

我找到了这种方式(不确定这是否最简单)

# 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
Run Code Online (Sandbox Code Playgroud)

然后将新的配置文件复制到您想要的位置,也不要忘记到unset KUBECONFIGenv 变量


dhr*_*r_p 7

如果您发现这样做很多。.现在还有kubectl的'krew'插件包管理器。还有一个用于管理./kube/config文件的插件。

使用“ konfig”插件的语法为:

kubectl konfig import -s new.yaml

要安装krew:https : //github.com/kubernetes-sigs/krew

  • Krew 在 Windows 上不可用 (2认同)

小智 6

有可能,请按照以下步骤操作:

从您的配置文件创建备份: 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