sqs-operator: docs + third test results (41 PASS, 0 OOM, 0 infra errors)

This commit is contained in:
Naeel
2026-04-07 20:44:56 +03:00
parent c132c68d74
commit c4efc5c960
3 changed files with 616 additions and 44 deletions
+59 -44
View File
@@ -1,59 +1,74 @@
# Прогресс разработки
Последнее обновление: 2026-04-07 14:30 МСК
Последнее обновление: 2026-04-07 21:30 МСК
---
## 2026-04-07 — SQS Operator: переделка через Operator SDK
## 2026-04-07 — SQS Operator v0.1.0v0.1.6: разработка, деплой, тестирование, tuning
### Цель
Managed SQS-совместимый сервис (ElasticMQ per-tenant) — Kubernetes оператор.
### Этапы дня
### Что сделано (Opus)
1. ✅ Установлен operator-sdk v1.37.0 на VM
2.`operator-sdk init` — scaffold (Makefile, Dockerfile, config/, cmd/, PROJECT)
3.`operator-sdk create api --kind QueueService --group sqs --version v1alpha1`
4. ✅ CRD types заполнены — QueueServiceSpec (TenantID, MemoryMB, StorageMB, Persistence), QueueServiceStatus (Phase, Endpoint, SecretName, Message, ReadyAt)
5. ✅ Reconciler перенесён из ручного кода в `internal/controller/` (provision, checkReady, ensureHealthy, handleDeletion)
6. ✅ controller-gen обновлён до v0.17.0 (совместимость с Go 1.26.1)
7.`make generate` — deepcopy автогенерирован
8.`make manifests` — CRD YAML + RBAC ClusterRole из маркеров
9.`make build` — bin/manager 55MB, компиляция без ошибок
10. ✅ Коммит `66dcd99` + push
| Версия | Что сделано | Коммит |
|--------|------------|--------|
| v0.1.0 | Operator SDK scaffold, CRD types, reconciler, make build | 66dcd99 |
| v0.1.0 | Dockerfile fix, docker-build/push, make install/deploy, smoke test | — |
| v0.1.1 | Фикс ElasticMQ native→JVM (H2 не работал в native) | — |
| v0.1.2 | Фикс OOMKilled: min 256Mi, -Xmx75% | — |
| v0.1.3 | Фикс fsGroup=999 (PVC permission denied) | — |
| v0.1.4 | Фикс 404 через HTTPS (убрать rewrite-target) | — |
| v0.1.4 | Тест-сьют test_full_suite.sh: 30 PASS / 4 FAIL / 6 WARN | — |
| v0.1.5 | Фикс SH02: ensureHealthy проверяет все 4 ресурса | c132c68 |
| v0.1.6 | Откат MT03 фикса (configuration-snippet заблокирован nginx CVE-2021-25742) | c132c68 |
| v0.1.6 | test_v2_suite.sh написан: 8 фаз, 52 теста, ~37 мин | c132c68 |
### Что осталось (Sonnet)
- ⬜ Исправить Dockerfile (не копирует internal/config/ и internal/elasticmq/)
- ⬜ Docker build + push в pearlharbor registry
- ⬜ Обновить kubeconfig (протух)
- ⬜ make install (CRD в кластер)
- ⬜ make deploy (оператор в кластер) + env SQS_EXTERNAL_HOST + imagePullSecrets
- ⬜ Создать тестовый QueueService CR
- ⬜ Smoke test SQS API через curl
### Результаты test_v2_suite.sh
**Второй запуск (memoryMB=64)**
- 40 PASS / 4 FAIL / 7 WARN
- Марафон: 11815 iter, 2 OOM restarts
**Третий запуск (memoryMB=512) — финал сессии**
- 41 PASS / 3 FAIL / 6 WARN / 2 SKIP
- Марафон: 12733 iter, pod_restarts=0, infra_errors=0
- Лог: sqs-operator/test_results_v2c_20260407.log
Оставшиеся 3 FAIL — не баги оператора (P01/P02: кластерная нагрузка, A01: stale messages).
### Ключевые решения
- Модель: инстанс на тенанта (ElasticMQ Native, ~30MB idle)
- Routing: path-based `sqs.kube5s.ru/sqs/{tenantId}`
- DNS: sqs.kube5s.ru → 185.247.187.147 (создан)
- Namespace: sless-fn-{tenantId} (существующий)
- Persistence: H2 на PVC
### Структура sqs-operator/
```
sqs-operator/
├── api/v1alpha1/ ← CRD types + deepcopy
├── cmd/main.go ← entry point
├── config/ ← kustomize (CRD, RBAC, manager)
├── internal/
│ ├── config/ ← env config
│ ├── controller/ ← reconciler
│ └── elasticmq/ ← HOCON config + credentials
├── Makefile ← operator-sdk toolchain
├── Dockerfile ← multi-stage (NEEDS FIX)
└── PROJECT ← metadata
```
**Фикс SH02**: ensureHealthy теперь проверяет все 4 ресурса в цикле:
Deployment / Service / ConfigMap / Ingress. Восстановление за 2-4с.
### План для Sonnet
Подробный план: `doc/sqs-operator-sonnet-plan.md` — 8 этапов с командами и проверками.
**MT03 WONTFIX**: ElasticMQ не проверяет SigV4 credentials.
configuration-snippet заблокирован nginx. Решение для прода: Keycloak JWT.
**Memory tuning**: spec.memoryMB 64 → 512. JVM limit=512Mi, request=256Mi, -Xmx384m.
**Node uncordon**: naeel-test-3-workers-5p8w7-vxzch была в cordon.
Раскордонирована → все 3 воркера Ready, ~16.8 GB свободно (~30 тенантов).
### Текущее состояние
| Компонент | Состояние |
|---|---|
| sqs-operator | v0.1.6, Running 1/1, sqs-operator-system |
| ElasticMQ test001 | 1/1, 512Mi limit, Phase: Ready |
| Endpoint | https://sqs.kube5s.ru/sqs/test001 |
| AWS CLI | Поддерживается (любые credentials, --endpoint-url) |
| Воркеры | 3/3 Ready, ~16.8 GB свободно |
| Коммит | c132c68 (ветка sqs-operator) |
### Известные ограничения (не фиксим)
| ID | Описание |
|---|---|
| MT03 | Нет SigV4 auth в ElasticMQ — Keycloak в проде |
| E02 | VisibilityTimeout > 43200 принимает |
| A06 | Long polling не работает |
| A07 | MessageAttributes не возвращаются |
| MT05 | ns deletion > 30s |
---
---