diff --git a/metricbeat/README.md b/metricbeat/README.md index ff3ebafe7..24240debc 100644 --- a/metricbeat/README.md +++ b/metricbeat/README.md @@ -122,6 +122,8 @@ as a reference. They are also used in the automated testing of this chart. | `imagePullSecrets` | Configuration for [imagePullSecrets][] so that you can use a private registry for your image | `[]` | | `imageTag` | The Metricbeat Docker image tag | `7.8.1-SNAPSHOT` | | `image` | The Metricbeat Docker image | `docker.elastic.co/beats/metricbeat` | +| `kube_state_metrics.enabled` | Install [kube-state-metrics](https://github.com/helm/charts/tree/master/stable/kube-state-metrics) as a dependency | `true` | +| `kube_state_metrics.host` | Define kube-state-metrics endpoint for an existing deployment. Works only if `kube_state_metrics.enabled: false` | `""` | | `labels` | Configurable [labels][] applied to all Metricbeat pods | `{}` | | `livenessProbe` | Parameters to pass to liveness [probe][] checks for values such as timeouts and thresholds | see [values.yaml][] | | `managedServiceAccount` | Whether the `serviceAccount` should be managed by this helm chart. Set this to `false` in order to manage your own service account and related roles | `true` | diff --git a/metricbeat/requirements.lock b/metricbeat/requirements.lock index 9b027f8cc..63f207bdf 100644 --- a/metricbeat/requirements.lock +++ b/metricbeat/requirements.lock @@ -2,5 +2,5 @@ dependencies: - name: kube-state-metrics repository: https://kubernetes-charts.storage.googleapis.com version: 2.4.1 -digest: sha256:89fdea6b5f048652fc2d562ff59338a8cbf25f9053dc28976a1271b4387692b1 -generated: "2019-11-01T10:31:40.002896+01:00" +digest: sha256:948dca129bc7c16b138ed8bcbdf666c324d812e43af59d475b8bb74a53e99778 +generated: "2020-04-16T16:14:03.9537312+03:00" diff --git a/metricbeat/requirements.yaml b/metricbeat/requirements.yaml index 0f8c03d9c..2d78b382a 100644 --- a/metricbeat/requirements.yaml +++ b/metricbeat/requirements.yaml @@ -2,3 +2,4 @@ dependencies: - name: 'kube-state-metrics' version: '2.4.1' repository: '@stable' + condition: kube_state_metrics.enabled diff --git a/metricbeat/templates/deployment.yaml b/metricbeat/templates/deployment.yaml index abb02b4cc..dacf78310 100644 --- a/metricbeat/templates/deployment.yaml +++ b/metricbeat/templates/deployment.yaml @@ -98,7 +98,11 @@ spec: fieldRef: fieldPath: metadata.namespace - name: KUBE_STATE_METRICS_HOSTS + {{- if .Values.kube_state_metrics.enabled }} value: "$({{ .Release.Name | replace "-" "_" | upper }}_KUBE_STATE_METRICS_SERVICE_HOST):$({{ .Release.Name | replace "-" "_" | upper }}_KUBE_STATE_METRICS_SERVICE_PORT_HTTP)" + {{- else }} + value: {{ .Values.kube_state_metrics.host | default "kube-state-metrics:8080"}} + {{- end }} {{- if .Values.extraEnvs | default .Values.deployment.extraEnvs }} {{ toYaml ( .Values.extraEnvs | default .Values.deployment.extraEnvs ) | indent 8 }} {{- end }} diff --git a/metricbeat/tests/metricbeat_test.py b/metricbeat/tests/metricbeat_test.py index 9f78aeb33..7e1d6e5b9 100644 --- a/metricbeat/tests/metricbeat_test.py +++ b/metricbeat/tests/metricbeat_test.py @@ -6,6 +6,7 @@ project = "metricbeat" name = "release-name-" + project +kube_state_metric_name = "release-name-kube-state-metrics" def test_defaults(): @@ -17,6 +18,14 @@ def test_defaults(): assert name in r["daemonset"] assert name + "-metrics" in r["deployment"] + assert kube_state_metric_name in r["deployment"] + assert ( + r["deployment"][name + "-metrics"]["spec"]["template"]["spec"]["containers"][0][ + "env" + ][1]["value"] + == "$(RELEASE_NAME_KUBE_STATE_METRICS_SERVICE_HOST):$(RELEASE_NAME_KUBE_STATE_METRICS_SERVICE_PORT_HTTP)" + ) + c = r["daemonset"][name]["spec"]["template"]["spec"]["containers"][0] assert c["name"] == project assert c["image"].startswith("docker.elastic.co/beats/" + project + ":") @@ -1182,3 +1191,41 @@ def test_disable_deployment(): r = helm_template(config) assert name + "-metrics" not in r.get("deployment", {}) + + +def test_do_not_install_kube_stat_metrics(): + config = """ +kube_state_metrics: + enabled: false +""" + r = helm_template(config) + + assert kube_state_metric_name not in r["deployment"] + assert ( + r["deployment"][name + "-metrics"]["spec"]["template"]["spec"]["containers"][0][ + "env" + ][1]["name"] + == "KUBE_STATE_METRICS_HOSTS" + ) + assert ( + r["deployment"][name + "-metrics"]["spec"]["template"]["spec"]["containers"][0][ + "env" + ][1]["value"] + == "kube-state-metrics:8080" + ) + + +def test_custom_kube_stat_metrics_host(): + config = """ +kube_state_metrics: + enabled: false + host: "kube-state-metrics.kube-system:9999" +""" + r = helm_template(config) + + assert ( + r["deployment"][name + "-metrics"]["spec"]["template"]["spec"]["containers"][0][ + "env" + ][1]["value"] + == "kube-state-metrics.kube-system:9999" + ) diff --git a/metricbeat/values.yaml b/metricbeat/values.yaml index 76e4489d7..35f90bf30 100755 --- a/metricbeat/values.yaml +++ b/metricbeat/values.yaml @@ -250,6 +250,11 @@ updateStrategy: RollingUpdate nameOverride: "" fullnameOverride: "" +kube_state_metrics: + enabled: true + # host is used only when kube_state_metrics.enabled: false + host: "" + # DEPRECATED affinity: {} envFrom: []