diff --git a/README.md b/README.md index a9a42e54c72f3fd837d612298c5bf031d1dcbe4c..67cbd4c15598cdaf6ac10904c064ad4bf236cd78 100644 --- a/README.md +++ b/README.md @@ -369,24 +369,23 @@ The Prometheus `/targets` page will show the kubelet job with the error `403 Una #### Authorization problem The Prometheus `/targets` page will show the kubelet job with the error `401 Unauthorized`, when token authorization is not enabled. Ensure that the `--authorization-mode=Webhook` flag is enabled on all kubelet configurations. -### kube-state-metrics resource usaged + +### kube-state-metrics resource usage In some environments, kube-state-metrics may need additional resources. One driver for more resource needs, is a high number of namespaces. There may be others. -kube-state-metrics has it's resources using an +kube-state-metrics resource allocation is managed by [addon-resizer](https://github.com/kubernetes/autoscaler/tree/master/addon-resizer/nanny) You can control it's parameters by setting variables in the config. They default to: ``` jsonnet - resizer+:: { - kubeStateMetrics+:: { - cpu: '100m', - extraCpu: '2m', - memory: '150Mi', - extraMemory: '30Mi', - }, + kubeStateMetrics+:: { + baseCPU: '100m', + cpuPerNode: '2m', + baseMemory: '150Mi', + memoryPerNode: '30Mi', } ``` diff --git a/jsonnet/kube-prometheus/kube-state-metrics/kube-state-metrics.libsonnet b/jsonnet/kube-prometheus/kube-state-metrics/kube-state-metrics.libsonnet index f9065282bb92276a512540654b243e36000c08a9..59c0104a823493a235c09e74de3eead1c24840d2 100644 --- a/jsonnet/kube-prometheus/kube-state-metrics/kube-state-metrics.libsonnet +++ b/jsonnet/kube-prometheus/kube-state-metrics/kube-state-metrics.libsonnet @@ -5,19 +5,14 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet'; namespace: 'default', kubeStateMetrics+:: { - // when this is an empty string, you get the default set - collectors: '', - scrapeTimeout: '', + collectors: '', // empty string gets a default set scrapeInterval: '30s', - }, + scrapeTimeout: '', - resizer+:: { - kubeStateMetrics+:: { - cpu: '100m', - extraCpu: '2m', - memory: '150Mi', - extraMemory: '30Mi', - }, + baseCPU: '100m', + baseMemory: '150Mi', + cpuPerNode: '2m', + memoryPerNode: '30Mi', }, versions+:: { @@ -153,20 +148,19 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet'; '--port=8081', '--telemetry-host=127.0.0.1', '--telemetry-port=8082', - '--collectors=' + $._config.kubeStateMetrics.collectors, - ]) + - container.mixin.resources.withRequests({ cpu: $._config.resizer.kubeStateMetrics.cpu, memory: $._config.resizer.kubeStateMetrics.memory }) + - container.mixin.resources.withLimits({ cpu: $._config.resizer.kubeStateMetrics.cpu, memory: $._config.resizer.kubeStateMetrics.memory }); + ] + if $._config.kubeStateMetrics.collectors != '' then ['--collectors=' + $._config.kubeStateMetrics.collectors] else []) + + container.mixin.resources.withRequests({ cpu: $._config.kubeStateMetrics.baseCPU, memory: $._config.kubeStateMetrics.baseMemory }) + + container.mixin.resources.withLimits({ cpu: $._config.kubeStateMetrics.baseCPU, memory: $._config.kubeStateMetrics.baseMemory }); local addonResizer = container.new('addon-resizer', $._config.imageRepos.addonResizer + ':' + $._config.versions.addonResizer) + container.withCommand([ '/pod_nanny', '--container=kube-state-metrics', - '--cpu=' + $._config.resizer.kubeStateMetrics.cpu, - '--extra-cpu=' + $._config.resizer.kubeStateMetrics.extraCpu, - '--memory=' + $._config.resizer.kubeStateMetrics.memory, - '--extra-memory=' + $._config.resizer.kubeStateMetrics.extraMemory, + '--cpu=' + $._config.kubeStateMetrics.baseCPU, + '--extra-cpu=' + $._config.kubeStateMetrics.cpuPerNode, + '--memory=' + $._config.kubeStateMetrics.baseMemory, + '--extra-memory=' + $._config.kubeStateMetrics.memoryPerNode, '--threshold=5', '--deployment=kube-state-metrics', ]) +