kube-prometheus-stack setup
Provides Prometheus (metrics) and Grafana (dashboards) for the cluster, including the Domino Workspace Grafana dashboards that ship with the Domino Helm chart.
Requires cert-manager if Grafana is exposed over HTTPS through APISIX.
Install
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
Create kube-prometheus-stack-values.yaml with the following content:
crds:
enabled: true
prometheus:
prometheusSpec:
# Discover ServiceMonitors from every chart, not just this Helm release's own
serviceMonitorSelectorNilUsesHelmValues: false
serviceMonitorSelector: {}
serviceMonitorNamespaceSelector: {}
helm upgrade --install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
--namespace kube-prometheus-stack \
--create-namespace \
-f kube-prometheus-stack-values.yaml
serviceMonitorSelectorNilUsesHelmValues=false is required so Prometheus picks up ServiceMonitors created by other charts (such as Domino's, which uses the release label kube-prometheus-stack by default — see serviceMonitor.labels in HCL Domino) instead of only ones from this Helm release.
Optional: sign in to Grafana with Domino's OIDC provider
Once HCL Domino is deployed, it registers a grafana OIDC client (oidc.clients.grafana). To use it for Grafana login, add to kube-prometheus-stack-values.yaml and re-run the helm upgrade:
grafana:
grafana.ini:
server:
root_url: https://grafana.<domain>
auth.generic_oauth:
enabled: true
client_id: grafana
client_secret: <client secret configured in Domino's oidc.clients.grafana>
scopes: openid email profile
auth_url: https://auth.<domain>/auth/protocol/oidc/auth
token_url: https://auth.<domain>/auth/protocol/oidc/token
api_url: https://auth.<domain>/auth/protocol/oidc/userinfo
Optional: expose Grafana through APISIX
Add to kube-prometheus-stack-values.yaml (merge under the existing grafana: key if OIDC is also configured above) and re-run the helm upgrade:
grafana:
ingress:
enabled: true
ingressClassName: apisix
hosts:
- grafana.<domain>
Notes
- If running on RKE2, kube-proxy's Service uses
component/tierlabels instead of the standardk8s-applabel — withoutkubeProxy.service.selector: {component: kube-proxy, tier: control-plane}its ServiceMonitor finds no pods. Also addprometheus-node-exporter.tolerationsfor theCriticalAddonsOnlytaint RKE2 applies to control-plane nodes, so node-exporter also runs there — same toleration shown in Alloy setup. - Persistent storage for Prometheus is configured under
prometheus.prometheusSpec.storageSpec— set a StorageClass and size appropriate for the retention period needed.
See the chart's own documentation for the full set of options, and dw_requirements.md for sizing guidance.
Verify
kubectl get pods -n kube-prometheus-stack