Контексты 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
Создание контекста
# Создайте контексты для кластеров, добавленных ранее $ kubectl config set-context qa-context --cluster=qa --user=qa-user $ kubectl config set-context prod-context --cluster=prod --user=prod-user
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.
Вы можете использовать алиасы оболочки и переменные окружения по умолчанию для настройки индивидуального рабочего процесса, который автоматически выбирает файл конфигурации и контекст для каждого нового окна терминала.
см. также:
- ☸️ Почему Kubernetes называют K8s?
- ☸️ k0s, k3s и microk8s Сравнение дистрибутивов Kubernetes
- ☸️ Получение событий Kubernetes по дате с помощью kubectl
- ☸️ Как показать все образа в кластере Kubernetes ?
- ☸️ Как установить плагины kubectl в Kubernetes с помощью Krew
- ☸️ Принудительное удаление зависших подов в Kubernetes