# Архитектура системы ## Общее описание Managed Serverless Functions Service для облачного провайдера nubes.ru. Пользователь загружает код, сервис его собирает и запускает по HTTP-триггеру или расписанию. ## Стек | Компонент | Технология | Где запущен | |-----------|-----------|-------------| | API сервер | Go | Kubernetes, namespace `sless` | | PostgreSQL | PostgreSQL | Kubernetes, namespace `sless` | | Redis | Redis | Kubernetes, namespace `sless` | | RabbitMQ | RabbitMQ | Kubernetes, namespace `sless` (позже) | | S3 | Ceph (облачный) | `ceph.tst.nubes.ru` | | Container Registry | Внутренний registry кластера | namespace `registry` | | Функции пользователей | k8s Jobs/Deployments | namespace `sless-fn-{id}` | ## Схема ``` Пользователь │ ▼ REST API (Go) ←── Terraform provider │ ├── PostgreSQL — метаданные функций, версии, логи вызовов ├── S3 (Ceph) — хранение кода (zip архивы) ├── Redis — кеш, rate limiting │ ▼ Builder — получает zip из S3, собирает Docker образ, пушит в registry │ ▼ Runner (k8s) — деплоит функцию как Job/Deployment в k8s │ ▼ RabbitMQ — async вызовы, cron triggers (v2) ``` ## Аутентификация Используется токен облака (Bearer token), который пользователь получает в UI облака. Terraform provider передаёт его в заголовке `Authorization: Bearer `. Keycloak не используется. ## Мониторинг Метрики функций → Victoria Metrics / Grafana (уже есть в облаке). Grafana: https://grafana.ngcloud.ru/dashboards/... ## Kubernetes кластер Сейчас используется существующий кластер (временно). Планируется переезд на новый кластер — манифесты переносятся без изменений. Ноды существующего кластера: - `wheel-control-plane-fm9sr` — control-plane - `wheel-workers-tv4qr-r45xs` — worker - `wheel-workers-tv4qr-x8xw7` — worker Ingress: nginx, external IP `5.172.178.182` Storage: rawfile CSI (local-path, default)