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

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

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

Ответы (14)

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

kubectl config use-context CONTEXT_NAME

для перечисления всех контекстов:

kubectl config get-context

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

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

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

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

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

helm install --name dev-release --set \ wordpressUsername = dev_admin, \ wordpressPassword = dev_password, \ mariadb.mariadbRootPassword = dev_secretpassword \ стабильный / wordpress

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

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

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

$ 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 не упрощает управление различными контекстами кубернетов, как вы, наверное, уже знаете. Вместо того, чтобы использовать собственный скрипт для управления всем этим, лучше использовать зрелый инструмент под названием kubectx, созданный гуглером по имени «Ахмет Альп Балкан», который работает в команде разработчиков Kubernetes / Google Cloud Platform, которая строит такие инструменты. Очень рекомендую.

https://github.com/ahmetb/kubectx

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

  kubectx -h,--help         : show this message

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

Ajeet Singh Raina) иллюстрирует это в "Docker 19.03.0 Pre-Release: быстрое переключение контекста, Docker без рута, поддержка Sysctl для Swarm Services"

Context Switching

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

Скажем, например, в моем конкретном случае у меня есть 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
ИМЯ ОПИСАНИЕ DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default * Текущая конфигурация на основе DOCKER_HOST unix: ///var/run/docker.sock https://127.0.0.1: 16443 (по умолчанию) swarm
рой-контекст1

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

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

kubectl config get-contexts

Контексты переключения

kubectl config set current-context MY-CONTEXT

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

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

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

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

kubectl top nodes --context=context02name

Вы также можете сохранить имя контекста как env, например context01name = gke _ $ {GOOGLE_CLOUD_PROJECT} _us-central1-a_standard-cluster-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/

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

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

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

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

Для переключения контекста

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

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

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

Можно установить с здесь.

EDIT: теперь также включает поддержку GKE напрямую. Таким образом, вы можете использовать и обнаруживать файлы kubeconfig без необходимости вручную загружать и обновлять их.

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

enter image description here

You can find it here https://github.com/josefkorbel/kube-switch

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

Меня вдохновили уже упомянутые сценарии 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

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

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

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

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

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

More info: https://ahmet.im/blog/kubectx/

2022 WebDevInsider