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

49 lines
1.6 KiB
Markdown

---
title: Upgrade Grafana
requires:
- kustomize-grafana-deployment
- build-grafana-container
modified: 2026-02-23
tags:
- 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.0``registry.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.
## Related
- [[grafana]] — Service reference card
- [[build-grafana-container]] — Building the container image
- [[kustomize-grafana-deployment]] — Kustomize manifest structure