Как объединить файл конфигурации kubectl с ~/.kube/config?

Есть ли простая команда kubectl, чтобы взять файл kubeconfig (содержащий кластер + контекст + пользователь) и объединить его в файл ~/.kube/config в качестве дополнительного контекста?

Ответ 1

Сделай это:

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

Затем вы можете передать это в новый файл, если это необходимо.

Ответ 2

Если вы обнаружите, что делаете это много... Теперь есть также менеджер пакетов плагинов 'krew' для kubectl. И есть плагин для управления вашим. /kube/config файлом.

Используя плагин 'konfig', синтаксис будет:

kubectl konfig import -s new.yaml

Чтобы установить krew: https://github.com/kubernetes-sigs/krew

Ответ 3

Использование нескольких 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

Поскольку файлы 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

Допустим, вы следовали ранее слиянию файлов 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

В этой команде мы извлекаем данные о context-1 из файла $HOME/.kube/config в файл config-context-1. Флаг --minify позволяет нам извлекать только информацию об этом контексте, а флаг --flatten позволяет нам сохранять учетные данные неотредактированными.

ссылка на статью: https://ahmet.im/blog/mastering-kubeconfig/

Ответ 4

Если вы хотите объединить два файла конфигурации в один

Я нашел этот путь (не уверен, что это самый простой)

# 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