Files
sless/doc/thinking/2026-04-07.md
T
Naeel 66dcd99465 refactor(sqs-operator): переделка через Operator SDK v1.37.0
- operator-sdk init + create api (QueueService kind, group sqs, v1alpha1)
- Стандартная kubebuilder структура: cmd/, internal/controller/, config/
- CRD types с kubebuilder маркерами (validation, defaults, printcolumns)
- Reconciler перенесён из ручного кода в internal/controller/
- controller-gen v0.17.0 (совместимость с Go 1.26.1)
- Автогенерация: deepcopy, CRD YAML, RBAC ClusterRole
- Удалены все ручные файлы (controllers/, main.go, deployments/)
2026-04-07 14:25:14 +03:00

73 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Лог мышления — 2026-04-07
## Агент: GitHub Copilot (Claude Opus 4.6)
---
## Контекст: Переделка SQS Operator через Operator SDK
### Проблема
Первая версия sqs-operator была создана вручную (без Operator SDK):
- Ручной CRD types файл с самописным deepcopy
- Ручной Makefile
- Ручной Dockerfile
- Нет стандартной kubebuilder структуры
Пользователь справедливо потребовал переделать через Operator SDK.
### Решение
1. **Установил operator-sdk v1.37.0** на VM
2. **Сделал бэкап** бизнес-логики в /tmp/sqs-backup/ (4 файла)
3. **Удалил** ручной sqs-operator/
4. **`operator-sdk init`** — сгенерировал scaffold:
- Makefile с полным toolchain (manifests, generate, build, docker-build, deploy)
- Dockerfile multi-stage
- config/ (CRD, RBAC, manager, prometheus, certmanager, scorecard)
- cmd/main.go — стандартный entry point
- PROJECT — метаданные оператора
5. **`operator-sdk create api`** — сгенерировал:
- api/v1alpha1/queueservice_types.go (scaffold)
- internal/controller/queueservice_controller.go (scaffold)
- config/rbac/ editor/viewer roles
- config/samples/ sample CR
### Проблема: controller-gen v0.14.0 не компилируется с Go 1.26.1
- Ошибка: `golang.org/x/tools@v0.16.1` → `tokeninternal.go:78:9: invalid array length`
- **Решение**: обновил CONTROLLER_TOOLS_VERSION в Makefile с v0.14.0 на v0.17.0
### Перенос бизнес-логики
- `queueservice_types.go` — заполнил CRD spec/status с kubebuilder маркерами:
- Spec: TenantID, MemoryMB (default 64), StorageMB (default 512), Persistence (default true)
- Status: Phase (Pending/Provisioning/Ready/Failed), Endpoint, SecretName, Message, ReadyAt
- PrintColumns: Tenant, Phase, Endpoint, Age
- `queueservice_controller.go` — перенёс reconciler из бэкапа, адаптировал:
- Package: `controller` (operator-sdk) вместо `controllers` (ручной)
- PVC Resources: `VolumeResourceRequirements` вместо `ResourceRequirements` (k8s v0.29.2 API)
- Остальная логика без изменений
- `internal/elasticmq/` — HOCON config генератор + credentials генератор
- `internal/config/` — env config (SQS_EXTERNAL_HOST, SQS_ELASTICMQ_IMAGE, OPERATOR_NAMESPACE)
- `cmd/main.go` — добавил загрузку конфига и передачу в reconciler
### Очистка
При `rm -rf sqs-operator/` старые файлы из ручного кода остались (sshfs cache?):
- `controllers/` (старый каталог) — конфликт с `internal/controller/`
- `internal/elasticmq/config.go` и `credentials.go` — конфликт с новыми `elasticmq_*.go`
- `internal/config/config.go` — конфликт с `sqs_operator_config.go`
- `main.go` (в корне) — конфликт с `cmd/main.go`
- `deployments/sqs-operator.yaml` — ручной yaml
Все удалены, `make build` прошёл успешно.
### Результат
- ✅ `make generate` — deepcopy сгенерирован автоматически
- ✅ `make manifests` — CRD YAML + RBAC roles сгенерированы из маркеров
- ✅ `make build` — бинарник bin/manager (55MB)
- CRD включает printColumns, validation constraints, defaults
- RBAC включает все необходимые permissions (apps, core, networking, sqs.kube5s.ru)
### Следующие шаги
- Добавить bin/manager в .gitignore
- Коммит + пуш
- Docker build + push
- Deploy в кластер + тестирование