Как вы можете использовать инструмент kubectl (с сохранением состояния / локальным способом) для одновременного управления несколькими кластерами из разных каталогов? - PullRequest
0 голосов
/ 05 ноября 2018

Есть ли способ запустить kubectl в «сеансе» так, чтобы он получал свой kubeconfig из локального каталога, а не из ~/.kubeconfig?

Пример использования

Учитывая абстрактный характер вопроса, стоит описать, почему это может быть полезным в качестве примера. Если у кого-то было приложение, назовите его «a», и у него было 4 кластера kubernetes, каждый из которых запускал a, у них может быть простой сценарий, который выполнял некоторые действия kubectl в каждом кластере, чтобы протестировать новое развертывание A, например. Они могут захотеть развернуть приложение и посмотреть, сколько его копий было автоматически масштабировано в каждом кластере впоследствии.

Пример решения

Как и в git, возможно, может быть «попытаться использовать локальный файл kubeconfig, если вы можете его найти» в качестве глобального параметра в стиле git:

kubectl global set-precedence local-kubectl

Затем в одном терминале:

cd firstcluster
cat << EOF > kubeconfig
firstcluster
...
EOF
kubectl get pods
p4

Затем в другом терминале:

cd secondcluster/
cat << EOF > kubeconfig
secondcluster
...
EOF
kubectl get pods
p1
p2
p3

Таким образом, те же самые команды kubectl (без необходимости устанавливать контекст) фактически работают с новыми кластерами в зависимости от каталога, в котором вы находитесь.

Некоторые идеи для решения

  • Одна идея, которая у меня была для этого, заключалась в том, чтобы написать плагин kubectl-context, который каким-то образом заставлял kubectl всегда проверять локальный kubeconfig, устанавливая контекст за кулисами, если это было возможно перед запуском, к контексту в глобальной конфигурации, который соответствует имени каталога.

  • Другая идея, которую я придерживался в этом отношении, заключается в создании разных пользователей, каждый из которых имел разные домашние файлы kubeconfig.

  • И, конечно, используя что-то вроде virtualenv, вы можете сделать что-то, где файлы kubeconfig имеют свое собственное значение.

Заключительная мысль

В конечном счете, я думаю, что цель здесь состоит в том, чтобы опровергнуть идею о том, что файл ~ / .kubeconfig имеет какое-то конкретное значение, и вместо этого посмотреть на способы использования многих файлов kubeconfig на одной машине, однако не только с помощью * Вариант 1040 *, а точнее так, чтобы состояние сохранялось в локальном порядке в каталоге.

1 Ответ

0 голосов
/ 06 ноября 2018

AFAIK, файл конфигурации находится под ~/.kube/config, а не ~/.kubeconfig. Я полагаю, что вы смотрите на мнение о своем ответе, поэтому вы дали мне отличную идею о создании kubevm, вдохновленном awsvm для AWS CLI , chefvm для управления несколькими серверами Chef и rvm для управления несколькими версиями Ruby.

Таким образом, в сущности, вы можете настроить kubevm, которая переключается между различными ~/.kube конфигами. Вы можете использовать CLI следующим образом:

# Use a specific config
kubevm use {YOUR_KUBE_CONFIG|default}
# or
kubevm YOUR_KUBE_CONFIG

# Set your default config
kubevm default YOUR_KUBE_CONFIG

# List your configurations, including current and default
kubevm list

# Create a new config
kubevm create YOUR_KUBE_CONFIG

# Delete a config
kubevm delete YOUR_KUBE_CONFIG

# Copy a config
kubevm copy SRC_CONFIG DEST_CONFIG

# Rename a config
kubevm rename OLD_CONFIG NEW_CONFIG

# Open a config directory in $EDITOR
kubevm edit YOUR_KUBE_CONFIG

# Update kubevm to the latest
kubevm update

Дайте мне знать, если это полезно!

...