Деплой и инфраструктура
Обзор
Думатель развёрнут на Kubernetes-кластере в облаке Selectel (Managed Kubernetes Service, регион ru-7). Все сервисы контейнеризированы через Docker и деплоятся через ArgoCD (GitOps). CI/CD построен на GitLab CI с переиспользуемыми workflow-шаблонами.
Архитектура инфраструктуры
┌────────────────────────────────────────────────────────────────┐
│ Selectel Cloud (ru-7) │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Managed Kubernetes Service (MKS) │ │
│ │ 3-5 нод (4 vCPU / 16GB RAM / 80GB SSD каждая) │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │
│ │ │ Backend │ │ Frontend │ │ RAG/AI │ │ │
│ │ │ Pods │ │ Pods │ │ Pods │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ Sprut │ │Seadragon │ │ Anglerfish │ │ │
│ │ │ Doubloon │ │ │ │ Amigofish │ │ │
│ │ │ Anchor │ │ │ │ Sealayers │ │ │
│ │ │ Shark │ │ │ │ Krill │ │ │
│ │ │ ... │ │ │ │ │ │ │
│ │ └──────────┘ └──────────┘ └──────────────┘ │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────┐ │ │
│ │ │ Data Layer │ │ │
│ │ │ PostgreSQL 17 Milvus 2.5.14 Redis 8.2.1 NATS 2.11│ │ │
│ │ │ MinIO etcd 3.5.18 │ │ │
│ │ └──────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────┐ ┌───────────────────────┐ │ │
│ │ │ Cert Manager │ │ Ingress Controller │ │ │
│ │ │ Let's Encrypt│ │ NGINX + TLS │ │ │
│ │ └──────────────┘ └───────────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────┐ ┌───────────────────────┐ │ │
│ │ │ ArgoCD 8.3.0 │ │ HashiCorp Vault │ │ │
│ │ │ GitOps CD │ │ + External Secrets │ │ │
│ │ └──────────────┘ └───────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────────────────┐ │
│ │ Container Registry│ │ fast.ru-7a SSD Storage │ │
│ │ cr.selcloud.ru │ │ (StatefulSets) │ │
│ └──────────────────┘ └──────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
GitOps (ArgoCD)
dot.minddot.mind — внутренний GitLab namespace проекта (прежнее рабочее название продукта). Все репозитории платформы расположены в группе dot.mind/ на внутреннем GitLab-инстансе (gitlab.monsterscorp.ru). Например, dot.mind/devops/environments — это путь к репозиторию конфигураций окружений. Публичное название продукта — Думатель.
- ArgoCD 8.3.0 — мониторит директорию
devops/environments, автосинк - Каждое окружение описано как ArgoCD Application
- Конфигурации:
dot.mind/devops/environments/apps/{env}/
Управление секретами
- HashiCorp Vault — централизованное хранение секретов
- External Secrets Operator — K8s-интеграция: синхронизация секретов из Vault в K8s Secrets
- Альтернативно: GitLab CI/CD variables для CI-pipeline
CI/CD Pipeline
Стадии (единые для всех сервисов)
.pre (version)
│ Генерация VERSION.txt из Git tag
▼
test
│ SAST + Linters (black, isort, mypy, flake8) + pytest
▼
build_docker
│ Docker BuildKit: multi-stage build, кэширование через registry
│ Push → cr.selcloud.ru
▼
build_chart
│ Helm packaging с envsubst (APP_VERSION, APP_NAME)
▼
push_chart
│ Push в OCI registry
▼
update_umbrella_chart
│ Обновление зависимостей зонтичного чарта
▼
deploy_env
│ ArgoCD автосинк (или manual deploy)
▼
verify
│ Pod health verification, smoke tests
▼
test_env
Post-deployment integration tests
Test reporting: Allure TestOps (diver repo)
Shared Workflows
Библиотека 15+ переиспользуемых GitLab CI-шаблонов (dot.mind/devops/workflows):
| Шаблон | Назначение |
|---|---|
.version.yml | Автоматическое версионирование из Git tags |
.docker.yml | Docker build + push с BuildKit |
.build_chart.yml | Helm chart packaging |
.push_chart.yml | Push в OCI registry |
.deploy_env.yml | Развёртывание в K8s |
.test_env.yml | Post-deploy тестирование |
.verify_pods_state.yml | Health checks K8s pods |
.sentry.yml | Sentry release management |
.pypi.yml | Публикация Python-пакетов |
.npm.yml | Публикация npm-пакетов |
.drop_db.yml | Удаление БД (cleanup) |
Базовые Docker-образы
Репозиторий dot.mind/devops/images/:
| Образ | Назначение |
|---|---|
python3.13 | Python 3.13 для сервисов |
python3.14 | Python 3.14 (Sprut и новые проекты) |
pythongpu | Python с CUDA/GPU для ML |
node22-nextjs | Node.js 22 + Next.js |
helm | Helm 3+ для K8s deployments |
kubectl | kubectl и kubeadm |
docker / dind | Docker CLI и Docker-in-Docker |
buildkit | BuildKit builder |
nats | NATS message broker |
postgres | PostgreSQL с кастомизацией |
infra-tools | Инструменты для инфраструктурных задач |
Сборка
- Docker BuildKit с параллелизмом (max-parallelism=8)
- Multi-platform builds
- Кэширование через registry (cache-from/cache-to)
- Registry:
cr.selcloud.ru(Selectel Container Registry)
Окружения
| Окружение | Описание |
|---|---|
| dev | Kubernetes namespace, ArgoCD-managed (devops/environments/apps/dev/) |
| dev01 | Dev-окружение разработчиков |
| dev02 | Дополнительное dev-окружение |
| production | Продакшн (dumatel.ru) |
Конфигурации: dot.mind/devops/environments
Управление инфраструктурой
Ansible (20+ ролей)
| Роль | Назначение |
|---|---|
common | Базовая конфигурация хостов, SSH hardening |
dns_internal | BIND DNS с RPZ блокировкой |
docker | Установка Docker runtime |
postgres | PostgreSQL сервер |
postgres_app | Приложения БД |
minio | S3-совместимое хранилище |
milvus | Vector database |
mlflow | ML experiment tracking |
pgbackrest | Бэкапы PostgreSQL |
edge_proxy | Граничный прокси |
nats | NATS JetStream |
redis | Redis cache |
Terraform
| Модуль | Назначение |
|---|---|
modules/mks | Managed Kubernetes (Selectel) |
modules/vm_base | Базовые VM-шаблоны |
envs/dev | Dev-окружение с Helm и cloud-init |
Локальная разработка
local-infra (dot.mind/dev/local-infra) — Docker Compose со всеми инфраструктурными зависимостями:
| Компонент | Версия |
|---|---|
| PostgreSQL | 17 |
| Milvus | 2.5.14 |
| NATS JetStream | 2 |
| Redis | 7 |
| MinIO | Latest |
| etcd | 3.5.18 |
Package managers: uv (Python), pnpm (TypeScript)
Kubernetes
Ключевые ресурсы
| Ресурс | Использование |
|---|---|
| Deployment | Каждый микросервис |
| HPA | Автомасштабирование по CPU/Memory |
| Ingress | Внешний доступ с TLS (NGINX Ingress Controller) |
| Service Account | Per-service identity |
| ConfigMap | Конфигурация по окружениям |
| Secret | Credentials из HashiCorp Vault через External Secrets |
| PVC | StatefulSets, storage class fast.ru-7a |
Мониторинг
- Sentry: seadragon + все Python-сервисы
- VictoriaMetrics + Fluent Bit: логи (
devops/devops-infra/LOGS/) - Grafana: внутренние дашборды
- Yandex Metrica: интегрирована во фронтенд
Приватные реестры
| Реестр | Тип | URL |
|---|---|---|
| Selectel CR | Docker images | cr.selcloud.ru |
| Nexus npm-group | npm packages (read) | nexus.monsterscorp.ru/repository/npm-group/ |
| Nexus npm-hosted | npm packages (write) | nexus.monsterscorp.ru/repository/npm-hosted/ |
| Nexus PyPI | Python packages | nexus.monsterscorp.ru |
| OCI Registry | Helm charts | cr.selcloud.ru |
Deployer — ручной деплой в dev-кластер
Репозиторий dot.mind/devops/deployer предоставляет механизм разового (manual) деплоя зонтичного Helm-чарта dumatel-system в namespace dev01.
README в репозиториях deployer, infrastructure, apps и images — шаблонные заглушки GitLab. Информация получена из *-tree.md и *-ci.md.
| Параметр | Значение |
|---|---|
| Registry | cr.selcloud.ru |
| Namespace | dev01 |
| Chart | charts/dumatel-system/Chart.yaml |
| Триггер | Manual, только из ветки main |
| Kubeconfig | Передаётся через CI-переменную KUBECONFIG_DINA (base64) |
Команда деплоя: helm dependency build && helm upgrade --install dumatel-system --namespace dev01.
Apps — Helm-чарты внешних сервисов
Репозиторий dot.mind/devops/apps хранит Helm-чарты для сервисов, чьи исходники управляются отдельно (не через паттерн tools/charts/<service>/ в репозитории сервиса):
| Сервис | Ресурсы |
|---|---|
amigofish | deployment, configmap, networkpolicy, pdb, pvc, secret |
anglerfish | deployment-index, deployment-unindex, networkpolicy, pdb (×2), pvc (×2), secret |
sprut | deployment, configmap, hpa, ingress, networkpolicy, pdb, pvc, secret, service |
Паттерн tools/charts/<service>/ применяется для сервисов, хранящих чарт вместе с исходным кодом (подтверждено для Stonefish: tools/charts/stonefish/templates/ включает deployment, hpa, ingress-dev, ingress-pro, service, serviceaccount, configmap-dev, configmap-pro).
Инициализация окружения (devops-infra)
Репозиторий dot.mind/devops/devops-infra содержит пайплайн первоначальной настройки Kubernetes-окружения. Стадии выполняются вручную (when: manual):
| Стадия | Команда | Назначение |
|---|---|---|
create_db | psql ... CREATE DATABASE dumatel_$ENV | Создание БД и пользователя PostgreSQL |
create_namespace | kubectl create namespace $ENV | Создание K8s namespace |
install_redis | kubectl apply -f COMMON/redis.yaml | Деплой Redis |
install_letsencrypt | kubectl apply -f cert-manager/issuer-prod.yaml | Cert-Manager issuer |
install_nats | helm upgrade --install nats nats/nats | NATS JetStream с JetStream и storage class fast.ru-7b |
Репозиторий также хранит конфигурации: GPU Operator, GitLab Runners, Keycloak (dev/prod), VictoriaMetrics, VictoriaLogs, Fluent Bit, MLflow, Milvus UI (Attu), балансировщик (balancer_values_4.10.0.yaml), cert-manager.