Files
IoT/doc/progress.md
T
Naeel d4f7c5abc8 doc: обновлена документация — дополнения к архитектуре, деплою, прогрессу
- architecture/overview.md: добавлена актуальная схема (SQS, managed PG)
- deployment.md: добавлена процедура деплоя в iot-naeel
- progress.md: добавлен блок 2026-04-12 (Kafka→SQS, деплой)
- api/endpoints.md: добавлен актуальный формат /iot-admin/stats
- thinking/2026-04-12.md: дописан ход реализации и деплоя
- copilot-instructions.md: добавлено правило «документацию не стирать»

Старая документация (Kafka, RabbitMQ) сохранена как база знаний.
2026-04-12 16:16:46 +03:00

5.1 KiB
Raw Blame History

IoT Managed Service — Трекер прогресса

2026-04-12: Перенос из sless в отдельную репу

Выполнено

  • Создана репа https://gitea.services.ngcloud.ru/Nail/IoT
  • Go модуль: gitea.services.ngcloud.ru/Nail/IoT
  • Перенесены все IoT-компоненты из sless:
    • iot/api/v1alpha1/api/v1alpha1/ (CRD types: IoTDevice)
    • iot/controllers/controllers/ (IoTDevice reconciler)
    • iot/cmd/mqtt-bridge/cmd/mqtt-bridge/ (MQTT→Kafka)
    • iot/cmd/kafka-consumer/cmd/kafka-consumer/ (Kafka→Postgres)
    • internal/storage/iotpg/internal/storage/iotpg/ (per-tenant PG)
    • internal/api/handler/iot_*.gointernal/api/handler/ (REST handlers)
    • internal/api/ui/iot-*.htmlinternal/api/ui/ (embedded HTML)
    • internal/api/middleware/internal/api/middleware/ (auth, logging)
    • deployments/k8s/iot-*.yaml + kafka.yamldeployments/k8s/
    • config/crd/bases/config/crd/bases/
    • doc/iot/, examples/IOT/doc/, examples/
  • Созданы новые файлы:
    • cmd/iot-operator/main.go — точка входа (controller-manager + REST API)
    • internal/api/handler/handler.go — упрощённый Handler (без S3/PG от sless)
    • internal/api/router.go — только IoT маршруты
    • Dockerfile — multi-stage build, 3 бинарника, distroless
    • Makefile — build/docker/deploy команды
    • .gitignore
    • .github/copilot-instructions.md
  • Все import paths заменены: sless/iot/...Nail/IoT/...
  • Все 3 бинарника собираются без ошибок (go build ./...)
  • Запушено в Gitea

Следующие шаги

  • Docker build + push на Docker Hub (naeel/iot-operator)
  • Обновить k8s manifests для нового образа
  • Деплой в кластер
  • E2E тест: создание устройства → MQTT → Kafka → Postgres → API
  • Убрать IoT-код из sless (опционально, после подтверждения что всё работает)

2026-04-12: Замена Kafka → shared-SQS + деплой в новый кластер

Выполнено

  • Создана ветка feature/replace-kafka-with-sqs
  • Документировано решение: doc/decisions/2026-04-12-replace-kafka-with-sqs.md
  • mqtt-bridge (cmd/mqtt-bridge/main.go): Kafka Writer → AWS SDK SQS SendMessage
  • sqs-consumer (cmd/sqs-consumer/main.go): новый — заменяет kafka-consumer, SQS ReceiveMessage → Postgres
  • kafka-consumer (cmd/kafka-consumer/): удалён из кода
  • admin stats (internal/api/handler/iot_admin_stats_handler.go): Kafka lag → SQS GetQueueAttributes
  • handler.go: убрано поле KafkaBrokers
  • iot-operator/main.go: убрана передача KAFKA_BROKERS
  • go.mod: убран segmentio/kafka-go, добавлен aws-sdk-go-v2 (v1.41.5 + sqs v1.42.25)
  • Dockerfile: kafka-consumer → sqs-consumer
  • Makefile: build-consumer → sqs-consumer
  • .gitignore: исправлен баг (паттерны без / игнорировали cmd/ директории)
  • go build ./... проходит на ВМ
  • Коммит и пуш в ветку

Деплой в кластер iot-naeel (новый кластер)

  • shared-SQS: создан tenant iot-service (t-96afe7e9f781f6ca), очередь iot-telemetry
  • Namespace sless создан
  • Secret iot-sqs-credentials создан
  • Secret iot-bridge-credentials создан
  • Postgres: переключён на managed PG17 (тот же что SQS billing)
  • Secret iot-postgres-secret создан (DSN → managed PG)
  • Docker: собран и запушен naeel/iot-operator:v0.2.0 в Docker Hub
  • Deployment YAML: обновлены image на Docker Hub, убраны imagePullSecrets
  • EMQX: задеплоен (emqx.yaml + emqx-ws-ingress.yaml, адаптирован из sless)
  • iot-operator: задеплоен (новый iot-operator.yaml с RBAC)
  • CRD iotdevices.iot.kube5s.ru установлен
  • iot-mqtt-bridge: задеплоен, Running
  • iot-sqs-consumer: задеплоен, Running — подключился к PG и SQS
  • cert-manager: выпускает TLS для iot.kube5s.ru
  • Коммит и пуш

Что работает

  • Все 4 пода Running 1/1
  • iot-operator: controller стартовал, MQTT auth/acl обрабатывает запросы от EMQX
  • sqs-consumer: подключился к Postgres и SQS, polling loop запущен
  • mqtt-bridge: подключён к EMQX и SQS, SQS queue resolved
  • EMQX: MQTT :1883, WS :8083, dashboard :18083

Следующие шаги

  • E2E тест: создание устройства → MQTT → SQS → Postgres → API
  • Нагрузочный тест
  • Мерж ветки в master
  • Убрать IoT-код из sless (опционально)