Закрытый контур
Закрытый контур - в процессе инсталляции нет интернета на всех узлах и зеркале. Для инсталляции необходим дистрибутив и лицензия платформы Штурвал. Ссылку на скачивание версии stc, бандл, а также номер лицензии передает заказчику менеджер со стороны Штурвала.
Подготовка к инсталляции без доступа к сети Интернет
- Поднять 7 хостов (3 для Master и 3 для Worker узлов и 1 хост для зеркала) с одинаковой ОС из списка поддерживаемых.
- Определить системные требования для Master, Worker узлов и зеркала;
- Для хоста с зеркалом отключить SELinux, убедиться, что порты Nginx открыты и свободны (параметры http-port и https-port, по умолчанию 80 и 443), а также что не установлен container runtime.
- Убедиться, что хосты для узлов кластера резолвят хост с зеркалом по действующему FQDN.
- Проверить синхронизацию времени на хостах и при необходимости выполнить настройки.
- На каждом хосте убедиться, что SElinux отключен. При необходимости внести изменения в файл
/etc/selinux/config
на каждом хосте и поочередно перезагрузить хосты. - Отключить или удалить недоступные репозитории на хостах, например, родные репозитории дистрибутива.
- На каждом хосте настроить OpenSSH-сервер, отслеживающий входящие подключения на порте TCP 22.
- Создать на каждом хосте учетную запись, при этом имя сервисной учетной записи должно быть одинаковым для всех узлов кластера.
- Для каждой сервисной учетной записи настроить аутентификация с использованием ключевой пары (приватный и публичный ключ), при этом публичный ключ должен быть одинаковым на всех хостах, при этом ключ должен быть одинаковым на всех хостах. Каждая сервисная учетная запись должна иметь права на выполнение команды sudo без указания пароля.
- Создать для Linux пользователя домашний каталог в операционной системе (например, /home/shturval).
- Определить адрес для API сервера кластера управления:
- При использовании внутреннего балансировщика для API сервера кластера управления найти свободный (непингуемый) IP адрес в той же сети, что и подготовленные хосты.
- При использовании внешнего балансировщика, настроить внешний балансировщик.
- Определить адрес для Ingress:
- При использовании внутреннего балансировщика для Ingress найти второй свободный (непингуемый) IP адрес в той же сети, что и подготовленные хосты.
- При использовании внешнего балансировщика, настроить внешний балансировщик.
- приготовить FQDN и IP адрес, в который будет резолвиться FQDN. FQDN необходим для использования сертификата.
- Подготовить корпоративный сертификат или уточнить настройки вашего корпоративного ACME сервера (CA сертификат и урл до ACME сервера). Пропустить этот шаг для использования внутреннего самоподписного сертификата.
Начало инсталляции
Обратите внимание! Запуск 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
Работа с сертификатами
Требование к сертификату
- Для импорта необходимо указать файл с цепочкой сертификатов и ключом.
- Сертификаты и ключ должны быть в pem формате.
- Цепочка сертификатов должна содержать CA и сам сертификат.
- Сертификат должен содержать поле subjectAltName с fqdn зеркала (fqdn должен совпадать с указанным параметром
--fqdn
или со значением в конфигурации зеркала) - При подписании 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 и обновите его значение.