Как переключить кластеры 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/