Configure kube-state-metrics
As I work with kube-state-metrics in a large cluster, I found I needed to make some adjustments. - Expose the collectors, allowing one to configure exclusions. - Expose the addon_resizer parameters, facilitating reproduce adjustments - Allow adjusting scrapeTimeout and scrapeInterval
This commit is contained in:
21
README.md
21
README.md
@@ -369,3 +369,24 @@ The Prometheus `/targets` page will show the kubelet job with the error `403 Una
|
|||||||
#### Authorization problem
|
#### 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.
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
[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',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
@@ -4,6 +4,22 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
|
|||||||
_config+:: {
|
_config+:: {
|
||||||
namespace: 'default',
|
namespace: 'default',
|
||||||
|
|
||||||
|
kubeStateMetrics+:: {
|
||||||
|
// when this is an empty string, you get the default set
|
||||||
|
collectors: '',
|
||||||
|
scrapeTimeout: '',
|
||||||
|
scrapeInterval: '30s',
|
||||||
|
},
|
||||||
|
|
||||||
|
resizer+:: {
|
||||||
|
kubeStateMetrics+:: {
|
||||||
|
cpu: '100m',
|
||||||
|
extraCpu: '2m',
|
||||||
|
memory: '150Mi',
|
||||||
|
extraMemory: '30Mi',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
versions+:: {
|
versions+:: {
|
||||||
kubeStateMetrics: 'v1.3.1',
|
kubeStateMetrics: 'v1.3.1',
|
||||||
kubeRbacProxy: 'v0.3.1',
|
kubeRbacProxy: 'v0.3.1',
|
||||||
@@ -137,19 +153,20 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
|
|||||||
'--port=8081',
|
'--port=8081',
|
||||||
'--telemetry-host=127.0.0.1',
|
'--telemetry-host=127.0.0.1',
|
||||||
'--telemetry-port=8082',
|
'--telemetry-port=8082',
|
||||||
|
'--collectors=' + $._config.kubeStateMetrics.collectors,
|
||||||
]) +
|
]) +
|
||||||
container.mixin.resources.withRequests({ cpu: '102m', memory: '180Mi' }) +
|
container.mixin.resources.withRequests({ cpu: $._config.resizer.kubeStateMetrics.cpu, memory: $._config.resizer.kubeStateMetrics.memory }) +
|
||||||
container.mixin.resources.withLimits({ cpu: '102m', memory: '180Mi' });
|
container.mixin.resources.withLimits({ cpu: $._config.resizer.kubeStateMetrics.cpu, memory: $._config.resizer.kubeStateMetrics.memory });
|
||||||
|
|
||||||
local addonResizer =
|
local addonResizer =
|
||||||
container.new('addon-resizer', $._config.imageRepos.addonResizer + ':' + $._config.versions.addonResizer) +
|
container.new('addon-resizer', $._config.imageRepos.addonResizer + ':' + $._config.versions.addonResizer) +
|
||||||
container.withCommand([
|
container.withCommand([
|
||||||
'/pod_nanny',
|
'/pod_nanny',
|
||||||
'--container=kube-state-metrics',
|
'--container=kube-state-metrics',
|
||||||
'--cpu=100m',
|
'--cpu=' + $._config.resizer.kubeStateMetrics.cpu,
|
||||||
'--extra-cpu=2m',
|
'--extra-cpu=' + $._config.resizer.kubeStateMetrics.extraCpu,
|
||||||
'--memory=150Mi',
|
'--memory=' + $._config.resizer.kubeStateMetrics.memory,
|
||||||
'--extra-memory=30Mi',
|
'--extra-memory=' + $._config.resizer.kubeStateMetrics.extraMemory,
|
||||||
'--threshold=5',
|
'--threshold=5',
|
||||||
'--deployment=kube-state-metrics',
|
'--deployment=kube-state-metrics',
|
||||||
]) +
|
]) +
|
||||||
@@ -258,13 +275,13 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
|
|||||||
{
|
{
|
||||||
port: 'https-main',
|
port: 'https-main',
|
||||||
scheme: 'https',
|
scheme: 'https',
|
||||||
interval: '30s',
|
interval: $._config.kubeStateMetrics.scrapeInterval,
|
||||||
honorLabels: true,
|
honorLabels: true,
|
||||||
bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token',
|
bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token',
|
||||||
tlsConfig: {
|
tlsConfig: {
|
||||||
insecureSkipVerify: true,
|
insecureSkipVerify: true,
|
||||||
},
|
},
|
||||||
},
|
} + if $._config.kubeStateMetrics.scrapeTimeout != '' then { scrapeTimeout: $._config.kubeStateMetrics.scrapeTimeout } else {},
|
||||||
{
|
{
|
||||||
port: 'https-self',
|
port: 'https-self',
|
||||||
scheme: 'https',
|
scheme: 'https',
|
||||||
|
Reference in New Issue
Block a user