Remove unused Mosquitto MQTT broker from ringtail

Mosquitto has been dormant since frigate-notify switched from MQTT to
webapi polling (529ba10). Tear down live infra (ArgoCD app, namespace)
and remove all manifests, service-versions entry, services-check, and
doc references.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Erich Blume 2026-03-11 18:37:31 -07:00
commit 40f1568088
18 changed files with 13 additions and 120 deletions

View file

@ -74,7 +74,7 @@ encounter wiki-links (`[[like-this]]`) it is referring to docs/ cards.
### Kubernetes (ArgoCD)
Most services run in minikube on indri via ArgoCD (app-of-apps, manual sync). GPU workloads (Frigate, Mosquitto, ntfy) run on ringtail's k3s cluster, also managed by ArgoCD.
Most services run in minikube on indri via ArgoCD (app-of-apps, manual sync). GPU workloads (Frigate, ntfy) run on ringtail's k3s cluster, also managed by ArgoCD.
**PR workflow:**
1. Create branch, modify `argocd/manifests/<service>/`

View file

@ -1,18 +0,0 @@
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: mqtt
namespace: argocd
spec:
project: default
source:
repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/blumeops.git
targetRevision: main
path: argocd/manifests/mosquitto
destination:
server: https://ringtail.tail8d86e.ts.net:6443
namespace: mqtt
syncPolicy:
syncOptions:
- CreateNamespace=true

View file

@ -1,10 +1,6 @@
database:
path: /db/frigate.db
mqtt:
host: mosquitto.mqtt.svc.cluster.local
port: 1883
go2rtc:
streams:
# GableCam IP is reserved in UX7 DHCP config

View file

@ -6,8 +6,6 @@ frigate:
enabled: true
interval: 15
mqtt:
enabled: false
alerts:
general:

View file

@ -1,47 +0,0 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mosquitto
namespace: mqtt
spec:
replicas: 1
selector:
matchLabels:
app: mosquitto
template:
metadata:
labels:
app: mosquitto
spec:
containers:
- name: mosquitto
image: eclipse-mosquitto:kustomized
ports:
- containerPort: 1883
name: mqtt
volumeMounts:
- name: config
mountPath: /mosquitto/config/mosquitto.conf
subPath: mosquitto.conf
resources:
requests:
memory: "32Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
livenessProbe:
tcpSocket:
port: 1883
initialDelaySeconds: 5
periodSeconds: 30
readinessProbe:
tcpSocket:
port: 1883
initialDelaySeconds: 3
periodSeconds: 10
volumes:
- name: config
configMap:
name: mosquitto-config

View file

@ -1,14 +0,0 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: mqtt
resources:
- deployment.yaml
- service.yaml
images:
- name: eclipse-mosquitto
newTag: "2.0.22"
configMapGenerator:
- name: mosquitto-config
files:
- mosquitto.conf

View file

@ -1,3 +0,0 @@
listener 1883
allow_anonymous true
persistence false

View file

@ -1,13 +0,0 @@
---
apiVersion: v1
kind: Service
metadata:
name: mosquitto
namespace: mqtt
spec:
selector:
app: mosquitto
ports:
- name: mqtt
port: 1883
targetPort: 1883

View file

@ -0,0 +1 @@
Remove Mosquitto (MQTT broker) — unused since frigate-notify switched to webapi polling. Deleted ArgoCD app, k8s manifests, namespace, and updated all docs.

View file

@ -39,7 +39,7 @@ Three always-on devices form the infrastructure backbone:
```
- **[[indri]]** runs most services (native and containerized)
- **[[ringtail]]** runs GPU workloads (Frigate NVR) and related services (MQTT, ntfy)
- **[[ringtail]]** runs GPU workloads (Frigate NVR) and related services (ntfy)
- **[[sifaka]]** provides bulk storage and backup targets
- **[[gilbert]]** is the development workstation
@ -73,7 +73,7 @@ Services run across three compute targets:
**Minikube on indri (ArgoCD)** — most services run in minikube, managed via ArgoCD from `argocd/manifests/`. See [[apps]] for the application registry.
**K3s on ringtail (ArgoCD)** — GPU workloads and related services run on [[ringtail]]'s single-node k3s cluster. Frigate NVR uses the RTX 4080 for object detection; Mosquitto and ntfy support its alerting pipeline.
**K3s on ringtail (ArgoCD)** — GPU workloads and related services run on [[ringtail]]'s single-node k3s cluster. Frigate NVR uses the RTX 4080 for object detection; ntfy supports its alerting pipeline.
## Data Flow

View file

@ -32,7 +32,7 @@ Primary BlumeOps server. Mac Mini M1 (2020).
- [[caddy]] - Reverse proxy for `*.ops.eblu.me`
**Kubernetes (via minikube):**
- [[apps|Most k8s applications]] (Frigate, Mosquitto, ntfy migrated to [[ringtail]] k3s)
- [[apps|Most k8s applications]] (Frigate, ntfy migrated to [[ringtail]] k3s)
**GUI Applications (manual start required):**
- Docker Desktop - Container runtime for minikube

View file

@ -66,8 +66,7 @@ Sync order: `1password-connect-ringtail` -> `external-secrets-crds-ringtail` ->
| Workload | Namespace | Notes |
|----------|-----------|-------|
| [[frigate]] | `frigate` | NVR with GPU-accelerated detection (RTX 4080) |
| [[frigate]]-notify | `frigate` | MQTT-to-ntfy alert bridge |
| Mosquitto | `mqtt` | MQTT broker for Frigate events |
| [[frigate]]-notify | `frigate` | Webapi-to-ntfy alert bridge |
| [[authentik]] | `authentik` | OIDC identity provider |
| [[ntfy]] | `ntfy` | Push notification server |
| [[ollama]] | `ollama` | LLM inference with GPU (RTX 4080) |

View file

@ -7,7 +7,7 @@ tags:
# Kubernetes Cluster
BlumeOps runs two Kubernetes clusters: a Minikube cluster on [[indri]] (most services) and a k3s cluster on [[ringtail]] (GPU workloads, MQTT, notifications). Both are managed by [[argocd]] on indri.
BlumeOps runs two Kubernetes clusters: a Minikube cluster on [[indri]] (most services) and a k3s cluster on [[ringtail]] (GPU workloads, notifications). Both are managed by [[argocd]] on indri.
## Cluster Specifications
@ -41,7 +41,7 @@ Single-node k3s cluster for workloads requiring amd64 or GPU access. See [[ringt
|----------|-------|
| **Context** | `k3s-ringtail` |
| **API Server** | `https://ringtail.tail8d86e.ts.net:6443` |
| **Workloads** | Frigate (GPU), Mosquitto, ntfy, frigate-notify, nvidia-device-plugin |
| **Workloads** | Frigate (GPU), ntfy, frigate-notify, nvidia-device-plugin |
## Related

View file

@ -34,7 +34,7 @@ Frigate pod (ringtail k3s)
├── /media/frigate — NFS recordings (sifaka)
└── /db — SQLite (local PVC)
└──→ MQTT (Mosquitto) → frigate-notify → ntfy → mobile
└──→ frigate-notify (webapi poll) → ntfy → mobile
```
## Cameras
@ -70,7 +70,7 @@ Two zones are configured: `driveway_entrance` (triggers review alerts for person
## Alerting (frigate-notify)
A separate **frigate-notify** pod (`ghcr.io/0x2142/frigate-notify:v0.3.5`) subscribes to Frigate's MQTT events via Mosquitto and pushes alerts to [[ntfy]] on the `frigate-alerts` topic. Alert messages include action buttons linking back to the Frigate review UI.
A separate **frigate-notify** pod polls Frigate's webapi every 15 seconds for detection events and pushes alerts to [[ntfy]] on the `frigate-alerts` topic. Alert messages include action buttons linking back to the Frigate review UI.
## Related

View file

@ -29,10 +29,10 @@ The upstream relay (`ntfy.sh`) is configured so mobile app clients can receive p
## Producers
Currently the only producer is **frigate-notify**, which publishes camera detection alerts (person, vehicle, animal) from [[frigate|Frigate]] via MQTT to ntfy:
Currently the only producer is **frigate-notify**, which polls Frigate's webapi for camera detection alerts (person, vehicle, animal) and forwards them to ntfy:
```
Frigate → MQTT (Mosquitto) → frigate-notify → ntfy → mobile clients
Frigate → frigate-notify (webapi polling) → ntfy → mobile clients
```
The frigate-notify config points to ntfy's cluster-internal address:

View file

@ -41,7 +41,7 @@ Distributed tracing backend for BlumeOps infrastructure. Receives traces via OTL
| [[ollama]] | HTTP REST | Same (model inference latency) |
| [[immich]] | HTTP REST | Same |
Beyla auto-instruments HTTP services via eBPF kernel hooks — no code changes needed. MQTT (Mosquitto) is not instrumented (no eBPF parser for MQTT).
Beyla auto-instruments HTTP services via eBPF kernel hooks — no code changes needed.
**Future: SDK instrumentation**
Services with OTel SDK support (e.g., Hermes) can send traces directly to the OTLP endpoint for deeper internal spans (DB queries, business logic) alongside eBPF envelope traces.

View file

@ -95,7 +95,6 @@ check_service "forgejo-runner" "ssh ringtail 'systemctl is-active gitea-runner-n
echo ""
echo "Ringtail k3s pods:"
check_service "mosquitto" "kubectl --context=k3s-ringtail -n mqtt get pods -l app=mosquitto -o jsonpath='{.items[0].status.phase}' | grep -q Running"
check_service "ntfy" "kubectl --context=k3s-ringtail -n ntfy get pods -l app=ntfy -o jsonpath='{.items[0].status.phase}' | grep -q Running"
check_service "authentik" "kubectl --context=k3s-ringtail -n authentik get pods -l component=server -o jsonpath='{.items[0].status.phase}' | grep -q Running"
check_service "frigate" "kubectl --context=k3s-ringtail -n frigate get pods -l app=frigate -o jsonpath='{.items[0].status.phase}' | grep -q Running"

View file

@ -30,11 +30,6 @@ services:
current-version: "v2.18.0"
upstream-source: https://github.com/kubernetes/kube-state-metrics/releases
- name: mosquitto
type: argocd
last-reviewed: 2026-02-16
current-version: "2.0.22"
upstream-source: https://github.com/eclipse/mosquitto/releases
- name: ntfy
type: argocd