Установка CodeScoring.Save в Kubernetes
CodeScoring.Save устанавливается с помощью Helm-чарта save. Один и тот же чарт поддерживает два сценария развертывания:
- стандартную установку в Kubernetes с PostgreSQL, Redis, а также поддержкой S3-совместимого объектного хранилища;
- hosted-установку в одноузловом кластере k3s с SQLite и файловым хранилищем.
Перед установкой проверьте системные требования.
Установка с помощью Helm-чарта
Адреса Helm-репозитория и реестра контейнерных образов, а также учетные данные предоставляет вендор. В командах ниже используются следующие обозначения:
HELM_REPOSITORY_URL— адрес Helm-репозитория;REGISTRY_URL— адрес реестра контейнерных образов;USERNAMEиPASSWORD— учетные данные для доступа;CHART_VERSION— версия Helm-чарта и CodeScoring.Save.
-
Создайте namespace:
-
Создайте Secret для доступа к приватному реестру контейнерных образов:
Имя Secret должно совпадать со значениями
image.pullSecretsиosa-proxy.imagePullSecretsвvalues.yaml. -
Установите Helm и добавьте репозиторий CodeScoring.Save:
-
Скачайте и распакуйте чарт:
Настройка параметров Helm-чарта
Внесите необходимые изменения до первой установки. Перед обновлением установленной системы создайте резервные копии PostgreSQL и объектного хранилища.
Вся конфигурация инсталляции находится в values.yaml. Примеры ниже содержат только изменяемые фрагменты: остальные параметры из поставляемого файла необходимо сохранить.
Контейнерные образы
Основные компоненты используют общие реестр, тег и Secret для скачивания образов:
OSA Proxy поставляется как зависимость чарта и имеет отдельные настройки образа:
Используйте версии образов, указанные в поставляемом values.yaml. Они проверены на совместимость с выбранной версией чарта.
Секреты приложения
Конфиденциальные параметры backend, worker, scheduler и auth находятся в secrets.save-secrets.data:
SECRETS_ENCRYPTION_KEY используется для шифрования сохраненных учетных данных. Сгенерируйте его один раз, например командой openssl rand -base64 32, сохраните в защищенном хранилище и не меняйте при обновлениях. После смены ключа ранее сохраненные данные невозможно расшифровать.
Не храните рабочие пароли и ключи в системе контроля версий. Для продуктивной установки используйте защищенный файл значений или External Secrets.
PostgreSQL и Redis из Helm-чарта
По умолчанию чарт создает PostgreSQL и Redis как StatefulSet. Включите эти ресурсы и настройте PersistentVolumeClaim:
Замените storageClassName и размеры томов в соответствии с конфигурацией кластера и ожидаемым объемом данных.
Учетные данные встроенной PostgreSQL задаются отдельно и должны совпадать с параметрами DATABASE_NAME, DATABASE_USER и DATABASE_PASSWORD в secrets.save-secrets.data:
Параметры подключения приложения к PostgreSQL и Redis находятся в ConfigMap save-backend-envs:
ConfigMap и Secret уже подключены к компонентам через deploymentsGeneral.envConfigmaps и deploymentsGeneral.envSecrets. При изменении полного values.yaml сохраните эти ссылки:
Внешние PostgreSQL и Redis
Для внешней PostgreSQL отключите встроенный StatefulSet и его PVC, затем измените параметры подключения:
База данных и пользователь должны быть созданы до установки CodeScoring.Save.
Для внешнего Redis отключите встроенные StatefulSet, Service и PVC:
S3-совместимое объектное хранилище
Текущий чарт не разворачивает S3-хранилище. Для стандартной Kubernetes-инсталляции заранее создайте бакет во внешнем S3-совместимом хранилище и укажите параметры подключения:
Для хранилища, которое поддерживает virtual-hosted-style URL, установите S3_FORCE_PATH_STYLE: "false".
Hosted-установка в k3s
Hosted-вариант предназначен для односерверной установки в k3s и использует SQLite для метаданных и локальную файловую систему для артефактов.
Установите k3s и настройте доступ к кластеру:
Чтобы переключить стандартный профиль чарта на hosted, измените три переменные в configMaps.save-backend-envs.data:
ConfigMap save-backend-envs подключен к backend, worker, scheduler и auth, поэтому дополнительные ConfigMap создавать не требуется. Остальные параметры из поставляемого values.yaml сохраните без изменений.
Компоненты worker и scheduler требуют PostgreSQL и не поддерживают работу с SQLite. В hosted-инсталляции обязательно отключите оба deployment:
Постоянное хранение данных
Для hosted-установки нужны три отдельных постоянных тома:
db-data— база SQLite backend;auth-data— база SQLite auth;storage— файловое хранилище артефактов.
Подключите PVC к deployments через volumes и volumeMounts. Для auth также задайте пустое значение initContainers, чтобы удалить унаследованный init-контейнер wait-for-postgres:
Backend и auth используют одинаковое значение DATABASE_SQLITE_PATH, но отдельные PVC, поэтому каждый сервис хранит собственную базу в своем каталоге /app/data. Значение STORAGE_ROOT_PATH по умолчанию — ./storage, что соответствует точке монтирования /app/storage при рабочем каталоге /app.
При использовании Dynamic Volume Provisioning укажите StorageClass для каждого PVC. Соответствующие PV будут созданы автоматически:
Размеры томов и storageClassName необходимо подобрать с учетом нагрузки и конфигурации кластера.
Также можно использовать заранее созданные PV любого поддерживаемого Kubernetes типа. В этом случае создайте PV самостоятельно или опишите их в секции pvs, а в каждом PVC задайте пустой storageClassName и соответствующий volumeName, например:
В примере для Helm-релиза codescoring-save чарт создает PV codescoring-save-db-data из секции pvs.db-data, а PVC явно привязывается к нему через volumeName. Замените адрес NFS-сервера и путь экспорта значениями своей инфраструктуры.
Аналогично создайте и привяжите тома auth-data и storage. Конкретный источник тома может быть NFS, CSI, локальным диском или другим хранилищем; параметры зависят от инфраструктуры кластера.
Опциональный Redis
Redis не обязателен для hosted-установки. Чтобы запустить Save без Redis, выключите его в конфигурации приложения и отключите связанные StatefulSet, Service и PVC:
Если Redis используется, сохраните REDIS_ENABLED: "true", оставьте его StatefulSet, Service и PVC включенными.
SQLite рассчитана на работу одной реплики. Не увеличивайте deploymentsGeneral.replicas и отключите автоматическое масштабирование backend и worker:
После переключения приложение не использует PostgreSQL. Чтобы не создавать неиспользуемые ресурсы, можно дополнительно отключить StatefulSet и PVC:
SQLite и файловое хранилище подходят только для односерверной установки. Каталоги с базами SQLite и артефактами должны находиться на сохраняемом диске k3s и регулярно копироваться. Не используйте этот профиль для многорепличного развертывания.
Ingress
По умолчанию Ingress выключен. Чтобы открыть веб-интерфейс и API, включите его и замените доменное имя:
Если TLS завершается на внешнем балансировщике, настройте tls и аннотации Ingress в соответствии с инфраструктурой кластера.
HTTPRoute (Gateway API)
Если в кластере используется Kubernetes Gateway API, настройте маршрут к frontend через секцию httpRoutes. Ресурс Gateway, на который ссылается маршрут, должен существовать до установки CodeScoring.Save.
Значения gatewayName, gatewayNamespace, gatewaySectionName и hostnames должны соответствовать Gateway и DNS-имени в вашем кластере.
Значение backendRefs.name формируется как {helm-release-name}-frontend. Например, для команды helm install codescoring-save ... необходимо указать name: codescoring-save-frontend.
OSA Proxy
OSA Proxy отключена по умолчанию. Для ее включения необходимо выставить поле osa-proxy.enabled в значение true.
В существующем блоке osa-proxy.config.content замените значение codescoring.url на адрес инсталляции CodeScoring. Токен передайте через Secret osa-proxy:
Если проверка компонентов через OSA Proxy не требуется, отключите зависимость:
osa-proxy.config.content содержит полную конфигурацию сервиса. При ее изменении сохраните остальные секции из поставляемого values.yaml.
Ограничения ресурсов
В поставляемом values.yaml ресурсы контейнеров не ограничены. Для продуктивной установки задайте requests и limits для каждого компонента по результатам нагрузочного тестирования:
Аналогично настройте deployments.scheduler, deployments.auth, deployments.save-frontend, statefulSets.save-postgresql и statefulSets.save-redis. Для корректной работы HPA у масштабируемых контейнеров должны быть заданы CPU requests.
External Secrets
Чарт может получать секреты из внешнего хранилища через External Secrets Operator. В кластере должны быть заранее установлены оператор и SecretStore или ClusterSecretStore.
Включите нужный ресурс в секции vaults:
Затем подключите создаваемый Secret к deployments:
Для встроенной PostgreSQL аналогично настройте vaults.postgresql-secrets-external и подключите Secret в statefulSets.save-postgresql.envSecrets.
Установка
Из каталога распакованного чарта выполните:
Для обновления существующей инсталляции используйте ту же версию настроенного values.yaml:
Проверка установки
Проверьте состояние ресурсов:
Все Pod должны перейти в состояние Running, а их контейнеры — быть готовы. Для диагностики используйте логи компонентов:
После установки откройте адрес, указанный в Ingress, и войдите с паролем из AUTH_ADMIN_PASSWORD.
Следующие шаги
После успешной установки:
