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

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

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

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

Ответ 1

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

kubectl config use-context CONTEXT_NAME

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

kubectl config get-contexts

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

Ответ 2

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

Ответ 3

Более быстрый ярлык для стандартных команд 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/

Ответ 4

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

Ответ 5

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

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

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

Для Dev:

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

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

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

Ответ 6

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

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

Context Switching

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

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

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

$ 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 

Ответ 7

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

enter image description here

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

Ответ 8

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

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

Kubectl с полки не позволяет легко управлять различными контекстами kubernetes, как вы, вероятно, уже знаете. Вместо того чтобы использовать собственный сценарий для управления всем этим, лучше использовать зрелый инструмент kubectx, созданный Googler с именем "Ahmet Alp Balkan", который работает в команде разработчиков 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

Ответ 9

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

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

Ответ 10

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