Подготовка
Развёртывание зеркала и проверки перед инсталляцией кластера.
Последовательность установки (закрытый контур)
Ниже — общая схема шагов от подготовки до запуска платформы. Подробности по каждому этапу — в разделах этой страницы и на странице Процесс установки.

В закрытом контуре установщик и узлы обращаются к зеркалу образов и пакетов, которое разворачивается до инсталляции кластера управления. Утилиты stm и shtil запускаются на Linux-хостах: stm — на хосте зеркала для загрузки бандла в зеркало, shtil — на машине администратора для запуска локального установочного кластера и развёртывания кластера управления. После подготовки лицензии Enterprise, бандла, зеркала, машины shtil и целевой инфраструктуры запустите install-gui, install-cli или установку по YAML с параметрами зеркала.
Подготовка окружения
Цель — чтобы к моменту запуска shtil были готовы лицензия, зеркало, бандл, сеть и права на машине и узлах.
- Лицензия — только Enterprise; нужна для развёртывания зеркала и для bootstrap при запуске
shtil. - Бандл — tar-архив с образами и пакетами для версии платформы. Передает менеджер со стороны Штурвала.
- Хост зеркала — хост с ОС Linux, на котором запускается stm. Требования к хосту — в разделе Требования к хосту зеркала.
- Машина shtil — рабочая станция или хост с одной из поддерживаемых ОС, Podman из состава бандла (если
shtilзапускается на этом же хосте) и доступом к зеркалу по HTTPS (порт по настройке зеркала, обычно 443). Не планируйте добавлять этот хост в кластер как узел. - Провайдер инфраструктуры — заранее прочитайте, как устроена работа с провайдерами в платформе: от выбранного провайдера зависит, нужно ли подготовить готовые хосты или шаблон ВМ.
- Целевая инфраструктура: либо уже подготовленные физические или виртуальные узлы Linux (сценарий провайдера Shturval v2), либо виртуализация (oVirt и подобные, VMware vSphere), из которой установщик создаст виртуальные машины под узлы кластера управления. Во всех случаях заранее определите количество узлов Control Plane и Worker и их ресурсы (см. требования).
- Балансировка KubeAPI и Ingress: заранее определите, используете ли вы внутренние балансировщики (свободные VIP на узлах) или внешние. Требования к подсети Control Plane и VIP при внутренних балансировщиках — в разделе Подсеть Control Plane и виртуальные IP (VIP). Требования к внешнему балансировщику — в разделе Внешний балансировщик нагрузки.
- Для Shturval v2 на каждый узел переносится SSH-ключ без passphrase, а пользователь для установки должен уметь выполнять
sudoбез ввода пароля.
Работа с зеркалом
Зеркало — это локальный репозиторий образов и пакетов платформы. Узлы кластера будут загружать дистрибутив с зеркала, т.к. доступа в интернет у них нет. Развернуть зеркало нужно до запуска инсталляции кластера; перед развёртыванием проверьте требования к ресурсам хоста зеркала.
Вы также можете использовать уже существующее зеркало — см. раздел Внешний Nexus.
Для работы с зеркалом используется утилита stm (Shturval Mirror). Она входит в состав бандла: после распаковки бандла вы запускаете команды stm на хосте зеркала. Зеркало можно развернуть от root или в режиме rootless (от непривилегированного пользователя) — см. раздел Rootless запуск зеркала. Ниже — пошаговая последовательность в зависимости от того, есть ли на этом хосте доступ в интернет.
Сценарий 1: Закрытый контур (на зеркале нет интернета)
На хосте зеркала нет доступа в интернет. Все образы и пакеты берутся только из бандла. Шаг 1. Перенос и распаковка бандла
Перенесите полученный от менеджера Штурвала tar-архив на хост зеркала (SCP, съёмный носитель и т.п.). Создайте каталог, распакуйте в него бандл:
mkdir newbundle && cd newbundle
tar -zxvf имя_бандла.tar.gz
cd ..
В результате появится каталог с содержимым бандла (в т.ч. утилита stm). Запомните путь к нему — например, ./newbundle/shturval-bundle.
Шаг 2. Инициализация зеркала и загрузка содержимого бандла
Одна команда создаёт конфигурацию зеркала (сертификаты, Nexus, Nginx) и загружает в него образы и пакеты из бандла:
stm bundle make --fqdn=FQDN-ЗЕРКАЛА --license=XXXX-XXXX-XXXX
Подставьте вместо FQDN-ЗЕРКАЛА адрес, по которому к зеркалу будут обращаться узлы и машина shtil (например, mirror.corp.local). Вместо XXXX-XXXX-XXXX — вашу Enterprise-лицензию. Команду выполните из каталога с распакованным бандлом или укажите путь к нему при необходимости.
После успешного выполнения зеркало запущено и готово к приёму запросов.
Альтернатива: инициализация и загрузка по отдельности
Если нужно сначала только создать конфигурацию зеркала, затем загрузить бандл:
# Только инициализация (конфигурация, сертификаты, запуск Nexus/Nginx)
stm init --fqdn=mirror.corp.local --license=XXXX-XXXX-XXXX
# Затем загрузка содержимого бандла
stm bundle load --path=./newbundle/shturval-bundle
Обновление зеркала (при выходе новых версий)
Если зеркало уже развёрнуто, перенесите и распакуйте бандл новой версии (шаг 1), выполните обновление утилиты stm, затем загрузите содержимое:
stm bundle load --path=./newbundle/shturval-bundle
Полная процедура — Работа с зеркалом после инсталляции.
Сценарий 2: Условно-закрытый контур (на зеркале есть интернет)
На хосте зеркала есть доступ в интернет. Можно один раз инициализировать зеркало и скачать образы и пакеты из репозитория Штурвала (без предварительного бандла).
Шаг 1. Инициализация зеркала и загрузка из репозитория
Одна команда создаёт зеркало и загружает указанную версию платформы из интернета:
stm make --fqdn=mirror.corp.local --license=XXXX-XXXX-XXXX --version=2.14.0
Шаг 2. Обновление зеркала (при выходе новых версий)
Если зеркало уже развёрнуто и нужно добавить новую версию, выполните обновление утилиты stm и затем загрузите релиз из репозитория r.shturval.tech.
Обновление утилиты stm
cp stm путь_к_зеркалу/ # заменить утилиту stm на версию из репозитория r.shturval.tech
cp -rp distr путь_к_зеркалу # обновить образы контейнеров (Nginx, rewrite-правила)
cd путь_к_зеркалу # перейти в каталог зеркала
./stm restart # перезапустить сервисы зеркала с новой stm и distr
stm download --version=2.14.0
Справочно: другие команды stm
| Команда | Назначение |
|---|---|
stm start |
Запуск зеркала |
stm stop |
Остановка зеркала (при необходимости — с флагом --force) |
stm restart |
Перезапуск зеркала |
stm status |
Проверка статуса зеркала и реестра |
stm uninstall |
Удаление зеркала |
stm bundle check |
Проверка целостности бандла |
stm bundle load --path=ПУТЬ |
Загрузка содержимого бандла (после выполнения stm init) |
Параметры инициализации (для stm init / stm bundle make / stm make): обязательные — --fqdn, --license; для загрузки из репозитория дополнительно --version. Опционально: --cert-file, --privkey-file (импорт своего сертификата), --https-port, --registry-port, --cri-socket.
Внешний Nexus
Если вы используете внешний Nexus (уже развёрнутый в инфраструктуре), образы и пакеты можно загрузить в него, а для доступа с узлов развернуть только Nginx с конфигурацией зеркала. Перед stm external load при обновлении выполните обновление утилиты stm.
Подготовка внешнего Nexus: создайте hosted-репозитории форматов raw, helm, docker (у docker-репозитория должен быть выделенный порт — коннектор). Для apt-дистрибутивов нужен hosted apt-репозиторий (в конфиге — deb_universal), для yum — hosted yum (rpm_universal). Имена репозиториев задаются в конфигурации.
Команды stm:
| Команда | Назначение |
|---|---|
stm external config |
Генерация примера конфигурации config/external-config.yaml |
stm external load --path=ПУТЬ |
Загрузка содержимого бандла во внешний Nexus |
stm external nginx --fqdn=FQDN [--cert-file=... --privkey-file=...] |
Развёртывание Nginx для проксирования запросов к внешнему Nexus |
Скопируйте сгенерированный пример в config/external-config.yaml, заполните соответствие имён репозиториев и параметры подключения к Nexus. Для условно-закрытого контура доступна загрузка из репозитория Штурвала: stm external sync.
Rootless запуск зеркала
Зеркало можно запускать от непривилегированного пользователя (rootless): контейнеры работают без root, что повышает безопасность. Режим проверен на Ubuntu 20, 22, 24, Astra Linux 1.7, 1.8, РЕД ОС 7 и 8, Alt Linux 10, Rosa Chrome, ОСнова, Sber Linux, Debian 11 и 12, OEL 8, RHEL 8 и 9, Rocky Linux 8 и 9. На других дистрибутивах может потребоваться дополнительная настройка.
Подготовка от root
-
Создайте пользователя и группу, от которых будет запускаться зеркало. Требование: у пользователя должна быть домашняя директория.
-
Назначьте диапазоны subuid и subgid, включите lingering:
usermod --add-subuids 100000-165535 $USER
usermod --add-subgids 100000-165535 $USER
loginctl enable-linger $USER
-
Убедитесь, что установлены утилиты newuidmap и newgidmap (как правило, входят в пакет
uidmap). -
Проверьте параметр ядра
kernel.unprivileged_userns_clone: выполнитеsysctl kernel.unprivileged_userns_clone. Если значение 0 — установите в 1 (добавьте в/etc/sysctl.confи выполнитеsysctl -p). Если ошибка «No such file or directory» — на поддерживаемых дистрибутивах можно игнорировать. -
Порты 80 и 443 по умолчанию недоступны непривилегированному пользователю. Варианты:
- при инициализации зеркала укажите порты выше 1024:
--http-port=1080 --https-port=1443(или другие свободные); - либо задайте
net.ipv4.ip_unprivileged_port_start=80(в/etc/sysctl.conf, затемsysctl -p), чтобы разрешить привязку к 80 и 443.
- при инициализации зеркала укажите порты выше 1024:
-
Если используется firewalld (Sber Linux, OEL, RHEL, Rocky) — откройте порты:
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
(Если зеркало слушает не 80/443, укажите свои порты.)
-
Загрузите и распакуйте бандл в каталог, доступный этому пользователю.
-
От root выполните инициализацию с указанием UID и GID пользователя и при необходимости портов:
./stm init --fqdn=mirror.corp.local --license=XXXX-XXXX-XXXX --uid=1001 --gid=1001 --http-port=1080 --https-port=1443
Подставьте свои --uid и --gid (id пользователя и группы). После инициализации зеркало будет остановлено, владелец файлов сменится на указанные uid:gid.
Запуск и работа от пользователя
- Переключитесь на созданного пользователя и запустите зеркало:
stm start
- Загрузите содержимое из бандла или из репозитория. При обновлении уже развёрнутого зеркала сначала выполните обновление утилиты stm:
# из бандла
stm bundle load --path=./newbundle/shturval-bundle
# из r.shturval.tech (условно-закрытый контур)
stm download --version=2.14.0
- Дальнейшее управление зеркалом (остановка, запуск, перезапуск) выполняйте от этого же пользователя:
stm stop,stm start,stm restart.
Особенности на отдельных дистрибутивах
Alt Linux: утилиты newuidmap и newgidmap могут быть недоступны пользователю. Выполните от root:
chmod 751 /usr/bin/newuidmap /usr/bin/newgidmap
chmod u-s /usr/bin/newuidmap /usr/bin/newgidmap
setcap cap_setuid+eip /usr/bin/newuidmap
setcap cap_setgid+eip /usr/bin/newgidmap
Если iptables недоступен пользователю — добавьте /sbin/ в PATH или создайте симлинки, например в /bin: ln -s /sbin/xtables-legacy-multi /bin/iptables, аналогично для ip6tables.
ОСнова: пакет с newuidmap/newgidmap может отсутствовать; возможна установка пакета uidmap из совместимого дистрибутива (например, Ubuntu 20). В /etc/sysctl.conf добавьте user.max_user_namespaces = 15000 и выполните sysctl -p.
Сертификат от ACME (Step-CA, certbot)
Модуль зеркала не интегрирован с ACME-сервером. Сертификат от Step-CA или другого ACME-провайдера можно получить с помощью certbot, затем скопировать в каталог зеркала.
- Остановите зеркало (чтобы освободить порты 80/443):
stm stopилиdocker stop shturval_proxy. - Запросите сертификат (подставьте свои FQDN, адрес ACME-сервера, email и при необходимости
REQUESTS_CA_BUNDLEдля корневого сертификата CA):
REQUESTS_CA_BUNDLE=/path/to/root_ca.crt certbot certonly -d mirror.corp.local \
--server https://acme-server.example.local/directory --standalone --agree-tos -m admin@example.local
- Скопируйте сертификаты в каталог зеркала (путь к зеркалу и FQDN замените на свои):
cp /etc/letsencrypt/live/FQDN_ЗЕРКАЛА/fullchain.pem ПУТЬ_ДО_ЗЕРКАЛА/config/certs/dst.pem
cp /etc/letsencrypt/live/FQDN_ЗЕРКАЛА/fullchain.pem ПУТЬ_ДО_ЗЕРКАЛА/config/certs/fullchain.pem
cp /etc/letsencrypt/live/FQDN_ЗЕРКАЛА/privkey.pem ПУТЬ_ДО_ЗЕРКАЛА/config/certs/privkey.pem
- Запустите зеркало:
stm start. - Настройте обновление сертификата по расписанию (cron или systemd timer): перед продлением остановите Nginx/зеркало, выполните
certbot renew, скопируйте новые файлы вconfig/certs/, снова запустите зеркало.
Работа с сертификатами
Сертификат можно импортировать при инициализации (--cert-file, --privkey-file) или отдельной командой:
stm cert import --cert-file=export/mirror_cert.pem --privkey-file=export/privkey.pem
Требования к сертификату: PEM, цепочка CA + сертификат, subjectAltName с FQDN зеркала (совпадает с --fqdn).
Генерация CSR:
stm cert csr --fqdn=mirror.corp.local
CSR и ключ сохраняются в каталог export/.
Проверка успешного развёртывания зеркала
Выполните раздел Команды для проверки ниже: DNS зеркала, HTTPS к зеркалу, stm status на хосте зеркала.
Когда зеркало готово
Машина shtil (рабочее место администратора)
Машина shtil — рабочая станция или jump-хост с ОС Linux, с которого вызывается утилита shtil.
На машине должно быть выполнено:
- Доступен Podman из состава бандла; исполняемый файл находится в
PATH. В случае запуска shtil на том же хосте, где инициализировано зеркало, не устанавливайте вручную Podman/Docker. Если используете Docker и у зеркала самоподписной или корпоративный CA, доверие к зеркалу настроено на уровне демона Docker до запускаshtil; флага--bootstrap-insecureдля первичногоdocker pullнедостаточно. - Есть сетевой доступ к FQDN зеркала по HTTPS (порт по настройке зеркала, обычно 443).
- Для сценария с графическим интерфейсом (
install-gui) нужны права, достаточные для работы с каталогом/tmp, как правило при запуске от root или через sudo.
Требования к минимальным свободным ресурсам машины shtil при установке с GUI (`install-gui`)
| Параметр | CPU (vCPU) | Memory (GiB) | Disk (GiB) |
|---|---|---|---|
Машина, с которой запускается install-gui |
3 | 3 | 20 |
После запуска install-gui выполняется проверка свободных ресурсов.
Исполняемый файл shtil входит в состав бандла. После распаковки бандла скопируйте утилиту на машину shtil и сделайте файл исполняемым:
chmod +x ./shtil
Версия shtil должна соответствовать версии бандла.
Подготовка машины shtil к rootless Podman
Если shtil запускается не от root и bootstrap поднимается через rootless Podman (не Docker), на хосте выполните настройки ниже. При запуске от root/sudo или при использовании Docker раздел можно пропустить.
User namespaces
Для rootless Podman должно быть включено разрешение на создание непривилегированных user namespaces — параметр ядра kernel.unprivileged_userns_clone.
sysctl kernel.unprivileged_userns_clone
Если значение 0, установите 1: добавьте в /etc/sysctl.conf строку kernel.unprivileged_userns_clone = 1 и выполните:
sudo sysctl -p
Если команда возвращает ошибку cannot stat /proc/sys/kernel/unprivileged_userns_clone: No such file or directory, параметр настраивать не нужно.
Делегирование cgroup
На части дистрибутивов, где systemd ниже 252 (например, Debian 11, РЕД ОС 7.3, Astra Linux 1.7, RHEL/Rocky 8, Ubuntu 20.04) без делегирования контейнер bootstrap-кластера падает с ошибкой UserNS: cpu controller needs to be delegated. См. kind rootless. Делегирование можно выполнить скриптом (см. ниже). Он создаёт /etc/systemd/system/user@.service.d/delegate.conf с Delegate=cpu cpuset io memory pids и выполняет systemctl daemon-reload.
После выполнения скрипта потребуется полный выход из SSH/сессии и повторный вход. Если bootstrap по-прежнему падает — перезагрузка хоста (как в выводе скрипта).
chmod +x ./scripts/setup-systemd-user-cgroup-delegate.sh
sudo ./scripts/setup-systemd-user-cgroup-delegate.sh
Скрипт setup-systemd-user-cgroup-delegate.sh
#!/usr/bin/env bash
# Настраивает делегирование cgroup-контроллеров для user@.service (systemd user session).
# Нужно для rootless Podman и локального bootstrap-кластера (kind-подобный node-image):
# без делегирования cpu контейнер падает с "UserNS: cpu controller needs to be delegated".
# См. https://kind.sigs.k8s.io/docs/user/rootless/
#
# Запуск: sudo ./scripts/setup-systemd-user-cgroup-delegate.sh
# После выполнения — полный выход из сессии пользователя и вход снова или reboot.
set -euo pipefail
DROP_IN_DIR="/etc/systemd/system/user@.service.d"
DROP_IN_FILE="${DROP_IN_DIR}/delegate.conf"
if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then
echo "Запустите от root: sudo $0" >&2
exit 1
fi
mkdir -p "$DROP_IN_DIR"
tee "$DROP_IN_FILE" <<'EOF'
[Service]
Delegate=cpu cpuset io memory pids
EOF
systemctl daemon-reload
echo "Готово: $DROP_IN_FILE"
echo "Выполните полный выход из SSH/сессии и вход снова или: sudo reboot"
Команды для проверки перед началом инсталляции
Ниже — типовые проверки перед запуском shtil. Подставляйте FQDN-ЗЕРКАЛА и адреса VIP из вашей схемы (см. требования).
DNS: имя зеркала резолвится (машина shtil и при необходимости узел)
getent hosts FQDN-ЗЕРКАЛА
Критерий успеха: в выводе есть IP-адрес зеркала.
Если записей нет: настройте корпоративный DNS или локальный резолвер; без резолва узлы и shtil не смогут обратиться к зеркалу по HTTPS. Для временной диагностики можно проверить локальный /etc/hosts, но постоянное решение должно соответствовать политике вашей инфраструктуры.
HTTPS к зеркалу (машина shtil или узел)
curl -I --connect-timeout 10 https://FQDN-ЗЕРКАЛА
Критерий успеха: в ответе HTTP/1.1 200 или HTTP/2 200 (или иной успешный код от вашего Nginx/зеркала).
Если ответа нет или есть ошибка — действуйте по шагам:
- Проверьте подробный вывод: он покажет, где обрыв — DNS, TCP, TLS или ответ сервера.
curl -vI --connect-timeout 10 https://FQDN-ЗЕРКАЛА
- Проверьте, что порт зеркала доступен с машины shtil и с узлов кластера. Если зеркало слушает не 443, укажите фактический порт:
curl -vI --connect-timeout 10 https://FQDN-ЗЕРКАЛА:ПОРТ
- При ошибке TLS с самоподписным сертификатом для диагностики допустимо:
curl -vkI --connect-timeout 10 https://FQDN-ЗЕРКАЛА
Для рабочей установки согласуйте доверие к CA или используйте флаги --bootstrap-insecure / --bootstrap-registry-certs-dir при запуске shtil (см. процесс установки).
Настройка доверия Docker к зеркалу
Флаги --bootstrap-insecure и --bootstrap-registry-certs-dir влияют на containerd внутри bootstrap-кластера (через hosts.toml или монтирование CA). Эти флаги не настраивают доверие локального Docker daemon.
Первичную TLS-проверку при docker pull выполняет сам демон Docker до запуска bootstrap-кластера. При зеркале с самоподписным или иным недоверенным сертификатом одного --bootstrap-insecure недостаточно: до запуска установки настройте доверие к зеркалу одним из способов.
sudo mkdir -p /etc/docker/certs.d/FQDN-ЗЕРКАЛА
sudo cp /path/to/ca.crt /etc/docker/certs.d/FQDN-ЗЕРКАЛА/ca.crt
Если зеркало работает не на стандартном порту, используйте каталог с портом: /etc/docker/certs.d/FQDN-ЗЕРКАЛА:ПОРТ/ca.crt. Перезапуск Docker при добавлении CA в /etc/docker/certs.d/ не требуется: Docker читает этот каталог на лету.
- Откройте файл
/etc/docker/daemon.jsonи пропишите
{
"insecure-registries": ["FQDN-ЗЕРКАЛА"]
}
- Перезапустите Docker:
sudo systemctl restart docker
Если доверие к зеркалу для Docker не настроено, установщик заранее выводит предупреждение, а при неудачном docker pull — ошибку с конкретным путём /etc/docker/certs.d/<registry-host:port>/ca.crt для вашего зеркала.
Если проверка неуспешна после диагностики: до запуска установки устраните DNS, маршрутизацию, firewall или настройки сертификата зеркала.
Хост зеркала: stm status
stm status
Критерий успеха: компоненты зеркала в рабочем состоянии (см. вывод команды).
Если stm не найден: выполните команду из каталога с распакованным бандлом или добавьте путь к stm в PATH.
Если компоненты остановлены: запустите зеркало и повторите проверку:
stm start
stm status
Если статус всё ещё не рабочий, проверьте свободность портов Nginx, сертификат и параметры инициализации зеркала.
Проверка, что виртуальные IP-адреса свободны
На каждом IP-адресе из подсети Control Plane, который будет использоваться как VIP KubeAPI или Ingress и ещё не назначен интерфейсу узла, выполните проверку:
ping -c 2 IP
Замените IP на реальный адрес (например, ping -c 2 10.11.12.100).
Критерий успеха: узлы в подсети не отвечают на ping по выбранному VIP (адрес свободен под kube-vip).
Если узел отвечает: выбранный IP уже используется — выберите другой свободный IP из подсети Control Plane и повторите проверку. Если ICMP в сети запрещён, согласуйте с сетевым администратором другой способ проверки свободности адреса.
Узел: SELinux (если дистрибутив с SELinux)
getenforce
Если команда getenforce недоступна: на дистрибутиве без SELinux этот подраздел не применяйте.
Варианты вывода:
- enforcing — политика применяется (для согласованного сценария нужен переход в
permissiveилиdisabled, либо отдельная политика по согласованию с ИБ). - permissive — предупреждения без блокировок (подходит при согласовании с ИБ).
- disabled — политика не загружена (подходит при согласовании с ИБ).
Если режим enforcing и требуется отключить SELinux до установки (после согласования с ИБ):
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
После этого выполните перезагрузку:
sudo reboot
Узел: время и NTP
timedatectl status
При установленном Chrony:
chronyc tracking
Критерий успеха: время синхронизировано; расхождение с машиной shtil не существенно для вашей политики (большой разбег — риск для сертификатов и etcd).
Если команда chronyc недоступна: используйте в первую очередь timedatectl и сравнение date; при необходимости настройте или установите Chrony по документации вашей ОС.
Если время не синхронизировано: настройте NTP или Chrony на узлах, машине shtil и хосте зеркала, затем повторите проверку.
Узел: репозитории пакетов
Debian / Ubuntu:
sudo apt update
RHEL и совместимые (если есть dnf):
sudo dnf repolist
Если dnf нет:
sudo yum repolist
Критерий успеха: нет ошибок из-за полностью недоступных репозиториев.
Если проверка неуспешна: отключите недоступные репозитории ОС или настройте доступные источники пакетов в закрытом контуре по политике вашей организации. Повторите команду. Пока обновление индекса пакетов срывается из-за недоступных репозиториев, установка может прерваться на шагах с пакетами ОС.
Работа с провайдерами
Перед установкой выберите провайдера инфраструктуры и подготовьте его по соответствующему сценарию. Общую схему — экземпляры провайдеров, пулы IP и шаблоны ВМ — см. на странице Как устроена работа с провайдерами в платформе.
oVirt и подобные провайдеры
Если выбран oVirt, zVirt, HostVM, РЕД Виртуализация или ROSA Virtualization, подготовьте среду виртуализации до запуска инсталляции: учётную запись с нужными правами, Datacenter, Cluster, сеть с профилем VNIC и DHCP. Подробности — на странице oVirt и подобные провайдеры.
Для узлов кластера управления заранее создайте шаблон виртуальной машины. При использовании зеркала укажите в stc template тот же registry, который будет использоваться при развёртывании платформы.
VMware vSphere
Если выбран VMware vSphere, подготовьте vCenter: учётную запись с сервисными ролями, Datacenter, Resource Pool, Network, Datastore и путь для хранения ВМ. Подробности — на странице VMware vSphere.
Для узлов кластера управления заранее создайте шаблон виртуальной машины. Убедитесь, что шаблон подключён к сети, из которой будущие ВМ получат адреса по DHCP, и подготовлен с параметрами registry закрытого контура.
Провайдер Shturval v2
В случае выбора этого провайдера поднимите физические или виртуальные хосты до начала инсталляции. Требования к ресурсам и ОС на странице с требованиями, а порядок добавления хостов — на странице Shturval v2.
Локально сгенерируйте ключ без passphrase и скопируйте его на каждый узел:
ssh-keygen -t ed25519 -f ./shturval -N ""
ssh-copy-id -i ./shturval.pub shturval@10.11.12.1
Повторите ssh-copy-id для каждого IP-адреса узла (подставьте свой пользователь и адреса). SSH-ключ должен быть без passphrase. Пользователь (например, shturval) должен иметь sudo без пароля на всех целевых узлах.
ssh -i /path/to/private_key USER@NODE
ssh -i /path/to/private_key USER@NODE 'sudo -n true'
Критерий успеха: вход по ключу без запроса пароля ключа; второй вызов завершается с кодом 0.
Если вход по SSH неуспешен: проверьте IP или FQDN узла, пользователя, путь к приватному ключу, права на файл ключа и что публичный ключ скопирован на узел. Убедитесь, что служба sshd на узле принимает подключения и не блокируется межсетевым экраном.
Если sudo -n true завершается ошибкой: настройте выполнение sudo без запроса пароля для пользователя установки, например через sudoers по правилам вашей организации.
Чек-лист перед установкой
- Хост зеркала — подготовлен (SELinux disabled/permissive, порты 80 и 443 свободны; Podman вручную не установлен, если
shtilзапускается на этом же хосте) - Бандл — получен от менеджера Штурвала (tar-архив с образами и пакетами)
- Лицензия Enterprise — получена по договору
- Машина shtil — есть доступ к зеркалу по HTTPS; если используется Docker и у зеркала недоверенный сертификат, доверие настроено на уровне Docker daemon
- Rootless Podman: при запуске shtil не от root — подготовка хоста (user namespaces и делегирование cgroup)
- Работа с провайдерами — прочитано, как устроены провайдеры в платформе.
- Провайдер Shturval v2 — если выбран этот провайдер, созданы физические или виртуальные хосты будущего кластера, настроены SSH-ключ без passphrase и
sudoбез пароля (см. Shturval v2). - Провайдер oVirt и подобные или VMware vSphere — если выбран один из этих провайдеров, подготовлена виртуализация и создан шаблон ВМ провайдера; подробности: oVirt и подобные, VMware vSphere.
- NTP — время синхронизировано на всех узлах и хосте зеркала
- VIP или внешние балансировщики — подготовлены по выбранному сценарию для KubeAPI и Ingress
- Доступ к зеркалу — с машины shtil и с каждого узла кластера по порту 443 (см. раздел Команды для проверки: DNS и HTTPS)