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

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


Контексты 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:

# Create two cluster connections, qa and 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

# Create two credential pairs
$ kubectl set-credentials qa-user --username=demo --password=demoP@ss_qa
$ kubectl set-credentials prod-user --username=demo password=demoP@ss_prod

Теперь ваш конфигурационный файл содержит сведения о подключении для двух отдельных кластеров Kubernetes. Он также содержит две пары учетных данных. Далее мы создадим контекст, чтобы связать кластеры с их соответствующими учетными данными. После этого вы сможете использовать команду Kubectl для перехода между средами контроля качества и производственной средой.

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

Команда kubectl config set-context добавляет новые контексты в ваш файл конфигурации. Вы должны указать имя для вашего контекста. Используйте флаги команды для ссылки на ранее добавленный кластер и учетную запись пользователя.

# Create contexts for the clusters added earlier
$ 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 будут нацелены на кластер, на который ссылается выбранный контекст.

# Connects to the https://192.168.0.1 cluster as demo:demoP@ss_qa
$ kubectl get pods

# Switch the active context
$ kubectl config use-context prod-context

# Connects to the https://192.168.0.2 cluster as 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

# Gets Pods in the "api" namespace within the "prod" cluster
$ 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 и добавляет несколько дополнительных удобных функций:

# Equivalent to "kubectl config use-context prod-context"
$ kubectx prod-context

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

Краткое содержание

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

Вы можете настроить контексты с помощью kubectl config set-context или вручную отредактировав файл .kube/config. Kubectl также включает команды для управления соединениями с именованными кластерами и учетными записями пользователей, на которые вы можете ссылаться в своем контексте.




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