Перейти к основному содержимому

Деплой и инфраструктура

Обзор

Думатель развёрнут на 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)

О namespace dot.mind

dot.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.ymlDocker build + push с BuildKit
.build_chart.ymlHelm chart packaging
.push_chart.ymlPush в OCI registry
.deploy_env.ymlРазвёртывание в K8s
.test_env.ymlPost-deploy тестирование
.verify_pods_state.ymlHealth checks K8s pods
.sentry.ymlSentry release management
.pypi.ymlПубликация Python-пакетов
.npm.ymlПубликация npm-пакетов
.drop_db.ymlУдаление БД (cleanup)

Базовые Docker-образы

Репозиторий dot.mind/devops/images/:

ОбразНазначение
python3.13Python 3.13 для сервисов
python3.14Python 3.14 (Sprut и новые проекты)
pythongpuPython с CUDA/GPU для ML
node22-nextjsNode.js 22 + Next.js
helmHelm 3+ для K8s deployments
kubectlkubectl и kubeadm
docker / dindDocker CLI и Docker-in-Docker
buildkitBuildKit builder
natsNATS message broker
postgresPostgreSQL с кастомизацией
infra-toolsИнструменты для инфраструктурных задач

Сборка

  • Docker BuildKit с параллелизмом (max-parallelism=8)
  • Multi-platform builds
  • Кэширование через registry (cache-from/cache-to)
  • Registry: cr.selcloud.ru (Selectel Container Registry)

Окружения

ОкружениеОписание
devKubernetes namespace, ArgoCD-managed (devops/environments/apps/dev/)
dev01Dev-окружение разработчиков
dev02Дополнительное dev-окружение
productionПродакшн (dumatel.ru)

Конфигурации: dot.mind/devops/environments

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

Ansible (20+ ролей)

РольНазначение
commonБазовая конфигурация хостов, SSH hardening
dns_internalBIND DNS с RPZ блокировкой
dockerУстановка Docker runtime
postgresPostgreSQL сервер
postgres_appПриложения БД
minioS3-совместимое хранилище
milvusVector database
mlflowML experiment tracking
pgbackrestБэкапы PostgreSQL
edge_proxyГраничный прокси
natsNATS JetStream
redisRedis cache

Terraform

МодульНазначение
modules/mksManaged Kubernetes (Selectel)
modules/vm_baseБазовые VM-шаблоны
envs/devDev-окружение с Helm и cloud-init

Локальная разработка

local-infra (dot.mind/dev/local-infra) — Docker Compose со всеми инфраструктурными зависимостями:

КомпонентВерсия
PostgreSQL17
Milvus2.5.14
NATS JetStream2
Redis7
MinIOLatest
etcd3.5.18

Package managers: uv (Python), pnpm (TypeScript)

Kubernetes

Ключевые ресурсы

РесурсИспользование
DeploymentКаждый микросервис
HPAАвтомасштабирование по CPU/Memory
IngressВнешний доступ с TLS (NGINX Ingress Controller)
Service AccountPer-service identity
ConfigMapКонфигурация по окружениям
SecretCredentials из HashiCorp Vault через External Secrets
PVCStatefulSets, storage class fast.ru-7a

Мониторинг

  • Sentry: seadragon + все Python-сервисы
  • VictoriaMetrics + Fluent Bit: логи (devops/devops-infra/LOGS/)
  • Grafana: внутренние дашборды
  • Yandex Metrica: интегрирована во фронтенд

Приватные реестры

РеестрТипURL
Selectel CRDocker imagescr.selcloud.ru
Nexus npm-groupnpm packages (read)nexus.monsterscorp.ru/repository/npm-group/
Nexus npm-hostednpm packages (write)nexus.monsterscorp.ru/repository/npm-hosted/
Nexus PyPIPython packagesnexus.monsterscorp.ru
OCI RegistryHelm chartscr.selcloud.ru

Deployer — ручной деплой в dev-кластер

Репозиторий dot.mind/devops/deployer предоставляет механизм разового (manual) деплоя зонтичного Helm-чарта dumatel-system в namespace dev01.

README пуст

README в репозиториях deployer, infrastructure, apps и images — шаблонные заглушки GitLab. Информация получена из *-tree.md и *-ci.md.

ПараметрЗначение
Registrycr.selcloud.ru
Namespacedev01
Chartcharts/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>/ в репозитории сервиса):

СервисРесурсы
amigofishdeployment, configmap, networkpolicy, pdb, pvc, secret
anglerfishdeployment-index, deployment-unindex, networkpolicy, pdb (×2), pvc (×2), secret
sprutdeployment, 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_dbpsql ... CREATE DATABASE dumatel_$ENVСоздание БД и пользователя PostgreSQL
create_namespacekubectl create namespace $ENVСоздание K8s namespace
install_rediskubectl apply -f COMMON/redis.yamlДеплой Redis
install_letsencryptkubectl apply -f cert-manager/issuer-prod.yamlCert-Manager issuer
install_natshelm upgrade --install nats nats/natsNATS 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.

Связанные страницы