Опубликовано 5 сен 2018Обновлено 9 окт 2025 12:07

Kubernetes: настройка kubectl для работы с несколькими кластерами

kubernetes
kubernetes
контейнеры
контейнеры
разработка
разработка
News Title Block Picture
Поделиться

Для большинства людей знакомство с Kubernetes заканчивается на установке единственного кластера с настройками kubectl по умолчанию. Но что делать, если управлять нужно несколькими кластерами? Сегодня я расскажу об использовании kubectl с различными контекстами.

В большинстве случаев нет однозначного ответа на вопрос «Как настроить kubectl для использования с несколькими кластерами?». В первую очередь это зависит от того, настроили ли вы кластер на использование сертификатов или нет. Далее я буду предполагать, что настроили, т.к. такая настройка кластера является наилучшей практикой.

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

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /path/to/ca.pem
    server: https://default-master.domain
  name: default-cluster
contexts:
- context:
    cluster: default-cluster
    user: default-admin
  name: default-system
current-context: default-system
kind: Config
preferences: {}
users:
- name: default-admin
  user:
    client-certificate: /path/to/admin.pem
    client-key: /path/to/admin-key.pem

Поэтому, как только у нас появляется второй кластера, например, для клиента образно называемый «customer-cluster», нам нужно добавить в кластер следующую запись:

- cluster:
    certificate-authority: /path/to/customer/ca.pem
    server: https://customer-master.domain
  name: customer-cluster

Эта настройка именует кластер и указывает kubectl на CA сертификат и URL-адрес его сервера API.

Затем контекст:

- context:
    cluster: customer-cluster
    user: customer-admin
  name: customer-cluster

Контекст связывает кластер и пользователя для доступа к кластеру. kubectl будет использовать этот контекст для доступ к нему. Наконец, секция пользователя для этого кластера:

- name: customer-admin
  user:
    client-certificate: /path/to/customer/admin.pem
    client-key: /path/to/customer/admin-key.pem

Здесь мы указываем путь к сертификату и ключу для этого пользователя. Таким образом, весь файл будет выглядеть следующим образом:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /path/to/ca.pem
    server: https://default-master.domain
  name: default-cluster
- cluster:
    certificate-authority: /path/to/customer/ca.pem
    server: https://customer-master.domain
  name: customer-cluster
contexts:
- context:
    cluster: default-cluster
    user: default-admin
  name: default-system
- context:
    cluster: customer-cluster
    user: customer-admin
  name: customer-cluster
current-context: default-system
kind: Config
preferences: {}
users:
- name: default-admin
  user:
    client-certificate: /path/to/admin.pem
    client-key: /path/to/admin-key.pem
- name: customer-admin
  user:
    client-certificate: /path/to/customer/admin.pem
    client-key: /path/to/customer/admin-key.pem

Теперь при использовании kubectl, вы можете использовать —context для указания того, какой кластер вам нужен. Вам не нужно использовать —contextпри использовании кластера по умолчанию.

Например, команда:

kubectl --context customer-cluster get nodes

Возвращает узлы в кластере клиента, авторизуясь на сервере API с помощью сертификата пользователя и ключа customer-admin. Вы можете установить контекст, используя команду:

kubectl config use-context customer-cluster

Теперь команда

kubectl get nodes

Покажет узлы кластера клиента, а не узлы предыдущего кластера по умолчанию. Чтобы вернуться обратно к настройкам по умолчанию, выполните команду:

kubectl config use-context default-system

Чтобы узнать, в каком контексте вы сейчас работаете, выполните команду:

kubectl config current-context

Не смотря на удобство использования контекста по умолчанию, я рекомендую всегда использовать явное указание контекста при помощи —context в ваших командах kubectl, т.к. очень легко забыть, в каком контексте вы находитесь, и если у вас несколько кластеров, случайно создать или что еще хуже удалить объекты в неправильном кластере.

Другие новости

Продолжая использовать сайт k2.cloud, Вы соглашаетесь на обработку персональных данных, собираемых с использованием файлов cookie, а также посредством метрических программ «Яндекс Метрика», «ВК Реклама». Более подробная информация – в политике обработки и использования cookie-файлов.