Как быстро переключать контексты Kubernetes с помощью Kubectx и Kubens
Kubectx и Kubens — это два инструмента, которые ускоряют процесс управления Kubernetes. Они устраняют некоторые недостатки Kubectl, делая переключение между средами кластера более быстрым и удобным.
Обе команды разработаны одним и тем же автором и объединены в один пакет. Kubectx изменяет активный контекст Kubernetes. Это комбинация URL-адреса сервера и учетных данных пользователя, определяющая кластер, к которому вы подключены. Kubens переключается между пространствами имен внутри этого кластера.
Почему они полезны?
Переключение между кластерами с помощью простого Kubectl может быть громоздким. Хотя инструмент поддерживает несколько методов переключения конфигурации, они не особенно быстры или интуитивно понятны для этого варианта использования.
Один из способов — создать отдельный файл конфигурации для каждого из ваших кластеров. Затем вы можете установить переменную среды KUBECONFIG
для переключения между ними:
$ KUBECONFIG=~/.kube/cluster-1.yml # Gets pods in cluster-1 $ kubectl get pods
Это требует, чтобы вы запомнили имя и путь к каждому из ваших файлов конфигурации. Это также не поможет вам определить пространства имен, поэтому вы должны использовать флаг Kubectl --namespace
, чтобы переопределить значение по умолчанию для каждой команды.
Kubectl также предлагает интегрированный опыт управления контекстом. Это позволяет определить несколько кластеров и учетные данные пользователей в одном файле конфигурации. Вы можете использовать команды kubectl
для переключения между ними.
apiVersion: v1 clusters: - cluster: name: demo-cluster insecure-skip-tls-verify: true server: https://127.0.0.1 users: - name: demo user: client-certificate: /path/to/cert client-key: /path/to/key contexts: - context: name: demo-cluster-ns-1 cluster: demo-cluster user: demo namespace: first-namespace - context: name: demo-cluster-ns-2 cluster: demo-cluster user: demo namespace: second-namespace
Этот файл конфигурации устанавливает два контекста. Оба они подключаются к одному и тому же кластеру, используя один набор учетных данных. Контексты настроены на использование разных пространств имен в кластере.
# Gets pods in first-namespace within demo-cluster
$ kubectl config use-context demo-cluster-ns-1
$ kubectl get pods
# Gets pods in second-namespace within demo-cluster
$ kubectl config use-context demo-cluster-ns-2
$ kubectl get pods
Это более упорядоченный опыт, но он все еще относительно многословен. Kubectx и Kubens абстрагируются от всей сложности, предоставляя вам простые короткие команды для быстрого переключения контекстов и пространств имен.
# Gets pods in first-namespace within demo-cluster
$ kubectx demo-cluster-ns-1
$ kubectl get pods
# Overrides the context's namespace to get pods in second-namespace
$ kubens second-namespace
$ kubectl get pods
Установка инструментов
Kubectx и Kubens распространяются в нескольких разных форматах. Вы можете загрузить простые предварительно скомпилированные двоичные файлы со страницы выпусков проекта GitHub, установить из репозиториев пакетов Apt, Pacman или Homebrew или использовать менеджер плагинов Kubectl, Krew. Мы сосредоточимся на Krew, так как это хороший способ работать со всеми вашими аксессуарами Kubectl.
Убедитесь, что у вас установлен Krew и вы можете использовать команду kubectl krew
. Вы можете добавить Krew в свою систему с помощью установочного скрипта на сайте проекта.
Затем используйте Krew для установки компонентов Kubectx и Kubens:
# Kubectx
$ kubectl krew install ctx
# Kubens
$ kubectl krew install ns
При желании вы можете включить поддержку завершения оболочки для Bash, Fish и Zsh, запустив соответствующие сценарии, представленные в файле README проекта.
Kubectl и Kubens также совместимы с fzf
для создания интерактивных меню с поддержкой нечеткого поиска. Эта интеграция включается автоматически, если вы указали fzf
в своем PATH
. Вы можете отключить его, установив для переменной среды KUBECTX_IGNORE_FZF
значение 1
.
Изменение контекста
Команда Kubectx используется для переключения между доступными контекстами Kubectl. В качестве единственного параметра он принимает имя целевого контекста. Контексты уже должны существовать в вашем активном файле конфигурации Kubectl. Используйте обычные команды kubectl config
для создания контекстов перед использованием команды.
# Switch to first-context
$ kubectx first-context
$ kubectl get pods
kubectx
— это оболочка вокруг контекста использования конфигурации kubectl
. Контекст будет использоваться всеми последующими командами Kubectl, пока вы не выберете другой с помощью kubectx
или kubectl
.
Kubectx принимает -
в качестве имени контекста, чтобы быстро вернуться к ранее выбранному контексту. Это соответствует поведению знакомых инструментов CLI, таких как cd
и git
, что упрощает одновременную работу с несколькими контекстами.
$ kubectx first
$ kubectx second
$ kubectx -
# Gets the pods in the first context
$ kubectl get pods
Kubectx также может создавать псевдонимы для ваших контекстов. Они позволяют ссылаться на описательные имена контекста, используя более удобный тег.
$ kubectx production=gce-web-app-production-2022
# Switches to gce-web-app-production-2022
$ kubectx production
$ kubectl get pods
Изменение пространств имен
kubens
переключается между пространствами имен. Это имеет тот же эффект, что и изменение пространства имен активного контекста. Команды Kubectl будут выполняться для указанного пространства имен внутри текущего выбранного контекста.
$ kubectx production
$ kubens api
# Gets pods in the "api" namespace of the "production" context
$ kubectl get pods
Аналогично kubectx
, вы можете использовать -
, чтобы вернуться в предыдущее пространство имен:
$ kubens -
Миграция на Kubectx и Kubens из KUBECONFIG
Контексты Kubectl, Kubectx и Kubens работают лучше всего, когда вы храните все свои контексты и кластеры в одном файле Kubeconfig. Обычно он находится по адресу ~/.kube/config
. Если вы ранее работали с несколькими файлами конфигурации, вы можете объединить их вместе с помощью Kubectl:
# Reference all your config files so Kubectl load them all
$ export KUBECONFIG=~/.kube/cluster-1:~/.kube/cluster-2:~/.kube/cluster-3
# Save a merged version of the current config to a new file
$ kubectl config view --flatten > ~/.kube/.config
Помещение ваших контекстов в один ~/.kube/config
делает их доступными для kubectx
и kubens
. Вы можете отказаться от использования KUBECONFIG
для манипулирования несколькими файлами вручную.
Когда вы добавляете новый кластер в свой парк, вы можете объединить его файл конфигурации с вашим существующим, используя вариант последовательности, показанной выше:
$ export KUBECONFIG=~/.kube/config:~/new-config-file
$ kubectl config view --flatten > ~/.kube/.config
Альтернативным более простым вариантом является файловый менеджер конфигурации konfig
, доступный в виде подключаемого модуля Kubectl через Krew. Это включает в себя команду import
, которая автоматически объединяет новый файл конфигурации с тем, который в настоящее время использует Kubectl:
$ kubectl krew install konfig
$ kubectl konfig import -s ~/new-config-file
Краткое содержание
Kubectx и Kubens — это две удобные утилиты, упрощающие работу с Kubectl. Хотя контексты Kubectl подходят для периодического использования, они все же кажутся неуклюжими, когда вы быстро переключаетесь между средами. Kubectx и Kubens помогают вам проверять несколько кластеров и пространств имен, не отвлекаясь на длинные команды терминала.
Привлекательность этих инструментов заключается в их простоте. Они также добавляют несколько уникальных возможностей поверх управления контекстом Kubernetes, таких как быстрый возврат с помощью -
и псевдонимы контекста для сокращения длинных имен.