apiVersion: apps/v1 kind: Deployment metadata: annotations: meta.helm.sh/release-name: grafana meta.helm.sh/release-namespace: default labels: app.kubernetes.io/instance: grafana app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: grafana app.kubernetes.io/version: 11.3.1 helm.sh/chart: grafana-8.6.4 name: grafana namespace: default spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app.kubernetes.io/instance: grafana app.kubernetes.io/name: grafana strategy: type: Recreate template: metadata: annotations: cattle.io/timestamp: '2025-10-04T04:05:51Z' checksum/config: f6e2070ec7fff0d4bb82d9a8fabedb9934e42e64a00d72e25402d46520734840 checksum/sc-dashboard-provider-config: e70bf6a851099d385178a76de9757bb0bef8299da6d8443602590e44f05fdf24 checksum/secret: 4eccb44a21c8117c1dbfbfe43f2ac844b240cd2482bc9fba8e4047442d121dc2 kubectl.kubernetes.io/default-container: grafana kubectl.kubernetes.io/restartedAt: '2026-10-28T17:14:50.583825+00:00' labels: app.kubernetes.io/instance: grafana app.kubernetes.io/name: grafana app.kubernetes.io/version: 11.3.1 helm.sh/chart: grafana-8.6.4 spec: automountServiceAccountToken: true containers: - env: - name: POD_IP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.podIP - name: GF_SECURITY_ADMIN_USER valueFrom: secretKeyRef: key: admin-user name: grafana - name: GF_SECURITY_ADMIN_PASSWORD valueFrom: secretKeyRef: key: admin-password name: grafana - name: GF_PATHS_DATA value: /var/lib/grafana/ - name: GF_PATHS_LOGS value: /var/log/grafana - name: GF_PATHS_PLUGINS value: /var/lib/grafana/plugins - name: GF_PATHS_PROVISIONING value: /etc/grafana/provisioning image: docker.io/grafana/grafana:11.6.16 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 10 httpGet: path: /api/health port: 3000 scheme: HTTP initialDelaySeconds: 60 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 30 name: grafana ports: - containerPort: 3000 name: grafana protocol: TCP - containerPort: 9094 name: gossip-tcp protocol: TCP - containerPort: 9094 name: gossip-udp protocol: UDP readinessProbe: failureThreshold: 3 httpGet: path: /api/health port: 3000 scheme: HTTP periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 resources: {} securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL seccompProfile: type: RuntimeDefault terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /etc/grafana/grafana.ini name: config subPath: grafana.ini - mountPath: /var/lib/grafana name: storage dnsPolicy: ClusterFirst enableServiceLinks: true initContainers: - command: - chown - -R - 472:472 - /var/lib/grafana image: docker.io/library/busybox:1.31.1 imagePullPolicy: IfNotPresent name: init-chown-data resources: {} securityContext: capabilities: add: - CHOWN runAsNonRoot: false runAsUser: 0 seccompProfile: type: RuntimeDefault terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /var/lib/grafana name: storage restartPolicy: Always schedulerName: default-scheduler securityContext: fsGroup: 472 runAsGroup: 472 runAsNonRoot: true runAsUser: 472 serviceAccount: grafana serviceAccountName: grafana terminationGracePeriodSeconds: 30 volumes: - configMap: defaultMode: 420 name: grafana name: config - name: storage persistentVolumeClaim: claimName: grafana --- apiVersion: v1 kind: Service metadata: annotations: meta.helm.sh/release-name: grafana meta.helm.sh/release-namespace: default labels: app.kubernetes.io/instance: grafana app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: grafana app.kubernetes.io/version: 11.3.1 helm.sh/chart: grafana-8.6.4 name: grafana namespace: default spec: clusterIP: 10.43.216.183 clusterIPs: - 10.43.216.183 internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: service port: 8080 protocol: TCP targetPort: 3000 selector: app.kubernetes.io/instance: grafana app.kubernetes.io/name: grafana sessionAffinity: None type: ClusterIP --- apiVersion: v1 kind: Service metadata: annotations: metallb.io/ip-allocated-from-pool: lan-pool metallb.universe.tf/ip-allocated-from-pool: default-pool metallb.universe.tf/loadBalancerIP: 140.44.4.32 finalizers: - service.kubernetes.io/load-balancer-cleanup labels: app.kubernetes.io/instance: grafana app.kubernetes.io/name: grafana name: grafana-lb namespace: default spec: allocateLoadBalancerNodePorts: true clusterIP: 10.43.240.82 clusterIPs: - 10.43.240.82 externalTrafficPolicy: Cluster internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack loadBalancerIP: 140.44.4.32 ports: - name: grafana-lb nodePort: 32758 port: 88 protocol: TCP targetPort: 3000 selector: app.kubernetes.io/instance: grafana app.kubernetes.io/name: grafana sessionAffinity: None type: LoadBalancer --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: labels: app.kubernetes.io/instance: grafana app.kubernetes.io/name: grafana name: grafana namespace: default spec: ingressClassName: traefik rules: - host: grafana.snarfnet.net http: paths: - backend: service: name: grafana-lb port: number: 80 path: / pathType: ImplementationSpecific tls: - hosts: - grafana.snarfnet.net secretName: firefly-tls-cert