Поиск по сайту:

Как быстро переключать контексты 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, таких как быстрый возврат с помощью - и псевдонимы контекста для сокращения длинных имен.




Все права защищены. © Linux-Console.net • 2019-2024