Компоненты: - iot-operator: controller-manager (IoTDevice CRD) + REST API (порт 9090) - mqtt-bridge: MQTT (EMQX) → Kafka bridge - kafka-consumer: Kafka → Postgres pipeline Модуль: gitea.services.ngcloud.ru/Nail/IoT Все 3 бинарника собираются, import paths адаптированы.
72 lines
2.7 KiB
YAML
72 lines
2.7 KiB
YAML
# Создано: 2026-04-04
|
|
# Изменено: 2026-04-06 (MQTT→Kafka: убран RABBITMQ_URL, добавлен KAFKA_BROKERS, v0.1.67)
|
|
# Deployment iot-mqtt-bridge — MQTT→Kafka мост для IoT.
|
|
#
|
|
# Получает MQTT сообщения от EMQX (подписка на "+/telemetry/+")
|
|
# и публикует в Kafka топик "iot.telemetry" (ключ = namespace).
|
|
#
|
|
# Credentials для MQTT подключения берутся из Secret iot-bridge-credentials.
|
|
# Этот Secret нужно создать вручную ДО деплоя:
|
|
#
|
|
# # 1. Создать IoTDevice для bridge через API:
|
|
# curl -X POST .../v1/namespaces/sless-bridge/iot/devices \
|
|
# -d '{"name":"bridge","device_id":"bridge","enabled":true}'
|
|
#
|
|
# # 2. Получить credentials:
|
|
# MQTT_USERNAME=$(kubectl get secret iot-bridge -n sless-bridge -o jsonpath='{.data.mqtt-username}' | base64 -d)
|
|
# MQTT_PASSWORD=$(kubectl get secret iot-bridge -n sless-bridge -o jsonpath='{.data.mqtt-password}' | base64 -d)
|
|
#
|
|
# # 3. Создать Secret для bridge Deployment (один раз):
|
|
# kubectl create secret generic iot-bridge-credentials -n sless \
|
|
# --from-literal=MQTT_USERNAME="$MQTT_USERNAME" \
|
|
# --from-literal=MQTT_PASSWORD="$MQTT_PASSWORD"
|
|
#
|
|
# Применение: kubectl apply -f deployments/k8s/iot-mqtt-bridge.yaml
|
|
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: iot-mqtt-bridge
|
|
namespace: sless
|
|
labels:
|
|
app: iot-mqtt-bridge
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: iot-mqtt-bridge
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: iot-mqtt-bridge
|
|
spec:
|
|
containers:
|
|
- name: mqtt-bridge
|
|
# Тот же образ что и оператор — оба бинаря в одном слое (manager + iot-mqtt-bridge).
|
|
# При смене версии оператора — менять тег и здесь.
|
|
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:v0.1.69
|
|
imagePullPolicy: Always
|
|
command: ["/iot-mqtt-bridge"]
|
|
env:
|
|
- name: MQTT_BROKER_URL
|
|
value: "tcp://emqx.sless.svc:1883"
|
|
- name: KAFKA_BROKERS
|
|
value: "kafka.sless.svc.cluster.local:9092"
|
|
envFrom:
|
|
- secretRef:
|
|
name: iot-bridge-credentials
|
|
# IOT_PG_DSN — сохранение телеметрии в Postgres (опционально)
|
|
- secretRef:
|
|
name: iot-postgres-secret
|
|
optional: true
|
|
resources:
|
|
requests:
|
|
memory: "32Mi"
|
|
cpu: "25m"
|
|
limits:
|
|
memory: "64Mi"
|
|
cpu: "100m"
|
|
imagePullSecrets:
|
|
- name: sless-registry-auth
|