Закрытый контур

Закрытый контур - в процессе инсталляции нет интернета на всех узлах и зеркале. Для инсталляции необходим дистрибутив и лицензия платформы Штурвал. Ссылку на скачивание версии stc, бандл, а также номер лицензии передает заказчику менеджер со стороны Штурвала.

Обратите внимание! Запуск STC необходимо выполнять на рабочей машине (не на хосте кластера) с ОС Linux.

Также есть возможность скачать stc нужной версии по ссылке ниже. Для этого запустите команду:

wget URL -O stc

Где вместо URL подставьте соответствующую необходимой версии ссылку:

Обратите внимание! Версия stc должна совпадать с версией бандла!

В версии Штурвала 2.7.0 появилось 2 варианта зеркала. Рекомендуется использование нового зеркала. В случае, если с его развертыванием возникли трудности, разверните старое зеркало.

Работа с бандлом (новое зеркало)

Команды для самостоятельной подготовки бандла:

Команда Описание команды Параметр Описание параметра
bundle make инициализация зеркала и загрузка пакетов и образов из бандла. Совмещает команды init и bundle load, а также их опции (обязательные опции --fqdn, --license)
bundle load загрузить содержимое бандла в зеркало (зеркало должно быть инициализировано) --path путь до каталога с бандлом. По умолчанию shturval-bundle
bundle download Подготовка архива с бандлом (инициализировать зеркало не нужно) --version Версия платформы для загрузки. Можно указать несколько версий через запятую. (Обязательно)
--license Лицензия (обязательно)
--shturval-repo Адрес репозитория Штурвал - по умолчанию r.shturval.tech
--public-repo Адрес публичного репозитория Штурвал - по умолчанию public.shjturval.tech
--shturval-repo-user Пользователь репозитория Штурвал по умолчанию user. Скрытая опция.
bundle check проверить целостность бандла --path путь до каталога с бандлом. По умолчанию shturval-bundle

Примеры работы с зеркалом в закрытом окружении

Пример развертывания зеркала из бандла:

stm bundle make --license=XXXXXXXXXXXXX --fqdn=mirror.ip-XX-XX-XXX-XX.shturval.link

Пример загрузки новых версий из бандла в ранее развернутое зеркало:

stm bundle load

Пример подготовки бандла для инсталяции платформы в закрытом окружении:

stm bundle download --license=XXXXXXXXXXXXX --version=2.6.1

Работа с сертификатами

Требование к сертификату

  1. Для импорта необходимо указать файл с цепочкой сертификатов и ключом.
  2. Сертификаты и ключ должны быть в pem формате.
  3. Цепочка сертификатов должна содержать CA и сам сертификат.
  4. Сертификат должен содержать поле subjectAltName с fqdn зеркала (fqdn должен совпадать с указанным параметром --fqdn или со значением в конфигурации зеркала)
  5. При подписании CSR необходимо сохранить Extensions (для openssl - ключ -copy_extensions copyall).

Команды для работы с сертификатами

Команда Описание команды Параметр Описание параметра
cert import Импорт сертификата (приведет к перезапуску зеркала) --cert-file Файл сертификата для импорта
--privkey-file Файл ключа для импорта
cert csr Сформировать запрос на получение сертификата --fqdn Адрес, на который будет сгенерирован запрос

Примеры команд

Пример генерации csr, выпуска сертификата:

# Выпустить запрос на получение сертификата (csr и ключ будут находиться в каталоге export)
stm cert csr --fqdn=mirror.corpdomain.ru
# Выпустить сертификат, используя CSR и свой CA (пример для openssl)
openssl x509 -req -sha512  -in export/csr.pem -days 3650 -CA ca/ca_cert.pem \
-CAkey ca/ca_private_key.pem -CAcreateserial -out export/mirror_cert.pem -copy_extensions copyall
# Добавить к полученному сертификату свой CA
cat ca/ca_cert.pem >> export/mirror_cert.pem

Пример импорта сертификата:

# Если зеркало ещё не инициализировано
stm make --fqdn=mirror.corpdomain.ru --license=XXXXXXXXXX --version=2.8.0 \
--cert-file export/mirror_cert.pem --privkey-file export/privkey.pem
# Если зеркало уже инициализировано (приведет к перезапуску зеркала)
stm cert import --cert-file export/mirror_cert.pem --privkey-file export/privkey.pem

Загрузка образов во внешний Nexus

Команда Описание команды Параметр Описание параметра
external config генерация примера конфигурации
external sync загрузка пакетов и образов из репозитория Штурвал во внешний Nexus
external load загрузить содержимое бандла во внешний Nexus --path путь до каталога с бандлом. По умолчанию shturval-bundle
external nginx развертывание Nginx для проксирования запросов во внешний Nexus --fqdn Адрес, по которому будет доступно зеркало (обязательно). На это имя будут сгенерированы сертификаты
--http-port Порт http. будет занят на хосте. - 80 по умолчанию
--https-port Порт https. будет занят на хосте - 443 по умолчанию
--cert-file Файл сертификата для импорта
--privkey-file Файл ключа для импорта

Подготовка внешнего Nexus

На Nexus необходимо создать требуемые hosted репозитории:

  • Репозитории, обязательные для всех инсталляций - форматы raw, helm, docker
    • Docker репозиторий должен иметь коннектор (выделенный порт)
  • Для apt дистрибутивов обязателен hosted apt репозиторий, названный в конфиге “deb_universal”
    • Для apt репозиториев distribution должен быть main
    • Для apt репозиториев должна быть сгенерирована пара gpg ключей. Приватный ключ должен быть использован при создании репозитория, публичный должен быть загружен в корень raw репозитория под именем shturval.gpg
  • Для yum дистрибутивов обязателен hosted yum репозиторий, названый в конфиге “rpm_universal”
    • Для yum репозитория Repodata Depth должна быть установлена в 0
  • Также необходим yum или apt репозиторий для дистрибутива
  • Например, для дистрибутива redos нужен helm, raw, docker и 2 yum репозитория, для дистрибутива astra - helm, raw, docker и 2 apt репозитория.

Имена репозиториев могут быть любыми. Соответствие имён будет установлено в файле конфигурации.

На хосте, имеющем доступ, сгенерировать пример конфигурации:

stm external config

Полученный файл config/external-config-example.yaml нужно скопировать как config/external-config.yaml и заполнить в соответствии со своими данными. Соответствие имён репозиториев заполняется как “ключ”: “значение”, где в значении указываются имена созданных репозиториев (ключи менять не следует). Например, если для raw репозитория был создан репозиторий с именем “raw_repo”, в конфигурации запись должна выглядеть так : bin_public: “raw_repo”.

Запуск синхронизации из бандла

stm external load

После загрузки будет сгенерирован пример конфигурации Nginx. Его можно использовать для создания собственной конфигурации, для поднятия Nginx на нужном хосте. Модуль развертывания зеркала может развернуть собственный Nginx с требуемой конфигурацией (хост должен соответствовать общим требованиям модуля):

stm external nginx --fqdn=mirror.example.ru

Порядок подготовки развертывания старого зеркала

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

Последовательно запустите на выполнение следующие скрипты:

  • ./check_runtime.sh для проверки наличия Docker/Podman и установки связи между ними. Если компонент не найден, устанавливает Podman;

  • ./gen_certs.sh для генерации сертификата репозитория. Скрипт в интерактивном режиме запрашивает имя сертификата. Если найдены старые сертификаты, предлагает удалить их;

  • ./run_repos.sh для запуска репозитория.

Обратите внимание! Если вы выписываете собственный сертификат зеркала (не предлагаемым скриптом), убедитесь, что в нем присутствует параметр subjectAltName. При отсутствии этого параметра containerd не спулит образы.

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

docker ps -a | grep sht_offline_installer   

Если контейнер не в состоянии Running, удалите его с помощью команды:

docker rm -f sht_offline_installer

Запустите контейнер с помощью скрипта:

./run_repos.sh

По умолчанию репозиторий начинает работать с порта 443. Его можно поменять с помощью параметра --port (./run_repos.sh --port 8443)

Обновление зеркала

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

Запустите скрипт update_bundle.sh с параметром --mirror_path - полный путь для каталога с установленным зеркалом.

Например: ./update_bundle.sh --mirror_path /opt/shturval

Установка кластера управления

Параметры команды

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

Параметр Описание
-h, --help Справка о команде

Пример:

./stc install management --help

Глобальные:

Наименование параметра Описание
--debug Выводить в лог всю информацию об ошибках (по умолчанию false)
--dry-run Проверка конфигурации. Установка службы shturvald на узлы будущего кластера. (по умолчанию false)
--force Удалять без подтверждения
--quiet Выключить stdout. Только код выхода
--ssh-private-key string Путь к файлу приватного ключа SSH
--ssh-user string Имя пользователя для подключения по SSH
--workdir string Рабочая директория кластера (для файлов конфигурации, логов и пр.)

Параметры инсталляции:

Параметр Описание
--api-endpoint [string] Адрес API управления кластером
--cluster-name [string] Имя кластера
--ha-type [string] Тип доступности кластера: single (одноузловой) или ha (высокодоступный)
--ingress [string] Wildcard DNS-запись для ingress в формате apps.corporate.domain
--ingress-vip [string] VIP адрес для ingress контроллера
--interactive Признак интерактивного режима. Значение по умолчанию – false
--license [string] Лицензионный ключ для загрузки пакетов
--monitoring-endpoint [string] Адрес кластера мониторинга для отправки системных метрик
--ntp-servers [string] Список серверов синхронизации времени (через запятую)
--registry [string] Адрес реестра образов и репозиториев пакетов. Значение по умолчанию – r.shturval.tech
--secure Признак установки дополнительных параметров безопасности. Значение по умолчанию – false
--timezone [string] Часовой пояс. Значение по умолчанию – Europe/Moscow
--skip-check Пропустить проверку хостов перед инсталляцией (по умолчанию false)
--use-external-ingress-lb Использовать внешний балансировщик для Ingress контроллера (по умолчанию false)
--use-external-kubeapi-lb Использовать внешний балансировщик кластерного IP (по умолчанию false)
--ca-cert Путь до промежуточного сертификата (“pem” файла), который может быть использован в дальнейшем для подписания других сертификатов
--ca-key Путь до закрытого ключа промежуточного сертификата CA
--ingress-cert Путь до корпоративного сертификата(“pem” файла), который был выпущен CA(в этом случае в файле будет цепочка сертификатов) или самоподписан для доменного имени Ingress
--ingress-key Путь до закрытого ключа корпоративного сертификата Ingress
--pod-subnet Подсеть подов
-service-subnet Подсеть сервисов

Обратите внимание! Диапазон подсетей может быть изменен в соответствии с вашими потребностями. Подсети подов и сервисов располагаются в общем overlay network кластера. Подсеть подов и сервисов разворачивается только внутри кластера и не пересекается с другими кластерами и вашей корпоративной сетью. Фактически, даже если подсеть подов/сервисов совпадает с вашей корпоративной, то доступа у подов к сервисам вне кластера не будет.

При использовании корпоративного зеркала корневой сертификат зеркала должен быть прописан в доверенные на все ВМ и шаблоны.

Генерация ключевой пары

Для пользователя, под которым платформа будет устанавливаться (—ssh-user) необходимо передать открытую часть ключа командой ssh-copy-id на хосты будущей платформы

Сгенерировать ключ можно с помощью команды:

# генерируем ключевую пару
ssh-keygen -t ed25519 -f shturval
# копируем открытую часть на машину
ssh-copy-id -i shturval.pub ssh-user@IP

Режимы инсталляции

Интерактивный режим инсталляции

Запустите инсталляцию с помощью команды:

./stc install management --interactive

Введите данные в соответствии с подсказками, которые отобразятся на экране.

Пример процесса инсталляции в интерактивном режиме для высокодоступного кластера с тремя Master-узлами и двумя Worker-узлами:

Введите название кластера: test-cluster
Введите имя пользователя для доступа к узлам кластера:
%имя_пользователя%
Use the arrow keys to navigate: ↓ ↑ → ←
? Выберите ssh-ключ для подключения к узлам кластера
пользователя %имя_пользователя%:
  ▸ id_rsa
    указать другой путь к файлу
Use the arrow keys to navigate: ↓ ↑ → ←
? Выберите конфигурацию кластера:
    Одноузловой
  ▸ Высокодоступный
Введите адрес для узла master номер 1: master1
Введите адрес для узла master номер 2: master2
Введите адрес для узла master номер 3: master3

Введите адрес API кластера: xx.xxx.x.xxx
(указывается только для высокодоступной конфигурации)
Введите количество рабочих узлов кластера: x
Введите адрес для узла worker номер 1: xxx-xx
Use the arrow keys to navigate: ↓ ↑ → ←
? Использовать внешний балансировщик для Ingress контроллера:
  ▸ Да
    Нет
Введите VIP адрес для Ingress контроллера: xx.xxx.x.xxx
Use the arrow keys to navigate: ↓ ↑ → ←
? Автоматически сгенерировать DNS имя для Ingress контроллера:
  ▸ Да
    Нет
Введите виртуальный IP (VIP) для ingress: xx.xxx.x.xxx

В процессе инсталляции будет отображаться следующая информация:

Выполняется подготовка узлов для установки кластера.
Это может занять несколько минут.
Инициализация подсистемы управления кластера
Добавление Worker-узлов в кластер
Установка системных компонентов кластера
Статус установки системных компонентов:
kube-prometheus-crds : Успешно
cilium : Успешно
ingress-nginx : Успешно
Кластер успешно развернут
Для подключения используйте ключ
/%путь_до_конфигурационного файла%/clusteradmin.confclusteradmin.conf

Если инсталляция завершилась с ошибками, информация о них отобразится в логе.

Тихий режим инсталляции

./stc install management --cluster-name=test-cluster --license=$SHTURVAL_LICENSE \
--ssh-user=%имя_пользователя% --ssh-private-key=%путь к файлу с ключом%  --ha-type=ha \
--master-nodes=master1,master2,master3 --worker-nodes=worker1,worker2 --ingress-vip=[string] \
--ca-cert=./cert.pem  --ca-key=./key.pem

Пример:

./stc install management --license="qwe123asd" --registry=corp.domain.local:443 --use-external-ingress-lb=true --api-endpoint=api.corp.domain.local --cluster-name=management --ha-type=ha --ingress=apps.corp.domain.local --master-nodes=10.0.0.3,10.0.0.4,10.0.0.56 --worker-nodes=10.0.0.11,10.0.0.12,10.0.0.13 --ssh-user=shturval --ssh-private-key=/home/shturval/.ssh/id_rsa --use-external-ingress-lb=true --pod-subnet=100.80.0.0/16 --service-subnet=100.64.0.0/12 --secure=true --skip-check --debug --ca-cert=./cert.pem  --ca-key=./key.pem

Если какой-либо параметр указан неверно:

  • инсталляция остановится;
  • отобразится сообщение с указанием ошибки и некорректного параметра;
  • процесс остановится.

В этом случае устраните ошибку и перезапустите процесс развертывания.

Смешанный режим инсталляции

В смешанном режиме пропишите в команде признак --interactive и добавьте необходимые параметры. Остальные необходимые для инсталляции параметры система запросит в режиме диалога.

Пример запуска установки кластера управления в смешанном режиме:

./stc install management  --interactive --license=$SHTURVAL_LICENSE \
--ntp-servers=0.ru.pool.ntp.org,1.ru.pool.ntp.org \
--disabled-system-services=shturval-cd,shturval-rollouts,shturval-policy-manager,shturval-scanner,shturval-policies

Если инсталляция завершилась с ошибками, информация о них отобразится в логе.

Полезная информация

Установка системных сервисов в процессе инсталляции

  • Чтобы использовать системный ingress-controller (Virtual IP) при инсталляции используйте параметр --ingress-vip. Пропишите свободный IP-адрес. Технические сервисы будут преконфигурированы при инсталляции.
  • Если у вас есть Wildcard-запись и вы хотите использовать системный ingress-controller (Virtual IP) при инсталляции используйте параметры --ingress-vip и --ingress. При этом IP-адрес имени хоста ingress должен совпадать с IP-адресом, указанным в ingress-vip.
  • Если у вас есть Wildcard-запись и вы хотите использовать внешний ingress-controller при инсталляции используйте параметры --ingress и --use-external-ingress-lb со значением true. При инсталляции будут выведены подсказки по конфигурации на примере HAProxy. В таком случае вам необходимо самостоятельно создать Load balancer и распределить трафик на Worker-узлы.

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

Название чарта Название в графическом интерфейсе
shturval-descheduler Модуль распределения нагрузки узлов
shturval-log-operator Модуль локального сбора логов
shturval-logs-operator Модуль хранения логов
shturval-dashboards Модуль графического отображения метрик
shturval-metrics Модуль локального сбора метрик
shturval-local-csi Модуль локального хранения
shturval-node-config Модуль управления конфигурациями узлов
shturval-cluster-roles Кластерные роли Платформы
shturval-services Модуль управления системными и корпоративными сервисами
shturval-backup Модуль резервного копирования и восстановления
shturval-scanner Модуль сканирования образов контейнеров
shturval-rollouts Модуль управления развертыванием прикладных сервисов
shturval-policy-manager Модуль анализа конфигураций приложений
shturval-cd Модуль непрерывной доставки приложений
shturval-cert-manager Модуль управления TLS-сертификатами
shturval-cert-expiration Модуль проверки сертификатов API Kubernetes
shturval-networking Модуль управления сетями кластера
shturval-caching-dns Модуль управления локальным DNS
shturval-vip Модуль управления виртуальными IP-адресами
shturval-ingress-controller Модуль управления внешними подключениями (Ingress)
shturval-update Модуль обновления кластера

Перейти на страницу с описанием параметров для конфигурации системных сервисов.

Troubleshooting

Если установка происходит в закрытом контуре (без доступа к сети Интернет) на Red OS и была произведена ручная модификация файлов /etc/yum.repos.d/RedOS-*.repo (например baseurl изменён на адрес прокси репозитория или зеркала):

На всех нодах кластера необходимо:

  • Установить пакет python3-dnf-plugin-versionlock
  • Поставить versionlock на пакет redos-release
  • Определить тип установки дистрибутива (minimal, server, desktop). Тип установки можно посмотреть в файле /etc/redos-release . Также можно посмотреть наличие пакетов redos-release-minimal, redos-release-server или redos-release-desktop
  • Поставить versionlock, на соответветствующей установке дистрибутива пакет (redos-release-minimal, redos-release-server, redos-release-desktop).

Пример для minimal инсталляции:

 yum install python3-dnf-plugin-versionlock
 yum versionlock add redos-release redos-release-minimal

Дополнительные рекомендации

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

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

Рекомендуем всегда прописывать ntp-серверы и указывать сервисы, которые не нужно включать по умолчанию:

--ntp-servers - укажите корпоративные или 0.ru.pool.ntp.org, 1.ru.pool.ntp.org
--disabled-system-services - укажите, какие сервисы не нужно включать по умолчанию

Рекомендуем использовать внешний балансировщик для кластера управления в промышленной (продуктивной) среде.

Как изменить пароль администратора

При завершении установки система предоставит временный пароль администратора для первого входа в систему и настройки интеграции с внешней системой аутентификации.

Чтобы сменить пароль администратора по умолчанию, перейдите в установленный системный сервис “Модуль программного управления платформой Штурвал” (shturval-backend) кластера управления (платформы). В спецификации системного сервиса найдите параметр: static_password и обновите его значение.