feat(argo-cd): Add ability to scrape redis metrics (#892)

* feat(argo-cd): Add ability to scrape redis metrics

Signed-off-by: Marco Kilchhofer <mkilchhofer@users.noreply.github.com>

* Bump chart version

Signed-off-by: Marco Kilchhofer <mkilchhofer@users.noreply.github.com>
pull/934/head argo-cd-3.20.0
Marco Kilchhofer 2021-09-17 19:47:11 +02:00 committed by GitHub
parent 489443e387
commit 7477b33cba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 144 additions and 2 deletions

View File

@ -2,7 +2,7 @@ apiVersion: v2
appVersion: 2.1.2
description: A Helm chart for ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes.
name: argo-cd
version: 3.19.0
version: 3.20.0
home: https://github.com/argoproj/argo-helm
icon: https://argoproj.github.io/argo-cd/assets/logo.png
keywords:
@ -21,4 +21,4 @@ dependencies:
condition: redis-ha.enabled
annotations:
artifacthub.io/changes: |
- "[Added]: Add support for topologySpreadConstraints"
- "[Added]: Ability to scrape redis metrics"

View File

@ -469,6 +469,25 @@ through `xxx.extraArgs`
| redis.securityContext | Redis Pod Security Context | See [values.yaml](values.yaml) |
| redis.servicePort | Redis service port | `6379` |
| redis.tolerations | [Tolerations for use with node taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) | `[]` |
| redis.metrics.enabled | Deploy metrics service and redis-exporter sidecar | `false` |
| redis.metrics.image.repository | redis-exporter image repository | `quay.io/bitnami/redis-exporter` |
| redis.metrics.image.tag | redis-exporter image tag | `1.26.0-debian-10-r2` |
| redis.metrics.image.imagePullPolicy | redis-exporter image PullPolicy | `IfNotPresent` |
| redis.metrics.containerPort | Port to use for redis-exporter sidecar | `9121` |
| redis.metrics.resources | Resource limits and requests for redis-exporter sidecar | `{}` |
| redis.metrics.service.type | Metrics service type | `ClusterIP` |
| redis.metrics.service.clusterIP | Metrics service clusterIP. `None` makes a "headless service" (no virtual IP) | `None` |
| redis.metrics.service.annotations | Metrics service annotations | `{}` |
| redis.metrics.service.labels | Metrics service labels | `{}` |
| redis.metrics.service.servicePort | Metrics service port | `9121` |
| redis.metrics.service.portName | Metrics service port name | `http-metrics` |
| redis.metrics.serviceMonitor.enabled | Enable a prometheus ServiceMonitor | `false` |
| redis.metrics.serviceMonitor.interval | Interval at which metrics should be scraped | `30s` |
| redis.metrics.serviceMonitor.relabelings | Prometheus [RelabelConfigs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) to apply to samples before scraping | `[]` |
| redis.metrics.serviceMonitor.metricRelabelings | Prometheus [MetricRelabelConfigs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs) to apply to samples before ingestion | `[]` |
| redis.metrics.serviceMonitor.selector | Prometheus ServiceMonitor selector labels | `{}` |
| redis.metrics.serviceMonitor.namespace | Prometheus ServiceMonitor namespace | `<nil>` |
| redis.metrics.serviceMonitor.additionalLabels | Additional labels to add to the Prometheus ServiceMonitor | `{}` |
| redis-ha | Configures [Redis HA subchart](https://github.com/DandyDeveloper/charts/tree/master/charts/redis-ha) The properties below have been changed from the subchart defaults | |
| redis-ha.enabled | Enables the Redis HA subchart and disables the custom Redis single node deployment| `false` |
| redis-ha.exporter.enabled | If `true`, the prometheus exporter sidecar is enabled | `true` |

View File

@ -64,6 +64,24 @@ spec:
{{- end }}
resources:
{{- toYaml .Values.redis.resources | nindent 10 }}
{{- if .Values.redis.metrics.enabled }}
- name: metrics
env:
- name: REDIS_ADDR
value: {{ printf "redis://localhost:%v" .Values.redis.containerPort }}
- name: REDIS_EXPORTER_WEB_LISTEN_ADDRESS
value: {{ printf "0.0.0.0:%v" .Values.redis.metrics.containerPort }}
image: {{ .Values.redis.metrics.image.repository }}:{{ .Values.redis.metrics.image.tag }}
imagePullPolicy: {{ .Values.redis.metrics.image.imagePullPolicy}}
ports:
- containerPort: {{ .Values.redis.metrics.containerPort }}
name: metrics
protocol: TCP
resources: {{- toYaml .Values.redis.metrics.resources | nindent 10 }}
{{- with .Values.redis.containerSecurityContext }}
securityContext: {{- toYaml . | nindent 10 }}
{{- end }}
{{- end }}
{{- with .Values.redis.extraContainers }}
{{- toYaml . | nindent 6 }}
{{- end }}

View File

@ -0,0 +1,28 @@
{{- $redisHa := (index .Values "redis-ha") -}}
{{- if and .Values.redis.enabled (not $redisHa.enabled) .Values.redis.metrics.enabled -}}
apiVersion: v1
kind: Service
metadata:
name: {{ template "argo-cd.redis.fullname" . }}-metrics
{{- with .Values.redis.metrics.service.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
labels:
{{- include "argo-cd.labels" (dict "context" . "component" .Values.redis.name "name" .Values.redis.name) | nindent 4 }}
{{- with .Values.redis.metrics.service.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.redis.metrics.service.clusterIP }}
clusterIP: {{ . }}
{{- end }}
ports:
- name: {{ .Values.redis.metrics.service.portName }}
protocol: TCP
port: {{ .Values.redis.metrics.service.servicePort }}
targetPort: metrics
selector:
{{- include "argo-cd.selectorLabels" (dict "context" . "component" .Values.redis.name "name" .Values.redis.name) | nindent 4 }}
type: {{ .Values.redis.metrics.service.type }}
{{- end }}

View File

@ -21,6 +21,13 @@ spec:
ports:
- port: redis
protocol: TCP
{{- if .Values.redis.metrics.enabled }}
- from:
- namespaceSelector: {}
ports:
- port: metrics
protocol: TCP
{{- end }}
podSelector:
matchLabels:
{{- include "argo-cd.selectorLabels" (dict "context" . "name" .Values.redis.name) | nindent 6 }}

View File

@ -0,0 +1,39 @@
{{- $redisHa := (index .Values "redis-ha") -}}
{{- if and .Values.redis.enabled (not $redisHa.enabled) .Values.redis.metrics.enabled .Values.redis.metrics.serviceMonitor.enabled -}}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ template "argo-cd.redis.fullname" . }}
{{- with .Values.redis.metrics.serviceMonitor.namespace }}
namespace: {{ . }}
{{- end }}
labels:
{{- include "argo-cd.labels" (dict "context" . "component" .Values.redis.name "name" .Values.redis.name) | nindent 4 }}
{{- with .Values.redis.metrics.serviceMonitor.selector }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.redis.metrics.serviceMonitor.additionalLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
endpoints:
- port: {{ .Values.redis.metrics.service.portName }}
{{- with .Values.redis.metrics.serviceMonitor.interval }}
interval: {{ . }}
{{- end }}
path: /metrics
{{- with .Values.redis.metrics.serviceMonitor.relabelings }}
relabelings:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.redis.metrics.serviceMonitor.metricRelabelings }}
metricRelabelings:
{{- toYaml . | nindent 8 }}
{{- end }}
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
selector:
matchLabels:
{{- include "argo-cd.selectorLabels" (dict "context" . "component" .Values.redis.name "name" .Values.redis.name) | nindent 6 }}
{{- end }}

View File

@ -451,6 +451,37 @@ redis:
## Additional containers to be added to the redis pod.
extraContainers: []
metrics:
enabled: false
image:
repository: quay.io/bitnami/redis-exporter
tag: 1.26.0-debian-10-r2
imagePullPolicy: IfNotPresent
containerPort: 9121
resources: {}
# limits:
# cpu: 50m
# memory: 64Mi
# requests:
# cpu: 10m
# memory: 32Mi
service:
type: ClusterIP
clusterIP: None
annotations: {}
labels: {}
servicePort: 9121
portName: http-metrics
serviceMonitor:
enabled: false
interval: 30s
relabelings: []
metricRelabelings: []
selector: {}
# prometheus: kube-prometheus
# namespace: monitoring
additionalLabels: {}
# This key configures Redis-HA subchart and when enabled (redis-ha.enabled=true)
# the custom redis deployment is omitted
redis-ha: