Shturval v2

Управление хостами по SSH.

Назначение

Shturval v2 — внутренний провайдер платформы «Штурвал». Он поддерживает добавление физических серверов и виртуальных машин в качестве хостов для дальнейшего использования в кластерах, а также позволяет создавать гибридные кластеры.

Провайдер не требует создания разных шаблонов для разных версий Kubernetes. При обновлении кластера, платформа “Штурвал” автоматически обновляет версию Kubernetes на узлах кластеров с провайдером Shturval v2.

Требования к хостам

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

Создание экземпляра провайдера

На вкладке Платформа в карточке Провайдеры инфраструктуры нажмите Управлять. Откроется страница Конфигурация провайдеров. В блоке Сервисы провайдеров проверьте, включён ли Провайдер Shturval v2. Если сервис отключён, нажмите на переключатель и дождитесь запуска. Затем нажмите Добавить экземпляр провайдера → «+ Shturval v2».

Скриншот: вкладка «Платформа» — переход в конфигурацию провайдеров

Вкладка Платформа: карточка Провайдеры инфраструктуры и ссылка Управлять

Переключатель сервиса переводит связанные SSC провайдера в режим auto: сначала CRD-чарт, затем основной чарт провайдера. Дождитесь, пока сервис перейдёт в состояние готовности.

Сервисы провайдеров

Форма конфигурации провайдера Shturval v2

Конфигурация провайдера Shturval v2

Поля конфигурации

ПолеОбязательностьОписание
Имя провайдераДаУникальное имя для идентификации экземпляра в платформе.
Пул IP-адресовНетВыберите пул для назначения адресов API-серверу и VIP Ingress при создании кластера.
Имя пользователяДаВ блоке Общие учетные данные для хостов. Имя пользователя для подключения к хостам по SSH.
Пароль пользователяНетПароль пользователя SSH для команд sudo на узлах. Если поле пустое, sudo выполняется без пароля. То же поле есть при создании кластера управления. Из консоли — флаг --ssh-user-password или поле credentials.SSH.sshUserPassword, см. Пароль SSH-пользователя для sudo.
ВерсияНетВерсия хостов для подготовки утилитой stc. По умолчанию соответствует версии платформы. Укажите версию, с которой планируете развернуть клиентский кластер. Создание клиентского кластера с версией 2.14.0 недоступно.
Приватный ключ пользователяДаЗагрузите файл с приватным ключом или введите ключ текстом.

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

Учётные данные сохраняются в Secret кластера управления в неймспейсе shturval-capsm. Имя Secret формируется из имени экземпляра провайдера с суффиксом capsm-v2-provider-secret. Пример Secret приведён на странице Провайдер Shturval v2 (shturval-capsm).

Версия, с которой хосты готовятся утилитой stc, задаётся в ресурсе ShturvalProvider. Если планируете поднимать клиентский кластер более ранней версии, укажите её при подготовке нового экземпляра провайдера Shturval v2 или отдельно для хостов при добавлении в уже созданный экземпляр провайдера.

В ресурсе ShturvalProvider в поле spec.releaseVersion задается версия всех хостов. Для конкретного хоста версия указывается в spec.hosts[].releaseVersion. Если поле пустое, берётся spec.releaseVersion экземпляра провайдера. Значение копируется в ресурс ShturvalHost этого хоста, поле spec.releaseVersion. Пример:

spec:
  releaseVersion: "2.15.0"
  hosts:
    - address: 10.11.12.13
      releaseVersion: "2.14.1"

Пока хост свободен, версию можно изменить:

  • Если изменить версию экземпляра провайдера, она запишется в ShturvalHost тех свободных хостов, у которых своя версия не задана.
  • Если изменить версию конкретного хоста (spec.hosts[].releaseVersion), обновится только этот хост. Если такой хост уже подготовлен утилитой stc, после изменении версии подготовка запускается заново.

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

Добавление хостов

В блоке Хосты нажмите +. Справа откроется блок Добавление хостов.

Добавление хоста

Добавление хоста в Shturval v2

Поле хостаОбязательностьОписание
IP-адрес или FQDN хостаДаIP или доменное имя хоста. Можно указать несколько адресов.
РольДаРоль хоста. Можно выбрать рекомендуемую роль (controlplane, workers, infra, ingress, other) или ввести новое значение. Роль добавляется как лейбл хоста, например, role:other.
ВерсияНетВерсия, с которой хост будет подготовлен утилитой stc. Например, 2.14.1. По умолчанию используется версия провайдера.
ЛейблыНетЛейблы для селектора при создании кластера. Лейблы с сетевым интерфейсом, именем хоста, ОС и её версией, именем экземпляра провайдера, CPU, Memory и Disk создаются автоматически.
Использовать общие учётные данные—По умолчанию выбрано «Да». Выберите «Нет», если для хоста нужны свои учётные данные SSH: имя пользователя, пароль и приватный ключ.

Вы можете использовать роли, доступные по умолчанию или создать кастомные роли для хостов. Для создания и назначения роли при добавлении хоста в провайдер в поле “Роль” введите имя вашей кастомной роли и в выпадающем блоке нажмите “Создать имя создаваемой роли”.

Частные учётные данные для хоста

Частные учётные данные SSH

При создании кластера или масштабировании группы узлов роли и лейблы позволяют выбрать нужные хосты. Если у группы узлов не задана роль хоста или селектор лейблов, к ней могут присоединяться любые доступные хосты.

Добавленные хосты отображаются в списке: IP-адрес, имя хоста, роль и статус. Роль в строке можно изменить, если хост ещё не присоединён к кластеру.

После добавления провайдер готовит каждый хост к включению в кластер. По SSH он проверяет доступ и права sudo, разворачивает компоненты узла, проверяет, свободен ли хост, и уникальность /etc/machine-id. Хост можно использовать для кластера только когда эти проверки пройдены и он готов к привязке ShturvalMachine: status.readyformachine: true.

Хост со статусом Свободен может ещё проходить подготовку. Если хост не готов, проверьте его conditions и при необходимости устраните указанную причину.

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

В зависимости от результата обработки провайдером хост может иметь один из статусов:

СтатусОписание
ЗанятХост привязан к кластеру и недоступен для привязки или изменения.
СвободенХост готов к присоединению к кластеру.
ОшибкаУ хоста невалидная конфигурация, например, недостаточно CPU или памяти; провайдер не может подключиться к хосту с указанными пользователем и приватным ключом; пользователь не имеет достаточных прав для выполнения команд по SSH.
Не созданПровайдер не получил ответ от машины. Возможные причины: нет доступа к сети, в которой находится IP-адрес хоста, или адрес невалиден.
Не определёнРеконсиляция хоста не завершена. После её завершения статус изменится на один из перечисленных выше.

Чтобы посмотреть подробную информацию о хосте, нажмите на строку с ним. Откроется окно Параметры хоста: IP-адрес, роль, версия, состояние, лейблы, общие учётные данные и сведения об узле.

Скриншот: состояния хоста

Параметры хоста

Если хост не занят, можно удалить его или изменить параметры:

  • роль;
  • версию;
  • учётные данные подключения;
  • лейблы хоста.

Если хост находится в состоянии MachineAttached и привязан к кластеру, можно изменить только учётные данные для подключения. Остальные параметры недоступны для редактирования.

Скриншот: хост, привязанный к кластеру

Хост в состоянии MachineAttached

После создания хоста провайдером в интерфейсе отображаются:

  • IP-адрес хоста;
  • состояние;
  • сведения об операционной системе: тип и образ ОС;
  • версия ядра;
  • архитектура;
  • сетевой интерфейс;
  • root volume size;
  • имя хоста;
  • перечень портов;
  • сведения о доступных вычислительных ресурсах.

Эти данные получаются провайдером непосредственно с хоста и не редактируются в интерфейсе. Они присваиваются хосту в виде лейблов для выбора в селекторе при добавлении хостов в кластер.

Если нужно изменить имя пользователя в учётных данных, укажите также приватный ключ пользователя. Иначе изменения не будут применены.

Удаление хостов

Можно удалить один хост или несколько хостов одновременно.

Для удаления одного хоста используйте один из способов:

  • в списке хостов наведите курсор на строку с хостом, установите флажок Выбрать для удаления и нажмите значок удаления в блоке Хосты;
  • откройте хост и в блоке Параметры хоста нажмите Удалить.

Чтобы удалить несколько хостов, установите флажки Выбрать для удаления в строках нужных хостов и нажмите значок удаления в блоке Хосты.

Удаление хостов

Удаление хостов Shturval v2

Хосты, привязанные к кластеру, удалить нельзя.

Как добавить пароль для команд sudo

В провайдере Shturval v2 команды на хостах могут выполняться через sudo с паролем. Пароль хранится в Secret в неймспейсе shturval-capsm кластера управления.

При создании кластера управления в мастере установки пароль задаётся в блоке Общие учетные данные для хостов, поле Пароль пользователя. Для отдельного хоста — в Параметры хоста, если не выбрано Использовать общие учетные данные.

Из консоли (./shtil install-cli shturvalv2, синоним install) тот же пароль можно задать сразу. Параметр необязательный: если его нет, sudo выполняется без пароля.

  • флаг --ssh-user-password;
  • в YAML конфигурации провайдера, блок credentials.SSH — sshUserPassword;
  • для отдельного хоста, если не используются общие учётные данные, — hosts[].credentials.SSH.sshUserPassword.

Флаг и поля описаны в процессе установки в открытом контуре и в закрытом контуре.

Если пароль нужен уже после создания экземпляра провайдера, укажите его в GUI или добавьте в Secret:

  • в блоке Общие учётные данные для хостов укажите пароль в Пароль пользователя — применяется к хостам с общими учётными данными;
  • в блоке Добавление хостов и в окне Параметры хоста укажите пароль в Пароль пользователя, если не использовать общие учётные данные для конкретного хоста.

Если пароль нужен, а в учётных данных его нет, в состоянии StcDeployment появится сообщение о необходимости задать пароль. Чтобы добавить пароль для выполнения команд sudo:

  1. Перейдите в кластер управления - неймспейс shturval-capsm - раздел Хранилище - Secrets.
  2. Найдите Secret c именем <имя-экземпляра провайдера>-capsm-v2-provider-secret и добавьте ключ sshPassword, в значении которого укажите пароль SSH-пользователя и сохраните изменения.

Пример Secret:

apiVersion: v1
kind: Secret
metadata:
  name: <имя-экземпляра-провайдера>-capsm-v2-provider-secret
  namespace: shturval-capsm
type: Opaque
data:
  sshKey: dXNlcnNzaGtleQ==
  sshUser: c2h0dXJ2YWw=
  sshPassword: LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KdXNlcnNzaGtleQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0=
Скриншот: Secret

&lt;имя-экземпляра провайдера&gt;-capsm-v2-provider-secret

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