☸️ Как упростить управление Kubernetes с помощью контекстов Kubectl

by itisgood

Контексты Kubectl – это механизм для быстрого переключения между различными кластерами, пользователями и пространствами имен в CLI.

Они облегчают перемещение между несколькими окружениями без изменения активного конфигурационного файла Kubectl.

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

Убедитесь, что у вас установлен Kubectl, прежде чем продолжить.

Что такое контекст?

Контексты содержат набор параметров, которые позволяют успешно подключиться к кластеру Kubernetes.

Контекст может включать URL-адрес кластера, набор учетных данных пользователя и пространство имен, используемое по умолчанию.

В отсутствие контекстов уникальные среды Kubernetes часто обрабатываются путем создания отдельного конфигурационного файла для каждой из них.

Затем вы используете флаг —kubeconfig или переменную окружения KUBECONFIG для загрузки нужного файла при каждом использовании Kubectl:

$ export KUBECONFIG=.kube/cluster-1-user-1.yaml
$ kubectl get pods

Контексты позволяют сжать детали всех окружений в один файл конфигурации.

Вы можете использовать стандартный .kube/config для каждого из ваших кластеров, избавляясь от флагов CLI и переменных окружения.

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

Подготовка к работе с контекстами

Управление контекстами осуществляется с помощью группы команд kubectl config.

Как и все остальное в Kubectl, список доступных контекстов будет загружен из активного конфигурационного файла и сохранен в нем.

Он определяется командами KUBECONFIG, –kubeconfig или стандартным .kube/config.

Чтобы начать использовать контексты, вам нужно добавить несколько кластеров и учетные данные в ваш конфигурационный файл.

Для их настройки можно использовать другие команды kubectl config:

# Создайте два кластерных соединения, qa и prod
$ kubectl set-cluster qa --server=https://192.168.0.1 --insecure-skip-tls-verify
$ kubectl set-cluster prod --server=https://192.168.0.2 --insecure-skip-tls-verify

# Создайте две пары учетных данных
$ kubectl set-credentials qa-user --username=demo --password=demoP@ss_qa
$ kubectl set-credentials prod-user --username=demo password=demoP@ss_prod
Теперь ваш конфигурационный файл содержит данные подключения для двух отдельных кластеров Kubernetes.
Он также содержит две пары учетных данных.
Далее мы создадим контекст, чтобы связать кластеры с соответствующими учетными данными.
Затем вы сможете использовать команду Kubectl для перехода между средами QA и production.

Создание контекста

Команда kubectl config set-context добавляет новые контексты в ваш конфигурационный файл.
Вы должны указать имя контекста.
Используйте флаги команды для ссылки на ранее добавленный кластер и учетную запись пользователя.
# Создайте контексты для кластеров, добавленных ранее
$ kubectl config set-context qa-context --cluster=qa --user=qa-user
$ kubectl config set-context prod-context --cluster=prod --user=prod-user
В этот момент вы можете запустить команду kubectl config view, чтобы просмотреть все изменения, которые были внесены в ваш конфигурационный файл:
apiVersion: v1
kind: Config
current-context: ""
clusters:
  - cluster:
    name: qa
      server: https://192.168.0.1
      insecure-skip-tls-verify: true
  - cluster:
    name: prod
      server: https://192.168.0.2
      insecure-skip-tls-verify: true
contexts:
  - context:
    name: qa-context
      cluster: qa
      user: qa-user
  - context:
    name: prod-context
      cluster: prod
      user: prod-user
users:
  - name: qa-user
    user:
      username: demo
      password: demoP@ss_qa
  - name: prod-user
    user:
      username: demo
      password: demoP@ss_prod

Определения контекста указывают на другие виды объектов, определенные в других местах конфигурационного файла.

Выбор и использование контекстов

Контексты выбираются с помощью команды kubectl context use-context:

$ kubectl context use-context qa-context

Имя активного контекста хранится как значение поля current-context в вашем конфигурационном файле Kubectl.

Все команды Kubectl будут нацелены на кластер, на который ссылается выбранный контекст.

# Подключается к кластеру https://192.168.0.1 как demo:demoP@ss_qa
$ kubectl get pods

# Переключение активного контекста
$ kubectl config use-context prod-context

# Подключается к кластеру  https://192.168.0.2 как demo:demoP@ss_prod
$ kubectl get pods

Возможность быстро изменить целевую среду в Kubectl помогает вам перемещаться между кластерами, не перегружаясь флагами конфигурации.

Поскольку выбранный контекст сохраняется до тех пор, пока не будет выбран другой, перед выполнением деструктивных команд следует убедиться, что Kubectl нацелен именно на то окружение, которое вы ожидаете.

Используйте команду current-context, чтобы узнать имя выбранного контекста:

$ kubectl config current-context
prod-context

Вы можете просмотреть все контексты в текущем загруженном конфигурационном файле с помощью get-contexts:

$ kubectl config get-contexts
CURRENT   NAME          CLUSTER   AUTHINFO  NAMESPACE
          qa-context    qa        qa-user
*         prod-context  prod      prod-user

Включение информации о пространстве имен с помощью контекстов

До сих пор мы использовали контексты для выбора кластера и учетной записи пользователя.

Контексты также могут включать информацию о пространстве имен.

Когда контекст имеет назначенное пространство имен, команды Kubectl будут автоматически включать флаг –namespace.

Вы все еще можете использовать –namespace вручную, чтобы отменить пространство имен, заданное контекстом.

$ kubectl config set-context production-api --cluster=prod --user=prod-user --namespace api

$ kubectl config use-context production-api

# Получаем поды пространстве имен "api" в кластере "prod"
$ kubectl get pods

Количество контекстов не ограничено.

Кластеры могут появляться в нескольких контекстах, что позволяет определить отдельные контексты для каждого из важных пространств имен.

Это позволяет избежать повторения флага –namespace при проверке различных ресурсов в кластере.

Переименование и удаление контекстов

Переименуйте контексты с помощью команды rename-context:

$ kubectl config rename-context qa-context testing-context

Чтобы удалить контекст, передайте его имя команде delete-context:

$ kubectl config delete-context testing-context

Кластер, пользователь и пространство имен, на которые ссылается контекст, изменяются путем повторения команды set-context с тем же именем контекста.

Вы также можете внести изменения, вручную отредактировав конфигурационный файл Kubectl.

Как сделать переключение контекста еще проще

Встроенного управления контекстом Kubectl может быть достаточно, если вы переключаете кластеры относительно редко.

Однако, если вы постоянно меняете кластеры в течение дня, относительно многословная команда use-context может начать казаться повторяющейся.

Kubectx – это плагин Kubectl, который может сделать переключение контекста еще проще. Он сокращает use-context и добавляет несколько дополнительных удобных функций:

# Эквивалентно "kubectl config use-context prod-context".
$ kubectx prod-context

В зависимости от вашего рабочего процесса, вы можете захотеть сохранить использование нескольких конфигурационных файлов Kubectl.

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

см. также:

 

You may also like

Leave a Comment