Commit graph

38 commits

Author SHA1 Message Date
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
0adb2a1f74
reorg 2025-12-16 15:42:47 -06:00
7e4e2250bb
dns update with moving providers 2025-12-16 13:44:58 -06:00
6afa79fe7f
infra updates 2025-12-13 15:38:02 -06:00
0edb581bd5
update 2025-11-16 09:34:06 -06:00
ed29742924
Update kubeconfig with new Tailscale IP for node1
Node1's Tailscale IP changed from 100.102.235.20 to 100.111.4.102 after
reapplying the Tailscale configuration. Updated the kubeconfig server
address to use the new Tailscale IP for remote kubectl access.

Generated with Claude Code https://claude.com/claude-code
2025-10-25 12:00:51 -05: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
d5e3ce88a3
updates 2025-09-18 16:08:26 -05:00
4d376c353f
update 2025-09-12 09:58:37 -05:00
b65a8cb61e
updates 2025-09-09 08:22:03 -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