From 916b0ef90e0adc55b17320446acf54be0480ea62 Mon Sep 17 00:00:00 2001 From: Hao Ke <hao.ke@auryc.com> Date: Fri, 20 Nov 2020 12:09:48 -0500 Subject: [PATCH] provide external-metrics addon --- README.md | 1 + ...prometheus-rules-and-grafana-dashboards.md | 1 + example.jsonnet | 1 + ...kube-prometheus-external-metrics.libsonnet | 95 +++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 jsonnet/kube-prometheus/kube-prometheus-external-metrics.libsonnet diff --git a/README.md b/README.md index 3dab9c35..fb4fae3a 100644 --- a/README.md +++ b/README.md @@ -208,6 +208,7 @@ local kp = // (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + // (import 'kube-prometheus/kube-prometheus-thanos-sidecar.libsonnet') + // (import 'kube-prometheus/kube-prometheus-custom-metrics.libsonnet') + + // (import 'kube-prometheus/kube-prometheus-external-metrics.libsonnet') + { _config+:: { namespace: 'monitoring', diff --git a/docs/developing-prometheus-rules-and-grafana-dashboards.md b/docs/developing-prometheus-rules-and-grafana-dashboards.md index a0a41c5e..ee7be4e0 100644 --- a/docs/developing-prometheus-rules-and-grafana-dashboards.md +++ b/docs/developing-prometheus-rules-and-grafana-dashboards.md @@ -19,6 +19,7 @@ local kp = // (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + // (import 'kube-prometheus/kube-prometheus-thanos-sidecar.libsonnet') + // (import 'kube-prometheus/kube-prometheus-custom-metrics.libsonnet') + + // (import 'kube-prometheus/kube-prometheus-external-metrics.libsonnet') + { _config+:: { namespace: 'monitoring', diff --git a/example.jsonnet b/example.jsonnet index 54de1e35..15a801f8 100644 --- a/example.jsonnet +++ b/example.jsonnet @@ -7,6 +7,7 @@ local kp = // (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + // (import 'kube-prometheus/kube-prometheus-thanos-sidecar.libsonnet') + // (import 'kube-prometheus/kube-prometheus-custom-metrics.libsonnet') + + // (import 'kube-prometheus/kube-prometheus-external-metrics.libsonnet') + { _config+:: { namespace: 'monitoring', diff --git a/jsonnet/kube-prometheus/kube-prometheus-external-metrics.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-external-metrics.libsonnet new file mode 100644 index 00000000..abe35b0c --- /dev/null +++ b/jsonnet/kube-prometheus/kube-prometheus-external-metrics.libsonnet @@ -0,0 +1,95 @@ +// External metrics API allows the HPA v2 to scale based on metrics coming from outside of Kubernetes cluster +// For more details on usage visit https://github.com/DirectXMan12/k8s-prometheus-adapter#quick-links + +{ + _config+:: { + prometheusAdapter+:: { + namespace: $._config.namespace, + // Rules for external-metrics + config+:: { + externalRules+: [ + // { + // seriesQuery: '{__name__=~"^.*_queue$",namespace!=""}', + // seriesFilters: [], + // resources: { + // overrides: { + // namespace: { resource: 'namespace' } + // }, + // }, + // name: { matches: '^.*_queue$', as: '$0' }, + // metricsQuery: 'max(<<.Series>>{<<.LabelMatchers>>})', + // }, + ], + }, + }, + }, + + prometheusAdapter+:: { + externalMetricsApiService: { + apiVersion: 'apiregistration.k8s.io/v1', + kind: 'APIService', + metadata: { + name: 'v1beta1.external.metrics.k8s.io', + }, + spec: { + service: { + name: $.prometheusAdapter.service.metadata.name, + namespace: $._config.prometheusAdapter.namespace, + }, + group: 'external.metrics.k8s.io', + version: 'v1beta1', + insecureSkipTLSVerify: true, + groupPriorityMinimum: 100, + versionPriority: 100, + }, + }, + externalMetricsClusterRoleServerResources: { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'ClusterRole', + metadata: { + name: 'external-metrics-server-resources', + }, + rules: [{ + apiGroups: ['external.metrics.k8s.io'], + resources: ['*'], + verbs: ['*'], + }], + }, + externalMetricsClusterRoleBindingServerResources: { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'ClusterRoleBinding', + metadata: { + name: 'external-metrics-server-resources', + }, + + roleRef: { + apiGroup: 'rbac.authorization.k8s.io', + kind: 'ClusterRole', + name: 'external-metrics-server-resources', + }, + subjects: [{ + kind: 'ServiceAccount', + name: $.prometheusAdapter.serviceAccount.metadata.name, + namespace: $._config.prometheusAdapter.namespace, + }], + }, + externalMetricsClusterRoleBindingHPA: { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'ClusterRoleBinding', + metadata: { + name: 'hpa-controller-external-metrics', + }, + + roleRef: { + apiGroup: 'rbac.authorization.k8s.io', + kind: 'ClusterRole', + name: 'external-metrics-server-resources', + }, + subjects: [{ + kind: 'ServiceAccount', + name: 'horizontal-pod-autoscaler', + namespace: 'kube-system', + }], + }, + }, +} -- GitLab