blumeops/docs/how-to/grafana/upgrade-grafana.md
Erich Blume d05d2fbaff
All checks were successful
Build Container (Nix) / detect (push) Successful in 2s
Build Container / detect (push) Successful in 1s
Build Container (Nix) / build (grafana) (push) Successful in 2s
Build Container / build (grafana) (push) Successful in 7s
C2: Upgrade Grafana to 12.x with Nix container and Kustomize (#260)
## Summary

Mikado chain to upgrade Grafana from 11.4.0 (Helm chart) to 12.x with:
- Home-built Nix container image (`forge.ops.eblu.me/eblume/grafana`)
- Kustomize manifests replacing the Helm chart
- Single-source ArgoCD app

## Chain

Goal: `upgrade-grafana`
Leaves: `build-grafana-container`, `kustomize-grafana-deployment`

Track with: `mise run docs-mikado upgrade-grafana`

## Test plan
- [ ] Container builds successfully via Nix
- [ ] Container pushed to registry
- [ ] Kustomize manifests produce equivalent resources to current Helm
- [ ] Pod runs, UI loads, OIDC works, datasources healthy
- [ ] `mise run services-check` passes

Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/260
2026-02-23 18:07:18 -08:00

1.6 KiB

title requires modified tags
Upgrade Grafana
kustomize-grafana-deployment
build-grafana-container
2026-02-23
how-to
grafana
observability

Upgrade Grafana

Upgraded Grafana from 11.4.0 (Helm chart) to 12.3.3, converting from Helm to Kustomize with a home-built container image.

What Changed

  • Image: docker.io/grafana/grafana:11.4.0registry.ops.eblu.me/blumeops/grafana:v12.3.3
  • Deployment: Helm multi-source (chart + values) → single Kustomize directory
  • ArgoCD app: Simplified to one source pointing at argocd/manifests/grafana/

All existing datasources (prometheus, loki, TeslaMate), dashboard ConfigMaps, and Authentik OIDC were preserved without changes.

Grafana 12 Breaking Changes

None affected us:

  • Angular plugin removal — our dashboards already used React panels
  • Datasource UID format enforcement — our UIDs were already compliant
  • Annotation table migration — completed automatically on the small SQLite DB

How to Repeat

To upgrade Grafana again in the future:

  1. Update CONTAINER_APP_VERSION in containers/grafana/Dockerfile
  2. Build and push via mise run container-build-and-release grafana
  3. Update the image tag in argocd/manifests/grafana/deployment.yaml
  4. Update service-versions.yaml
  5. Sync: argocd app sync grafana

The SQLite PVC is disposable — dashboards come from ConfigMaps and datasources from config.