Files
homelab-gitops/apps/mumble/README.md
T

59 lines
3.0 KiB
Markdown

# Mumble
Argo CD deploys Mumble and its CloudNativePG cluster in the `mumble` namespace.
The published `brunner.ninja/mumble` chart owns the workload, TCP/UDP Services,
probes, configuration rendering, and optional PostgreSQL modes. GitOps selects
the chart version and supplies this cluster's addresses, registration details,
Secret names, and PostgreSQL endpoint.
## PostgreSQL and credentials
`mumble-postgresql` is a one-instance CloudNativePG cluster using PostgreSQL
18.6 and an 8 GiB Ceph RBD claim. Mumble connects to
`mumble-postgresql-rw.mumble.svc.cluster.local`. The `mumble-secrets` Secret in
this namespace supplies both Mumble's application credentials and the
CloudNativePG bootstrap username/password. It was copied from the prior
`default/mumble-secrets` by the guarded source-repository helper; neither
Secret's values are stored in this public repository. The TLS Secret
`brunner-ninja-tls` is produced by the namespace-local Certificate and
`letsencrypt-dns` ClusterIssuer.
The new PVC `mumble-postgresql-1` is UID
`c979de80-a2bf-41ae-91a6-96034ee9277d`, bound to PV
`pvc-c979de80-a2bf-41ae-91a6-96034ee9277d`. The old default-namespace claim
remains separately bound and untouched for rollback.
## Networking
The LoadBalancer Service exposes TCP/UDP 64738 and retains the MikroTik
operator annotations; Kubernetes dynamically allocated `192.168.0.14` after
the move. Do not pin that address. The chart's `mumble-funkfeuer` Service keeps
the direct addresses `10.12.4.170` and `192.168.0.2`. Both Services select the
Mumble Pod in this namespace.
## Migration and recovery
On 2026-10-25, the old Mumble Deployment was stopped before the final database
dump. The final custom-format dump is at
`/mnt/backup/mumble-migration-20261025T065619Z/final-cutover.dump` on
`arschrock` (mode 0600), and its archive was validated with `pg_restore --list`.
All 14 application table counts matched after restore, including 34 users,
18 channels, and 6,536 log rows. The server was then started against the new
database. The pre-cutover snapshot is in the same directory.
The first complete scheduled-format backup was also verified on 2026-10-25:
`/mnt/backup/kubernetes/postgresql/mumble/2026-10-25T06-59-24Z/`. The Job ran
on `arschrock`, wrote a `complete` marker, and its database archive passed
`pg_restore --list`. The daily backup CronJob refuses to write unless the
`/mnt/backup` host mount is bcachefs.
The old `default/data-mumble-postgresql-0` PVC is retained for rollback (UID
`6d0c591f-9aae-4932-8f94-ebf5ec1032a8`, PV
`pvc-6d0c591f-9aae-4932-8f94-ebf5ec1032a8`). Its StatefulSet is retired after
the new cluster and backup were verified; do not delete this PVC or its PV
without an explicit recovery decision. The old `default/mumble-secrets` and
`default/mumble-postgres` Secrets are likewise retained as cold rollback
material. To roll back, quiesce the new Mumble writer, preserve a fresh dump of
new writes, then restore/reconnect the old database before starting the old
server. Never run both Mumble servers as writers at once.