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


124

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

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

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

Ответы:


236

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

kubectl config use-context CONTEXT_NAME

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

kubectl config get-contexts

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


5
Как добавить его в контексты kubectl? Есть ли для этого команда come gcloud? Нашел: кластеры контейнеров $ gcloud get-credentials $ CLUSTER_NAME
Джастин Томас,

Вышеупомянутое не показало мне исходный контекст, но показало grep 'name:' ~/.kube/config. Это было minikubeтак, чтобы я мог вернуться к нему сkubectl config use-context minikube
Джордан Моррис

10

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

  • Список контекстов: kubectx
    • Эквивалентно kubectl config get-contexts
  • Переключить контекст (на foo): kubectx foo
    • Эквивалентно kubectl config use-context foo

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

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

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

Подробнее: https://ahmet.im/blog/kubectx/


6

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


Это больше похоже на комментарий, но не на ответ.
coderpc

Это отличный ответ (особенно в сочетании с gcloud container clusters get-credentials $CLUSTER_NAMEкомментарием Джастина Томаса к принятому ответу).
thebjorn 09

3

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

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

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

kubectl top nodes --context=context02name

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


2

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


1

Клонирование файлов 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, но усилия того стоят.


1

Канонический ответ переключения / чтения / управления различными средами кубернетов (также известными как контексты кубернетов), как упомянул Марк, следует использовать 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

1

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

Ajeet Singh Raina ) иллюстрирует это в статье «Предварительная версия Docker 19.03.0: быстрое переключение контекста, Docker без рута, поддержка Sysctl для служб Swarm »

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

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

Скажем, например, в моем конкретном случае у меня есть 4 разных кластера - смесь Swarm и Kubernetes, работающих локально и удаленно.
Предположим, что у меня есть кластер по умолчанию, работающий на моем настольном компьютере, кластер Swarm с 2 узлами, работающий на облачной платформе Google, кластер с 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 

0

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

Я был вдохновлен 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


0

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

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>

-1

да, я думаю, это то, о чем вы спрашиваете. Чтобы просмотреть текущую конфигурацию, используйте представление конфигурации 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/


Я не думаю, что пользователь спрашивает, как использовать несколько конфигураций для Kubectl. Вопрос в том, как использовать код
Вишал Бияни
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.