Как переключать кластеры kubectl между gcloud и minikube

У меня Kubernetes хорошо работает в двух разных средах, а именно в моей локальной среде (MacBook с minikube) и в Google Container Engine (GCE, Kubernetes в Google Cloud). Я использую MacBook / локальную среду для разработки и тестирования моих файлов YAML, а затем, по завершении, пробую их на GCE.

В настоящее время мне нужно работать с каждой средой индивидуально: мне нужно отредактировать файлы YAML в моей локальной среде и, когда все будет готово, (git) клонировать их в среду GCE, а затем использовать / развернуть их. Это несколько громоздкий процесс.

В идеале я хотел бы использовать kubectl со своего Macbook, чтобы легко переключаться между локальной средой minikube или GCE Kubernetes и легко определять, где используются файлы YAML. Есть ли простой способ для этого переключить контекст?


person Eric Broda    schedule 26.04.2017    source источник


Ответы (14)


Вы можете переключиться с локального (minikube) на gcloud и обратно с помощью:

kubectl config use-context CONTEXT_NAME

чтобы перечислить все контексты:

kubectl config get-contexts

Вы можете создавать разные среды для local и gcloud и помещать их в отдельные файлы yaml.

person Mark    schedule 27.04.2017
comment
Как добавить его в контексты kubectl? Есть ли для этого команда come gcloud? Нашел: кластеры контейнеров $ gcloud get-credentials $ CLUSTER_NAME - person Justin Thomas; 01.02.2018
comment
Вышеупомянутое не показало мне исходный контекст, но grep 'name:' ~/.kube/config показал. Это было minikube, поэтому я мог вернуться к нему с помощью kubectl config use-context minikube - person Jordan Morris; 16.06.2020
comment
Вы можете создать контекст с помощью minikube start --keep-context - person Aleksey Kanaev; 23.07.2021

Более быстрый ярлык для стандартных команд kubectl - использовать kubectx:

  • List contexts: kubectx
    • Equivalent to kubectl config get-contexts
  • Switch context (to foo): kubectx foo
    • Equivalent to kubectl config use-context foo

Для установки в macOS: brew install kubectx

Пакет kubectx также включает аналогичный инструмент для переключения пространств имен под названием kubens.

Эти два очень удобны, если вы регулярно работаете в нескольких контекстах и ​​пространствах имен.

Дополнительная информация: https://ahmet.im/blog/kubectx/

person Taylor Edmiston    schedule 02.02.2019

Если вы ищете решение на основе графического интерфейса для Mac и у вас установлен рабочий стол Docker, вы можете использовать значок панели меню Docker. Здесь вы можете найти меню «Kubernetes» со всеми контекстами, которые есть в вашем kubeconfig, и легко переключаться между ними.

person zCHIP    schedule 09.01.2019
comment
Это больше похоже на комментарий, но не на ответ. - person coderpc; 10.01.2019
comment
Это отличный ответ (особенно в сочетании с gcloud container clusters get-credentials $CLUSTER_NAME из комментария Джастина Томаса к принятому ответу). - person thebjorn; 09.07.2019

Последний ответ 2020 года здесь,

Простой способ переключаться между контекстом kubectl,

kubectl top nodes **--context=**context01name

kubectl top nodes --context=context02name

Вы также можете сохранить имя контекста как env, например context01name = gke _ $ {GOOGLE_CLOUD_PROJECT} _us-central1-a_standard-cluster-1

person Swam Guru    schedule 28.12.2019

TL; DR: Я создал графический интерфейс для переключения контекстов Kubernetes через AppleScript. Активирую через shift-cmd-x.

У меня тоже была такая же проблема. Командной строкой было нелегко переключать контексты. Я использовал FastScripts, чтобы установить комбинацию клавиш (shift-cmd-x) для запуска следующего AppleScript (помещенного в этот каталог: $ (HOME) / Library / Scripts / Applications / Terminal).

use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions

do shell script "/usr/local/bin/kubectl config current-context"
set curcontext to result

do shell script "/usr/local/bin/kubectl config get-contexts -o name"
set contexts to paragraphs of result

choose from list contexts with prompt "Select Context:" with title "K8s Context Selector" default items {curcontext}
set scriptArguments to item 1 of result

do shell script "/usr/local/bin/kubectl config use-context " & scriptArguments

display dialog "Switched to " & scriptArguments buttons {"ok"} default button 1
person cwingrav    schedule 12.01.2018

Мне надоело набирать это снова и снова, поэтому я написал простую утилиту bash для переключения контекстов.

введите здесь описание изображения

Вы можете найти его здесь, https://github.com/josefkorbel/kube-switch.

person Josef Korbel    schedule 28.02.2019

Чтобы получить весь контекст

C:\Users\arun>kubectl config get-contexts

Чтобы получить текущий контекст

C:\Users\arun>kubectl config current-context

Чтобы переключить контекст

C:\Users\arun>kubectl config use-context <any context name from above list>
person Arun    schedule 01.07.2020

Клонирование файлов YAML в репозиториях для разных сред определенно идеально. Что вам нужно сделать, так это создать шаблоны ваших файлов YAML, извлекая параметры, которые различаются от среды к среде.

Конечно, вы можете использовать какой-нибудь механизм шаблонов и разделить значения в YAML и создать YAML для конкретной среды. Но это легко сделать, если вы воспользуетесь Helm Charts. Чтобы ознакомиться с примерами диаграмм, перейдите в стабильный каталог в этом репозитории Github.

Если взять пример диаграммы Wordpress, у вас может быть два разных команды для двух сред:

Для разработчиков:

helm install --name dev-release --set \ wordpressUsername=dev_admin, \ wordpressPassword=dev_password, \ mariadb.mariadbRootPassword=dev_secretpassword \ stable/wordpress

Однако нет необходимости передавать эти значения в CLI, вы можете сохранить значения в файле с именем aptly values.yml, и у вас могут быть разные файлы для разных сред.

Вам потребуется некоторая работа по преобразованию в стандарты диаграмм Helm, но усилия того стоят.

person Vishal Biyani    schedule 27.04.2017

Канонический ответ переключения / чтения / управления различными средами кубернетов (также известными как контексты кубернетов), как упоминал Марк, заключается в использовании kubectl config, см. Ниже:

$ kubectl config                                                                                                                                                                                                                 
Modify kubeconfig files using subcommands like "kubectl config set current-context my-context"

Available Commands:
  current-context Displays the current-context
  delete-cluster  Delete the specified cluster from the kubeconfig
  delete-context  Delete the specified context from the kubeconfig
  get-clusters    Display clusters defined in the kubeconfig
  get-contexts    Describe one or many contexts
  rename-context  Renames a context from the kubeconfig file.
  set             Sets an individual value in a kubeconfig file
  set-cluster     Sets a cluster entry in kubeconfig
  set-context     Sets a context entry in kubeconfig
  set-credentials Sets a user entry in kubeconfig
  unset           Unsets an individual value in a kubeconfig file
  use-context     Sets the current-context in a kubeconfig file
  view            Display merged kubeconfig settings or a specified kubeconfig file

Usage:
  kubectl config SUBCOMMAND [options]

За сценой находится ~/.kube/config YAML-файл, в котором хранятся все доступные контексты с соответствующими учетными данными и конечными точками для каждого контекста.

Готовый Kubectl не позволяет легко управлять различными контекстами Kubernetes, как вы, наверное, уже знаете. Вместо того, чтобы использовать собственный скрипт для управления всем этим, лучше использовать зрелый инструмент под названием kubectx, созданный гуглером по имени «Ахмет Альп Балкан», который работает в команде разработчиков Kubernetes / Google Cloud Platform, которая создает подобные инструменты. Я очень рекомендую это.

https://github.com/ahmetb/kubectx

$ kctx --help                                                                                                                                                                                                                  
USAGE:
  kubectx                       : list the contexts
  kubectx <NAME>                : switch to context <NAME>
  kubectx -                     : switch to the previous context
  kubectx <NEW_NAME>=<NAME>     : rename context <NAME> to <NEW_NAME>
  kubectx <NEW_NAME>=.          : rename current-context to <NEW_NAME>
  kubectx -d <NAME> [<NAME...>] : delete context <NAME> ('.' for current-context)
                                  (this command won't delete the user/cluster entry
                                  that is used by the context)

  kubectx -h,--help         : show this message
person Devy    schedule 12.04.2019

Также проверьте последнюю (docker 19.03) команду docker context.

Аджит Сингх Райна) иллюстрирует это в "Предварительная версия Docker 19.03.0: быстрое переключение контекста, Docker без рута, поддержка Sysctl для Swarm Services "

Переключение контекста

Контекст - это, по сути, конфигурация, которую вы используете для доступа к определенному кластеру.

Скажем, например, в моем конкретном случае у меня есть 4 разных кластера - сочетание Swarm и Kubernetes, работающих локально и удаленно.
Предположим, что у меня есть кластер по умолчанию, работающий на моем настольном компьютере, 2-узловой кластер Swarm, работающий в Google Cloud Платформа, 5-узловой кластер, работающий на Play с игровой площадкой Docker, и одноузловой кластер Kubernetes, работающий на Minikube, к которому мне нужно регулярно получать доступ.

Используя интерфейс командной строки docker context, я могу легко переключиться с одного кластера (который может быть моим кластером разработки) для тестирования на производственный кластер за секунды.

$ sudo docker context --help
Usage:  docker context COMMAND
Manage contexts
Commands:
  create      Create a context
  export      Export a context to a tar or kubeconfig file
  import      Import a context from a tar file
  inspect     Display detailed information on one or more contexts
  ls          List contexts
  rm          Remove one or more contexts
  update      Update a context
  use         Set the current docker context
Run 'docker context COMMAND --help' for more information on a command.

Например:

[:)Captain'sBay=>sudo docker context ls
NAME                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                 ORCHESTRATOR
default *           Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://127.0.0.1:16443 (default)   swarm
swarm-context1 
person VonC    schedule 18.04.2019

Список контекстов

kubectl config get-contexts

Сменить контексты

kubectl config set current-contex MY-CONTEXT
person Sergey Onishchenko    schedule 01.01.2020

Если вы ищете простой способ переключения между разными контекстами, возможно, это поможет.

Меня вдохновили уже упомянутые сценарии kubectx и kswitch, которые я могу порекомендовать для большинства случаев использования. Они помогают с решением задачи переключения, но ломаются для меня на некоторых более крупных или менее стандартных конфигурациях ~/.kube/config. Итак, я создал оболочку вызова sys-exec и сокращенную версию kubectl.

Если вы вызовете k без параметров, вы увидите перехваченное приглашение на переключение контекста.

Switch kubectl to a different context/cluster/namespace.
Found following options to select from:
 >>> context: [1] franz
 >>> context: [2] gke_foo_us-central1-a_live-v1
 >>> context: [3] minikube
 --> new num [?/q]:

Кроме того, k продолжает действовать как короткое замыкание. Следующее эквивалентно:

kubectl get pods --all-namespaces
k get pods -A
k p -A
person Yauhen Yakimovich    schedule 09.09.2019

Я использую kubeswitch (отказ от ответственности: я написал инструмент), который можно использовать так же, как kubectx, но он разработан для большого количества файлов kubeconfig. Если вам нужно иметь дело с сотнями или тысячами файлов kubeconfig, этот инструмент может быть вам полезен, в противном случае kubectx или kubectl config use-context может быть достаточно.

Например, он добавляет такие возможности, как чтение из vault, горячая перезагрузка во время поиска и индекс для ускорения последующих поисков.

Вы можете установить его здесь.

person Daniel Föhr    schedule 09.01.2021

да, я думаю, это то, о чем вы спрашиваете. Чтобы просмотреть текущую конфигурацию, используйте представление конфигурации kubectl. kubectl загружает и объединяет конфигурацию из следующих мест (по порядку)

--kubeconfig=/path/to/.kube/config command line flag
KUBECONFIG=/path/to/.kube/config env variable
$HOME/.kube/config  - The DEFAULT

Я использую --kubeconfig, так как много переключаюсь между несколькими кластерами. это немного громоздко, но работает хорошо.

см. их для получения дополнительной информации. https://kubernetes.io/docs/tasks/administer-cluster/share-configuration/ и https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/

person JamStar    schedule 26.04.2017
comment
Я не думаю, что пользователь спрашивает, как использовать несколько конфигураций для Kubectl. Вопрос в том, как использовать код Yaml в нескольких средах. - person Vishal Biyani; 27.04.2017