Kustomize Grafana Deployment

Grafana is deployed via plain Kustomize manifests in argocd/manifests/grafana-ringtail/, replacing the previous Helm chart. Dashboards, the Tailscale ingress, and the ExternalSecrets live in the companion argocd/manifests/grafana-config-ringtail/ dir (the two dirs are separate ArgoCD apps: grafana-ringtail and grafana-config-ringtail).

Manifest Structure

FilePurpose
kustomization.yamlResource list + configMapGenerator for config files
deployment.yamlGrafana container + home-built k8s-sidecar for dashboards
service.yamlClusterIP on port 80 → 3000
pvc.yaml1Gi SQLite storage
grafana.iniGrafana server configuration (fed to configMapGenerator)
datasources.yamlDatasource provisioning (fed to configMapGenerator)
alerting.yamlAlerting config (fed to configMapGenerator)
provider.yamlDashboard provider config (fed to configMapGenerator)
serviceaccount.yamlService account
rbac.yamlClusterRole/RoleBinding for sidecar ConfigMap access

Key Details

  • PVC name must remain grafana — changing it would create a new volume and lose the SQLite DB
  • Sidecar watches ConfigMaps with label grafana_dashboard=1 and reloads dashboards via the Grafana API
  • Secrets come from ExternalSecrets (grafana-admin, grafana-authentik-oauth, grafana-teslamate-datasource) managed by the grafana-config-ringtail ArgoCD app