From d4272c0c1f68ebf5b1965b87c8a8b7c75293682a Mon Sep 17 00:00:00 2001 From: Guillermo Facundo Colunga <guillermo.facundo.colunga@cern.ch> Date: Tue, 1 Oct 2024 15:23:56 +0200 Subject: [PATCH] [MONIT-4003] metrics: add default node selector option This chart includes some components that are composed of a single pod, like: prometheus and fluentbit to collect and forward metrics or kube state to expose internal kubernetes api metrics. This commit adds a new configuration field (merics.defaultNodeSelector) that allows to set a common nodeSelector for all those components. In case that any of those components adds a nodeSelector that one will have more priority. Signed-off-by: Guillermo Facundo Colunga <guillermo.facundo.colunga@cern.ch> --- README.md | 1 + templates/fluentbit-metrics/statefulset.yaml | 11 +++++++++-- templates/kube_state/deployment.yaml | 8 +++++++- templates/prometheus/prometheus.yaml | 13 ++++++++++--- templates/prometheus_operator/deployment.yaml | 10 ++++++++-- values.yaml | 8 +++++++- 6 files changed, 42 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5066b02..33eff95 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ At `docs/installation_guide.md` you will find the initial setup and installation | logs.fluentbit.scrapeInterval | string | `"15s"` | interval used by the local prometheus (if installed) to scrape metrics from logs fluentbits | | logs.fluentbit.service | string | Daemon mode off listening on port 2020. See `values.yaml`. | fluentbit service configuration options in a multiline string | | metrics.enabled | bool | `true` | indicates if all metrics components should be enabled or not. If set to false no metrics component will be installed nor configured | +| metrics.defaultNodeSelector | map | `{}` | if set will be used as `nodeSelector` for those components that allow one | | metrics.fluentbit.enable | bool | `true` | if true fluentbit daemon set will be installed | | metrics.fluentbit.nodeSelector | hash | `"nil"` | fluentbit statefulset node selectors | | metrics.fluentbit.filters | string | `"nil"` | fluentbit filters as a yaml list in a multiline string | diff --git a/templates/fluentbit-metrics/statefulset.yaml b/templates/fluentbit-metrics/statefulset.yaml index ef74671..393fb6d 100644 --- a/templates/fluentbit-metrics/statefulset.yaml +++ b/templates/fluentbit-metrics/statefulset.yaml @@ -36,10 +36,17 @@ spec: {{- if .Values.metrics.fluentbit.extraVolumeMounts }} {{- toYaml .Values.metrics.fluentbit.extraVolumeMounts | nindent 6 }} {{- end }} - {{- with .Values.metrics.fluentbit.nodeSelector }} + {{- with .Values.metrics.defaultNodeSelector }} nodeSelector: + {{- if .Values.metrics.fluentbit.nodeSelector }} + {{- with .Values.metrics.fluentbit.nodeSelector }} {{- toYaml . | nindent 8 }} - {{- end }} + {{- end }} + {{- else }} + {{- with .Values.metrics.defaultNodeSelector }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- end }} volumes: - name: config configMap: diff --git a/templates/kube_state/deployment.yaml b/templates/kube_state/deployment.yaml index f23cba5..d25faa9 100644 --- a/templates/kube_state/deployment.yaml +++ b/templates/kube_state/deployment.yaml @@ -49,8 +49,14 @@ spec: type: RuntimeDefault nodeSelector: kubernetes.io/os: linux + {{- if .Values.metrics.kubeState.nodeSelector }} {{- with .Values.metrics.kubeState.nodeSelector }} {{- toYaml . | nindent 8 }} - {{- end }} + {{- end }} + {{- else }} + {{- with .Values.metrics.defaultNodeSelector }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- end }} serviceAccountName: it-monit-metrics-collector-kubestate {{- end -}} diff --git a/templates/prometheus/prometheus.yaml b/templates/prometheus/prometheus.yaml index b72f99d..3c9aaf4 100644 --- a/templates/prometheus/prometheus.yaml +++ b/templates/prometheus/prometheus.yaml @@ -11,10 +11,17 @@ spec: retention: {{ .Values.metrics.prometheus.server.retention }} externalLabels: k8s_cluster_name: {{ .Values.kubernetes.clusterName }} - {{- with .Values.metrics.prometheus.server.nodeSelector }} + nodeSelector: - {{- toYaml . | nindent 6 }} - {{- end }} + {{- if .Values.metrics.prometheus.server.nodeSelector }} + {{- with .Values.metrics.prometheus.server.nodeSelector }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- else }} + {{- with .Values.metrics.defaultNodeSelector }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- end }} serviceAccountName: it-monit-metrics-collector-prometheus resources: requests: diff --git a/templates/prometheus_operator/deployment.yaml b/templates/prometheus_operator/deployment.yaml index c19a742..083321b 100644 --- a/templates/prometheus_operator/deployment.yaml +++ b/templates/prometheus_operator/deployment.yaml @@ -44,13 +44,19 @@ spec: readOnlyRootFilesystem: true nodeSelector: kubernetes.io/os: linux + {{- if .Values.metrics.prometheus.operator.nodeSelector}} {{- with .Values.metrics.prometheus.operator.nodeSelector }} {{- toYaml . | nindent 8 }} - {{- end }} + {{- end }} + {{- else }} + {{- with .Values.metrics.defaultNodeSelector }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- end }} securityContext: runAsNonRoot: true runAsUser: 65534 seccompProfile: type: RuntimeDefault serviceAccountName: it-monit-metrics-operator-prometheus -{{- end -}} +{{- end -}} \ No newline at end of file diff --git a/values.yaml b/values.yaml index d2e33ec..f6d0a62 100644 --- a/values.yaml +++ b/values.yaml @@ -24,6 +24,9 @@ metrics: # -- indicates if all metrics components should be enabled or not. If set to false no metrics component will be installed nor configured enabled: true + # -- the default node selector will be applied when possible. In to the following components: metrics collectors (prometheus and fluentbit), metrics exporters (kube state). + defaultNodeSelector: {} + # Node exporter is used to scrape node resources metrics like cpu, memory # or network. nodeExporter: @@ -40,7 +43,7 @@ metrics: memory: "25Mi" # Kube state is used to scrape metrics from kubernetes api, like limits - # and resources. + # and resources. If set it will override the metrics.defaultNodeSelector. kubeState: nodeSelector: {} # -- if true kube state will be installed together with a service monitor @@ -62,6 +65,7 @@ metrics: enabled: true # -- specific configuration for the prometheus operator operator: + # If set it will override the metrics.defaultNodeSelector. nodeSelector: {} resources: requests: @@ -71,6 +75,7 @@ metrics: cpu: "100m" memory: "100Mi" server: + # If set it will override the metrics.defaultNodeSelector. nodeSelector: {} # -- prometheus version to use by the local cluster prometheus version: "v2.50.0" @@ -118,6 +123,7 @@ metrics: fluentbit: # -- if true fluentbit metrics forwarder will be installed enabled: true + # If set it will override the metrics.defaultNodeSelector. nodeSelector: {} resources: requests: -- GitLab