95c5d71222
## Why Deploys Grafana in-cluster (observability project) via the grafana-operator, mirroring the puppet Grafana but modernised — **CNPG** for state, **Authentik OIDC** for auth — and ports the live datasource + dashboards in as CRs. Depends on: grafana-operator (#235, merged), grafana schemas (#236, merged), Authentik OIDC (terraform-authentik #2), Vault seeds (done), and `^grafana/` image proxy (terraform-artifactapi #5). ## Changes (`apps/base/grafana`) - **CNPG** postgres Cluster + rw Pooler (db `grafana`); **VaultAuth** + **VaultStaticSecrets** pulling `postgres`/`oauth` credentials from `kv/kubernetes/namespace/grafana/default/*`. - **Grafana CR**: postgres backend via the pooler; Authentik `generic_oauth` (client id/secret from the Vault-synced secret, openid/email/profile scopes, group→role mapping); `root_url` grafana.k8s.syd1.au.unkin.net. - **1 GrafanaDatasource** — k8s VictoriaMetrics via the operator `vmselect-main` service; reuses the previous default datasource uid so the imported dashboards resolve unedited. - **13 GrafanaDashboards** (gzipJson) exported from the current grafana. - **Gateway API** (traefik-internal) + HTTPRoute for grafana.k8s.syd1.au.unkin.net. - Registered in the observability ApplicationSet + project. ## Review notes - OAuth `role_attribute_path` maps Authentik group `grafana-admins` → Admin, else Viewer — **confirm the group name**. - `database.ssl_mode: require` against the CNPG pooler — adjust if the pooler isn't serving TLS. - The `VictoriaLogs - cluster` dashboard has no in-cluster logs datasource yet (no VictoriaLogs in k8s) — included for completeness, will be empty until one exists. - `make kubeconform` clean (24 resources, validated against the strict grafana schemas). Reviewed-on: #238 Co-authored-by: Ben Vincent <ben@unkin.net> Co-committed-by: Ben Vincent <ben@unkin.net>
23 lines
630 B
YAML
23 lines
630 B
YAML
---
|
|
apiVersion: grafana.integreatly.org/v1beta1
|
|
kind: GrafanaDatasource
|
|
metadata:
|
|
name: victoriametrics
|
|
namespace: grafana
|
|
spec:
|
|
instanceSelector:
|
|
matchLabels:
|
|
dashboards: "grafana"
|
|
# uid matches the previous default datasource so the imported dashboards
|
|
# (which hardcode this uid or use the default) resolve without edits.
|
|
datasource:
|
|
name: "VictoriaMetrics"
|
|
type: "prometheus"
|
|
uid: "det2y55dac4jkc"
|
|
access: "proxy"
|
|
url: "http://vmselect-main.observability.svc.cluster.local:8481/select/0/prometheus"
|
|
isDefault: true
|
|
jsonData:
|
|
timeInterval: "15s"
|
|
httpMethod: "POST"
|