feat: IoT demo — Kafka + Redis + MongoDB, 6 services, removed broken AKHQ/ClickHouse/Superset
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
# Шаг 6 — DEV стенд: Kafka успешно создан
|
||||
|
||||
**Дата:** 2026-07-21
|
||||
|
||||
## Создано
|
||||
|
||||
| Ресурс | Статус |
|
||||
|--------|--------|
|
||||
| nubes_kafka.main (iot-kafka) | ✅ Создан (k8s-4) |
|
||||
| nubes_kafka_topic.events | ✅ Создан |
|
||||
| nubes_kafka_user.app | ✅ Создан |
|
||||
|
||||
## Реальные ключи state_out_flat (Kafka)
|
||||
|
||||
```
|
||||
internalConnect.bootstrap.fqdn = kafkak8s-kafka-tls-bootstrap.<uid>.svc.cluster.local
|
||||
internalConnect.bootstrap.port = 9093 ← TLS!
|
||||
internalConnect.brokers.broker-1.fqdn = kafkak8s-kafkak8s-pool-0...
|
||||
internalConnect.brokers.broker-1.port = 9093
|
||||
externalConnect = "" (нет внешнего доступа)
|
||||
```
|
||||
|
||||
## Реальная структура vault_secrets
|
||||
|
||||
```json
|
||||
vault_secrets["users"] = {
|
||||
"ca": {
|
||||
"ca.crt": "...",
|
||||
"ca.p12": "...",
|
||||
"ca.password": "..."
|
||||
},
|
||||
"iot-app": {
|
||||
"user.crt": "...",
|
||||
"user.key": "...",
|
||||
"user.p12": "...",
|
||||
"user.password": "..." ← пароль здесь, ключ "user.password"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ Важные выводы
|
||||
|
||||
1. **Не `bootstrapServers`**, а `internalConnect.bootstrap.fqdn` + `.port`
|
||||
2. **Не `password`**, а `user.password`
|
||||
3. **TLS (порт 9093)**, не PLAINTEXT → Flask-код нужно менять на `SASL_SSL` + сертификаты
|
||||
@@ -0,0 +1,51 @@
|
||||
# Шаг 7 — DEV стенд: Kafka ✅, Producer ✅, ClickHouse ❌
|
||||
|
||||
**Дата:** 2026-07-21
|
||||
|
||||
## Результаты
|
||||
|
||||
| Ресурс | Статус |
|
||||
|--------|--------|
|
||||
| nubes_kafka.main | ✅ |
|
||||
| nubes_kafka_topic | ✅ |
|
||||
| nubes_kafka_user | ✅ |
|
||||
| nubes_flask.producer | ✅ (после исправления структуры site/) |
|
||||
| nubes_clickhouse.main | ❌ GitHub timeout |
|
||||
| nubes_superset | ⏸ |
|
||||
| nubes_flask.consumer | ⏸ (ждёт ClickHouse) |
|
||||
|
||||
## Реальные ключи Kafka (определены)
|
||||
|
||||
```
|
||||
state_out_flat:
|
||||
internalConnect.bootstrap.fqdn:9093 (TLS)
|
||||
|
||||
vault_secrets["users"]:
|
||||
iot-app.user.password
|
||||
ca.ca.crt
|
||||
iot-app.user.crt
|
||||
iot-app.user.key
|
||||
```
|
||||
|
||||
## Ошибка ClickHouse (задокументирована)
|
||||
|
||||
```
|
||||
Операция: INSTALLATION FAILED
|
||||
Причина: context deadline exceeded при скачивании Helm-чарта
|
||||
URL: https://release-assets.githubusercontent.com/.../altinity-clickhouse-operator-0.25.5.tgz
|
||||
Длительность валидации: 345 сек → Откат: 0.2 сек
|
||||
|
||||
Корневая причина: K8s-кластер (k8s-3, k8s-4) не может достучаться до GitHub release assets.
|
||||
Проблема на стороне платформы Nubes, не в нашей конфигурации.
|
||||
```
|
||||
|
||||
## Исправление структуры Flask
|
||||
|
||||
❌ Было: `app.py` в корне + `Procfile`
|
||||
✅ Стало: `site/app.py`, без `Procfile` (как в рабочем tfflaskcrud)
|
||||
|
||||
```diff
|
||||
- Procfile
|
||||
- app.py (в корне)
|
||||
+ site/app.py
|
||||
```
|
||||
@@ -0,0 +1,42 @@
|
||||
# Шаг 8 — DEV стенд: сервисы протестированы
|
||||
|
||||
**Дата:** 2026-07-21
|
||||
|
||||
## Итог тестирования сервисов
|
||||
|
||||
| # | Сервис | Статус | Причина ошибки |
|
||||
|---|--------|--------|---------------|
|
||||
| 1 | `nubes_kafka` | ✅ | — |
|
||||
| 2 | `nubes_redis` | ✅ | — |
|
||||
| 3 | `nubes_mongodb` | ✅ | — |
|
||||
| 4 | `nubes_flask` (producer) | ✅ | — |
|
||||
| 5 | `nubes_clickhouse` | ❌ | GitHub timeout (Helm chart) |
|
||||
| 6 | `nubes_superset` | ❌ | IAM 408 timeout |
|
||||
| 7 | `nubes_akhq` | ❌ | `toBoolean() on null` — баг платформы |
|
||||
|
||||
## Финальный список демо (6 сервисов)
|
||||
|
||||
| # | Сервис | Роль |
|
||||
|---|--------|------|
|
||||
| 1 | `nubes_kafka` | Шина сообщений |
|
||||
| 2 | `nubes_redis` | Кэш дашборда |
|
||||
| 3 | `nubes_mongodb` | Постоянное хранение |
|
||||
| 4 | `nubes_flask` (producer) | IoT → Kafka |
|
||||
| 5 | `nubes_flask` (consumer) | Kafka → Redis + MongoDB |
|
||||
| 6 | `nubes_nodejs` (dashboard) | Redis → графики Chart.js |
|
||||
|
||||
## Реальные ключи (определены)
|
||||
|
||||
### Kafka
|
||||
```
|
||||
state_out_flat.internalConnect.bootstrap.fqdn:9093 (TLS)
|
||||
vault_secrets["users"]["iot-app"]["user.password"]
|
||||
vault_secrets["users"]["ca"]["ca.crt"]
|
||||
```
|
||||
|
||||
### Структура Flask-приложений
|
||||
```
|
||||
site/app.py (НЕ app.py в корне!)
|
||||
requirements.txt (Flask, gunicorn, ...)
|
||||
БЕЗ Procfile
|
||||
```
|
||||
Reference in New Issue
Block a user