Commit graph

37 commits

Author SHA1 Message Date
Graham McInitre
a6b99691fb fix(prop): add PrunePropagationPolicy=foreground to ArgoCD sync options 2026-07-21 08:45:15 -05:00
39bedb08d1
renumber infrastructure from 10.0.15.0/24 to 10.0.16.0/22 (hosts in 10.0.19.x)
Proxmox: node1-3 → 10.0.19.101-103
Talos cp1-3 → 10.0.19.1-3, workers → 10.0.19.4-6
K8s endpoint → VIP https://10.0.19.10:6443
Ansible: prom → 10.0.19.31, db → 10.0.19.30
Talos: added VIP block to controlplane.yaml base config
Promtail: Loki URL → 10.0.19.31
Docs: all references updated, talos4 removed
2026-07-18 08:28:47 -05:00
b9a52c258a
updates 2026-06-19 09:33:27 -05:00
36eb41736f
promtail: drop namespace.yaml (owned by node-exporter app) 2026-05-11 10:28:01 -05:00
6d173d9fcb
loki: add log aggregation on prom + promtail daemonset in home-cluster
- new ansible loki role installs loki 3.5.5 on prometheus_servers as a
  systemd unit (single-binary, filesystem store, 30d retention)
- open tcp/3100 on prom.w5isp.com to 10.0.0.0/16
- grafana: provision loki datasource at http://127.0.0.1:3100
- k8s: promtail daemonset + rbac in monitoring namespace, ships pod logs
  to http://10.0.15.31:3100 with cluster=home-cluster label
- argocd: Application points at home/cluster/promtail
2026-05-11 10:24:30 -05:00
04b3855874
k8s: add Starlink dish prometheus exporter + dashboard
joshuasing/starlink_exporter 0.9.0 (Docker Hub; ghcr.io lags behind
upstream releases). Targets the dish's gRPC management interface at
192.168.100.1:9200, reachable from cluster pods via 10.0.15.254 while
the Starlink router is in bypass mode.

Grafana dashboard "Starlink" covers throughput, PoP ping latency/drop,
obstruction state + 24h total, GPS lock, and dish position/info — synced
to /var/lib/grafana/dashboards/ by the existing grafana role.
2026-05-10 18:11:21 -05:00
8466e4590f
tmobile-exporter: switch to stock json_exporter + nginx sidecar
Replaces the vendored Go exporter with two pre-built upstream images:
- quay.io/prometheuscommunity/json-exporter:v0.7.0 maps the gateway JSON
  into prometheus metrics via JSONPath. The G4AR keys signal blocks as
  "5g" / "4g" (digit-prefixed), which the k8s client-go JSONPath dialect
  only reaches via bracket-with-single-quote notation.
- nginxinc/nginx-unprivileged:1.27-alpine-slim sidecar rewrites
  GET /metrics → GET /probe?module=tmhi&target=http://192.168.12.1/...
  so the existing kubernetes-services scrape job picks it up over the
  apiserver proxy with no Prometheus-side config changes.

Avoiding caddy here: its binary carries cap_net_bind_service file caps,
which the kernel refuses to exec under no_new_privs as a non-root user.

Dashboard "Gateway up" panel now reads up{service="tmobile-exporter"}
(Prometheus's built-in scrape-success gauge) since json_exporter's
/probe endpoint does not emit probe_success.
2026-05-10 17:57:13 -05:00
f2d6dbd271
tmobile-exporter: vendor minimal Go exporter that handles G4AR quirks
Replaces tpaulus/tmobile-internet-exporter upstream image, which crashes
on every scrape against the G4AR because the gateway returns `bars` as a
JSON float (`4.0`) and the upstream struct types it as int.

The vendored exporter:
- decodes all radio numerics as float64 so `4.0` round-trips
- treats the 4g / 5g signal blocks as optional (the G4AR omits 4g)
- evicts stale (type, band) series when a band disappears between scrapes
- adds a scrape_errors_total counter and /healthz endpoint

Deployment now pulls git.mcintire.me/graham/tmobile-exporter:v1 via the
forgejo-registry imagePullSecret (matching the convention used by aprs,
prop, towerops). Build + push the image before Argo can pull it; the
imagePullSecret must also be copied into the monitoring namespace.
2026-05-10 17:42:25 -05:00
ebde695bfd
k8s: add T-Mobile Home Internet gateway prometheus exporter
Deploys tpaulus/tmobile-internet-exporter against the G4AR at
192.168.12.1, picked up by the existing kubernetes-services scrape
job via prometheus.io/scrape annotations on the Service.
2026-05-10 17:30:19 -05:00
e1274bc63b
prom: feed home-cluster metrics + provision standard k8s dashboards
Cluster-side:
- Deploy kube-state-metrics (kube-system) for cluster-state series.
- Deploy node-exporter DaemonSet on all 7 nodes via the new monitoring ns
  (privileged PSS, hostNetwork, read-only host mounts).
- Both managed by ArgoCD apps under home/cluster/argocd/apps/.

Prometheus-side:
- Replace direct pod-IP scraping (which can't reach the 10.244.0.0/16 pod
  network from outside the cluster) with API-server-proxy scraping for
  both Services and Pods. Now one target per pod, all healthy.
- Extend external Prometheus RBAC with services/proxy + pods/proxy.

Grafana-side:
- Add file-based dashboard provisioner; ship 5 standard dashboards
  (Node Exporter Full, k8s cluster-via-prometheus, k8s all-in-one,
  k8s monitoring, Prometheus 2.0 overview).

prom.w5isp.com:3000 now shows live data for all 7 cluster nodes plus
the prom host itself.
2026-05-08 10:08:32 -05:00
20896be049
gridmap: move ArgoCD source + image-updater to codeberg 2026-05-05 12:02:52 -05:00
04d0f76a08
aprs: move ArgoCD source + image-updater to codeberg 2026-05-05 11:28:06 -05:00
2cd8169e94
towerops: move ArgoCD source + image-updater to codeberg
The towerops-web repo got renamed to codeberg.org/gmcintire/towerops
and its container image follows the same rename
(codeberg.org/gmcintire/towerops). Application source repo and
image-updater registry list updated.
2026-05-05 10:58:35 -05:00
abb991e3c6
prop: move ArgoCD source + image-updater to codeberg
The prop and prop-grid-rs container images now live on
codeberg.org/gmcintire/* (see prop repo commit 8a9c0ba6 for the
workflow flip). Application source repo and image-updater registry
list follow.

Cluster-side state still required for this to roll out, applied
out-of-band via kubectl:

- Secret prop/forgejo-registry — dockerconfigjson with codeberg.org
  auth (also keeps git.mcintire.me auth during the transition).
- Secret argocd/forgejo-registry — same shape, used by the
  argocd-image-updater registry config.
- Secret argocd/codeberg-credentials-gmcintire (label
  argocd.argoproj.io/secret-type=repo-creds) — credentials template
  matching url=https://codeberg.org/gmcintire so future codeberg
  repos under that owner pick up auth automatically.
- ConfigMap argocd/argocd-image-updater-config — registries.conf
  extended with codeberg.org entry referencing the new pull secret.
2026-05-05 10:45:41 -05:00
fea69f8a51
updates 2026-04-29 15:03:17 -05:00
82630fb98b
add argocd-image-updater with forgejo registry config
annotates the 4 Applications so image-updater scans git.mcintire.me
on a 2min loop and writes new tags to spec.source.kustomize.images
(no git commits, no CI sed-and-bump).
2026-04-29 10:38:05 -05:00
ae5ceebf44
migrate from flux to argocd
- install argocd at home/cluster/argocd/, app-of-apps via root-app.yaml
- 4 child Applications: aprs, gridmap, prop, towerops
- argo.w5isp.com via cloudflared tunnel (CNAME + ingress_rule in tofu)
- update CLAUDE.md: drop K3s/Wavelog/n8n/Node-RED, document GitOps + ArgoCD
2026-04-29 10:26:33 -05:00
b3bb484bf0
Upgrade Talos to v1.12.4, fix DNS and tailscale config
- Upgrade all nodes from v1.12.1/v1.12.2 to v1.12.4 installer image
- Set explicit nameservers (9.9.9.9, 149.112.112.112, 1.1.1.1) on
  workers to replace unreliable DHCP-provided resolver at 10.0.15.254
- Fix talos-worker2 missing ExtensionServiceConfig for ext-tailscale
  which was causing node reboots every ~35 minutes
- Update tailscale.patch.yaml with working auth key
2026-02-18 12:08:32 -06:00
a1e787093e
update 2026-01-30 17:27:52 -06:00
2dd9d44bf9
update and remove dns from tf 2026-01-10 16:00:02 -06:00
e280a40c8f
cleanup and reorg 2026-01-08 16:29:16 -06:00
ab1afaebf0
Add X-Forwarded-Proto header to APRS IngressRoute
- Ensures Phoenix knows the original request was HTTPS
- Complements externalTrafficPolicy:Local on Traefik service
- Service was patched with: kubectl patch service traefik -n traefik -p '{"spec":{"externalTrafficPolicy":"Local"}}'
- This preserves real client IPs for geolocation
2026-01-03 09:07:59 -06:00
ea76ca57a3
updates 2025-10-24 17:04:01 -05:00
63968031db
update for latest k8s deployment 2025-10-19 14:22:39 -05:00
a512babb77
update for new talos k8s 2025-10-18 18:02:09 -05:00
4354a6b120
remove adguard 2025-10-18 10:32:29 -05:00
153f43ab61
remove forgejo 2025-10-18 10:31:45 -05:00
ef8b473681
updates 2025-10-14 14:35:33 -05:00
58e1c137d9
enable k3s auto upgrades 2025-10-12 10:11:13 -05:00
b1999d4831
cleanup 2025-10-12 10:07:12 -05:00
f7f825a251
updates 2025-10-06 09:17:32 -05:00
7ac6cae23d
updates 2025-10-05 13:12:28 -05:00
8e4a9830bc
update 2025-10-01 17:06:51 -05:00
4d376c353f
update 2025-09-12 09:58:37 -05:00
1d5607da71
updates 2025-09-08 10:13:45 -05:00
27bb17d366
update 2025-09-06 12:46:26 -05:00
ffe9a59269
updates 2025-09-06 10:55:13 -05:00