docs: document all changes and web-console plan
- doc/progress.md: funcs global service v0.1.x, URLs, next steps - doc/decisions/log.md: storage architecture, funcs service decision, web-console plan - doc/api/design.md: current + planned endpoints (/source, PATCH trigger) - doc/architecture/overview.md: funcs-service component, S3 storage diagram
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Архитектура системы
|
||||
|
||||
Последнее обновление: 2026-03-11 (v0.1.22)
|
||||
Последнее обновление: 2026-03-18 (v0.1.33 + funcs-service v0.1.3)
|
||||
|
||||
## Общее описание
|
||||
|
||||
@@ -13,6 +13,7 @@ Managed Serverless Functions Service для облачного провайде
|
||||
| Компонент | Технология | Где запущен |
|
||||
|-----------|-----------|-------------|
|
||||
| Operator (API + Controllers) | Go (controller-runtime) | Kubernetes, namespace `sless` |
|
||||
| funcs-service (глобальная консоль) | Go (net/http) | Kubernetes, namespace `sless` |
|
||||
| PostgreSQL | PostgreSQL 16 | Kubernetes, namespace `sless` |
|
||||
| S3 | Ceph (облачный) | `s3.msk-1.ngcloud.ru` |
|
||||
| Container Registry | DockerHub (`naeel/`) | внешний |
|
||||
@@ -25,6 +26,44 @@ Managed Serverless Functions Service для облачного провайде
|
||||
|
||||
> Redis и RabbitMQ — отложены до v2.
|
||||
|
||||
## Компонент: funcs-service
|
||||
|
||||
Глобальный HTTP сервис — **одна копия** на весь кластер, для всех пользователей.
|
||||
|
||||
```
|
||||
User Browser / curl
|
||||
└─► https://sless.kube5s.ru/funcs/<namespace>
|
||||
└─► nginx Ingress (sless-funcs-ingress)
|
||||
└─► sless-funcs-service:8090 (namespace sless)
|
||||
└─► http://sless-operator.sless.svc.cluster.local:9090/v1/...
|
||||
```
|
||||
|
||||
**Файлы:**
|
||||
- `services/funcs/main.go` — логика
|
||||
- `services/funcs/Dockerfile` — multi-stage Go → alpine
|
||||
- `deployments/k8s/funcs-service.yaml` — Deployment + Service + Ingress
|
||||
|
||||
**Env vars сервиса:**
|
||||
| Переменная | Значение |
|
||||
|-----------|---------|
|
||||
| `SLESS_OPERATOR_URL` | `http://sless-operator.sless.svc.cluster.local:9090` |
|
||||
| `SLESS_EXTERNAL_URL` | `https://sless.kube5s.ru` |
|
||||
| `SLESS_EXCLUDE` | `event-writer,event-monitor,event-cleaner` |
|
||||
| `SLESS_SERVICE_TOKEN` | JWT токен (задаётся через `kubectl set env`, не в git) |
|
||||
|
||||
## Хранение кода функций в S3
|
||||
|
||||
```
|
||||
Terraform source_dir (локально)
|
||||
└─► zip → POST /upload → builder.PrepareContext()
|
||||
├─► functions/{ns}/{name}/{ts}.zip ← ИСХОДНЫЙ КОД пользователя
|
||||
└─► contexts/{ns}/{name}/{ts}.tar.gz ← BUILD CONTEXT для kaniko
|
||||
└─► Function CRD: spec.s3Key = "contexts/..."
|
||||
└─► контроллер → kaniko Job → Docker image
|
||||
```
|
||||
|
||||
Для web-консоли: `GET /source` читает `functions/{ns}/{name}/{ts}.zip` напрямую.
|
||||
|
||||
## Изоляция пользователей — Namespace per user
|
||||
|
||||
Каждый пользователь облака получает **отдельный k8s namespace**.
|
||||
|
||||
Reference in New Issue
Block a user