diff --git a/apps/base/artifactapi/kustomization.yaml b/apps/base/artifactapi/kustomization.yaml index e338494..8e5a482 100644 --- a/apps/base/artifactapi/kustomization.yaml +++ b/apps/base/artifactapi/kustomization.yaml @@ -18,4 +18,5 @@ resources: - ui-hpa.yaml - vaultauth.yaml - vaultstaticsecret.yaml + - vmpodscrape.yaml - vpa.yaml diff --git a/apps/base/artifactapi/redis-deployment.yaml b/apps/base/artifactapi/redis-deployment.yaml index c14a555..4298e18 100644 --- a/apps/base/artifactapi/redis-deployment.yaml +++ b/apps/base/artifactapi/redis-deployment.yaml @@ -53,4 +53,18 @@ spec: periodSeconds: 10 successThreshold: 1 timeoutSeconds: 5 + - name: metrics-exporter + image: artifactapi.k8s.syd1.au.unkin.net/dockerhub/oliver006/redis_exporter:v1.89.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 9121 + name: metrics + protocol: TCP + resources: + limits: + cpu: 100m + memory: 64Mi + requests: + cpu: 25m + memory: 32Mi restartPolicy: Always diff --git a/apps/base/artifactapi/vmpodscrape.yaml b/apps/base/artifactapi/vmpodscrape.yaml new file mode 100644 index 0000000..6e26cea --- /dev/null +++ b/apps/base/artifactapi/vmpodscrape.yaml @@ -0,0 +1,16 @@ +--- +# Scrape the redis_exporter sidecar (:9121) on the redis pod. Picked up by the +# observability VMAgent (selectAllByDefault). Pod-level rather than +# VMServiceScrape because the redis Service doesn't expose the metrics port. +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMPodScrape +metadata: + name: redis-exporter + namespace: artifactapi +spec: + selector: + matchLabels: + app: redis + podMetricsEndpoints: + - port: metrics + path: /metrics diff --git a/apps/base/authentik/kustomization.yaml b/apps/base/authentik/kustomization.yaml index 173bd5e..fbc2dcf 100644 --- a/apps/base/authentik/kustomization.yaml +++ b/apps/base/authentik/kustomization.yaml @@ -18,4 +18,5 @@ resources: - redis-service.yaml - vaultauth.yaml - vaultstaticsecret.yaml + - vmpodscrape.yaml - vpa.yaml diff --git a/apps/base/authentik/redis-deployment.yaml b/apps/base/authentik/redis-deployment.yaml index 2c1d251..5cc8552 100644 --- a/apps/base/authentik/redis-deployment.yaml +++ b/apps/base/authentik/redis-deployment.yaml @@ -52,6 +52,20 @@ spec: volumeMounts: - mountPath: /data name: redis-data + - name: metrics-exporter + image: artifactapi.k8s.syd1.au.unkin.net/dockerhub/oliver006/redis_exporter:v1.89.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 9121 + name: metrics + protocol: TCP + resources: + limits: + cpu: 100m + memory: 64Mi + requests: + cpu: 25m + memory: 32Mi volumes: - name: redis-data persistentVolumeClaim: diff --git a/apps/base/authentik/vmpodscrape.yaml b/apps/base/authentik/vmpodscrape.yaml new file mode 100644 index 0000000..e20cf0f --- /dev/null +++ b/apps/base/authentik/vmpodscrape.yaml @@ -0,0 +1,16 @@ +--- +# Scrape the redis_exporter sidecar (:9121) on the redis pod. Picked up by the +# observability VMAgent (selectAllByDefault). Pod-level rather than +# VMServiceScrape because the redis Service doesn't expose the metrics port. +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMPodScrape +metadata: + name: redis-exporter + namespace: authentik +spec: + selector: + matchLabels: + app: redis + podMetricsEndpoints: + - port: metrics + path: /metrics diff --git a/apps/base/gitea/kustomization.yaml b/apps/base/gitea/kustomization.yaml index 03a8b42..d43ae7d 100644 --- a/apps/base/gitea/kustomization.yaml +++ b/apps/base/gitea/kustomization.yaml @@ -10,6 +10,7 @@ resources: - valkey-deployment.yaml - valkey-pvc.yaml - valkey-service.yaml + - vmpodscrape.yaml - vaultauth.yaml - vaultstaticsecret.yaml - gateway.yaml diff --git a/apps/base/gitea/valkey-deployment.yaml b/apps/base/gitea/valkey-deployment.yaml index 22725dd..3015036 100644 --- a/apps/base/gitea/valkey-deployment.yaml +++ b/apps/base/gitea/valkey-deployment.yaml @@ -82,6 +82,26 @@ spec: volumeMounts: - mountPath: /data name: data + - name: metrics-exporter + image: artifactapi.k8s.syd1.au.unkin.net/dockerhub/oliver006/redis_exporter:v1.89.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 9121 + name: metrics + protocol: TCP + securityContext: + allowPrivilegeEscalation: false + runAsNonRoot: true + capabilities: + drop: + - ALL + resources: + limits: + cpu: 100m + memory: 64Mi + requests: + cpu: 25m + memory: 32Mi restartPolicy: Always volumes: - name: data diff --git a/apps/base/gitea/vmpodscrape.yaml b/apps/base/gitea/vmpodscrape.yaml new file mode 100644 index 0000000..0f85d19 --- /dev/null +++ b/apps/base/gitea/vmpodscrape.yaml @@ -0,0 +1,16 @@ +--- +# Scrape the redis_exporter sidecar (:9121) on the gitea-valkey pod. Picked up +# by the observability VMAgent (selectAllByDefault). Pod-level rather than +# VMServiceScrape because the valkey Service doesn't expose the metrics port. +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMPodScrape +metadata: + name: valkey-exporter + namespace: gitea +spec: + selector: + matchLabels: + app: gitea-valkey + podMetricsEndpoints: + - port: metrics + path: /metrics diff --git a/apps/base/jellyfin/kustomization.yaml b/apps/base/jellyfin/kustomization.yaml index e1b1262..26efe34 100644 --- a/apps/base/jellyfin/kustomization.yaml +++ b/apps/base/jellyfin/kustomization.yaml @@ -21,5 +21,6 @@ resources: - pdb.yaml - service.yaml - valkey.yaml + - vmpodscrape.yaml - gateway.yaml - httproute.yaml diff --git a/apps/base/jellyfin/valkey.yaml b/apps/base/jellyfin/valkey.yaml index 147895b..38a66c8 100644 --- a/apps/base/jellyfin/valkey.yaml +++ b/apps/base/jellyfin/valkey.yaml @@ -25,8 +25,14 @@ spec: shards: 1 replicas: 2 image: artifactapi.k8s.syd1.au.unkin.net/dockerhub/valkey/valkey:9.0.0 + # redis_exporter sidecar (:9121, port name `metrics`) on every ValkeyNode pod; + # the operator manages a dedicated _exporter ACL user for it. Image overridden + # from the operator default (bare dockerhub oliver006/redis_exporter:v1.80.0) + # to the artifactapi-proxied pin. Scraped by the valkey-exporter VMPodScrape + # in vmpodscrape.yaml alongside this file. exporter: - enabled: false + enabled: true + image: artifactapi.k8s.syd1.au.unkin.net/dockerhub/oliver006/redis_exporter:v1.89.0 scheduling: node: spread: diff --git a/apps/base/jellyfin/vmpodscrape.yaml b/apps/base/jellyfin/vmpodscrape.yaml new file mode 100644 index 0000000..4cf7c67 --- /dev/null +++ b/apps/base/jellyfin/vmpodscrape.yaml @@ -0,0 +1,19 @@ +--- +# Scrape the operator-injected redis_exporter sidecar (:9121, port name +# `metrics`) on the jellyfin-valkey ValkeyNode pods. The valkey-operator gives +# its pods fixed labels only (no pod-label passthrough on the ValkeyCluster CR), +# so select on the operator-managed labels. Picked up by the observability +# VMAgent (selectAllByDefault). +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMPodScrape +metadata: + name: valkey-exporter + namespace: jellyfin +spec: + selector: + matchLabels: + app.kubernetes.io/managed-by: valkey-operator + app.kubernetes.io/component: valkey-node + podMetricsEndpoints: + - port: metrics + path: /metrics diff --git a/apps/base/litellm/kustomization.yaml b/apps/base/litellm/kustomization.yaml index bc8e4b4..4e6a292 100644 --- a/apps/base/litellm/kustomization.yaml +++ b/apps/base/litellm/kustomization.yaml @@ -16,6 +16,7 @@ resources: - services.yaml - vaultauth.yaml - vaultstaticsecret.yaml + - vmpodscrape.yaml - vpa.yaml configMapGenerator: diff --git a/apps/base/litellm/redis-deployment.yaml b/apps/base/litellm/redis-deployment.yaml index cf97be0..d47597f 100644 --- a/apps/base/litellm/redis-deployment.yaml +++ b/apps/base/litellm/redis-deployment.yaml @@ -60,6 +60,20 @@ spec: - mountPath: /data mountPropagation: None name: data + - name: metrics-exporter + image: artifactapi.k8s.syd1.au.unkin.net/dockerhub/oliver006/redis_exporter:v1.89.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 9121 + name: metrics + protocol: TCP + resources: + limits: + cpu: 100m + memory: 64Mi + requests: + cpu: 25m + memory: 32Mi restartPolicy: Always volumes: - name: data diff --git a/apps/base/litellm/vmpodscrape.yaml b/apps/base/litellm/vmpodscrape.yaml new file mode 100644 index 0000000..28a20d8 --- /dev/null +++ b/apps/base/litellm/vmpodscrape.yaml @@ -0,0 +1,16 @@ +--- +# Scrape the redis_exporter sidecar (:9121) on the redis pod. Picked up by the +# observability VMAgent (selectAllByDefault). Pod-level rather than +# VMServiceScrape because the redis Service doesn't expose the metrics port. +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMPodScrape +metadata: + name: redis-exporter + namespace: litellm +spec: + selector: + matchLabels: + app: redis + podMetricsEndpoints: + - port: metrics + path: /metrics diff --git a/apps/base/netbox/kustomization.yaml b/apps/base/netbox/kustomization.yaml index 03a8b42..d43ae7d 100644 --- a/apps/base/netbox/kustomization.yaml +++ b/apps/base/netbox/kustomization.yaml @@ -10,6 +10,7 @@ resources: - valkey-deployment.yaml - valkey-pvc.yaml - valkey-service.yaml + - vmpodscrape.yaml - vaultauth.yaml - vaultstaticsecret.yaml - gateway.yaml diff --git a/apps/base/netbox/valkey-deployment.yaml b/apps/base/netbox/valkey-deployment.yaml index 52f04cf..9070964 100644 --- a/apps/base/netbox/valkey-deployment.yaml +++ b/apps/base/netbox/valkey-deployment.yaml @@ -82,6 +82,26 @@ spec: volumeMounts: - mountPath: /data name: data + - name: metrics-exporter + image: artifactapi.k8s.syd1.au.unkin.net/dockerhub/oliver006/redis_exporter:v1.89.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 9121 + name: metrics + protocol: TCP + securityContext: + allowPrivilegeEscalation: false + runAsNonRoot: true + capabilities: + drop: + - ALL + resources: + limits: + cpu: 100m + memory: 64Mi + requests: + cpu: 25m + memory: 32Mi restartPolicy: Always volumes: - name: data diff --git a/apps/base/netbox/vmpodscrape.yaml b/apps/base/netbox/vmpodscrape.yaml new file mode 100644 index 0000000..67339cb --- /dev/null +++ b/apps/base/netbox/vmpodscrape.yaml @@ -0,0 +1,16 @@ +--- +# Scrape the redis_exporter sidecar (:9121) on the netbox-valkey pod. Picked up +# by the observability VMAgent (selectAllByDefault). Pod-level rather than +# VMServiceScrape because the valkey Service doesn't expose the metrics port. +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMPodScrape +metadata: + name: valkey-exporter + namespace: netbox +spec: + selector: + matchLabels: + app: netbox-valkey + podMetricsEndpoints: + - port: metrics + path: /metrics