Есть ли простая команда kubectl
, чтобы взять файл kubeconfig
(содержащий кластер + контекст + пользователь) и объединить его в файл ~/.kube/config в качестве дополнительного контекста?
Как объединить файл конфигурации kubectl с ~/.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