jsonnet: create function responsible for prometheus-adapter objects

This commit is contained in:
paulfantom 2021-01-05 17:04:26 +01:00
parent 6248e73890
commit d4999048fc
No known key found for this signature in database
GPG Key ID: 12AE0185401674E7
2 changed files with 192 additions and 179 deletions

View File

@ -3,6 +3,8 @@ local kubeRbacProxyContainer = import './kube-rbac-proxy/containerMixin.libsonne
local nodeExporter = import './node-exporter/node-exporter.libsonnet'; local nodeExporter = import './node-exporter/node-exporter.libsonnet';
local alertmanager = import './alertmanager/alertmanager.libsonnet'; local alertmanager = import './alertmanager/alertmanager.libsonnet';
local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libsonnet';
(import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') + (import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') +
(import './kube-state-metrics/kube-state-metrics.libsonnet') + (import './kube-state-metrics/kube-state-metrics.libsonnet') +
(import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') + (import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') +
@ -12,7 +14,6 @@ local alertmanager = import './alertmanager/alertmanager.libsonnet';
(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator/prometheus-operator.libsonnet') + (import 'github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator/prometheus-operator.libsonnet') +
(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') + (import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') +
(import './prometheus/prometheus.libsonnet') + (import './prometheus/prometheus.libsonnet') +
(import './prometheus-adapter/prometheus-adapter.libsonnet') +
(import 'github.com/kubernetes-monitoring/kubernetes-mixin/mixin.libsonnet') + (import 'github.com/kubernetes-monitoring/kubernetes-mixin/mixin.libsonnet') +
(import 'github.com/prometheus/prometheus/documentation/prometheus-mixin/mixin.libsonnet') + (import 'github.com/prometheus/prometheus/documentation/prometheus-mixin/mixin.libsonnet') +
(import './alerts/alerts.libsonnet') + (import './alerts/alerts.libsonnet') +
@ -29,6 +30,12 @@ local alertmanager = import './alertmanager/alertmanager.libsonnet';
version: '0.21.0', version: '0.21.0',
image: 'quay.io/prometheus/alertmanager:v0.21.0', image: 'quay.io/prometheus/alertmanager:v0.21.0',
}), }),
prometheusAdapter: prometheusAdapter({
namespace: $._config.namespace,
version: '0.8.2',
image: 'directxman12/k8s-prometheus-adapter:v0.8.2',
prometheusURL: 'http://prometheus-' + $._config.prometheus.name + '.' + $._config.namespace + '.svc.cluster.local:9090/',
}),
kubePrometheus+:: { kubePrometheus+:: {
namespace: { namespace: {
apiVersion: 'v1', apiVersion: 'v1',

View File

@ -1,25 +1,28 @@
{ local defaults = {
_config+:: { local defaults = self,
namespace: 'default',
versions+:: { prometheusAdapter: 'v0.8.2' },
imageRepos+:: { prometheusAdapter: 'directxman12/k8s-prometheus-adapter' },
prometheusAdapter+:: {
name: 'prometheus-adapter', name: 'prometheus-adapter',
namespace: $._config.namespace, namespace: error 'must provide namespace',
labels: { version: error 'must provide version',
image: error 'must provide image',
resources: {
requests: { cpu: '102m', memory: '180Mi' },
limits: { cpu: '250m', memory: '180Mi' },
},
listenAddress: '127.0.0.1',
port: 9100,
commonLabels:: {
'app.kubernetes.io/name': 'prometheus-adapter', 'app.kubernetes.io/name': 'prometheus-adapter',
'app.kubernetes.io/version': $._config.versions.prometheusAdapter, 'app.kubernetes.io/version': defaults.version,
'app.kubernetes.io/component': 'metrics-adapter', 'app.kubernetes.io/component': 'metrics-adapter',
'app.kubernetes.io/part-of': 'kube-prometheus', 'app.kubernetes.io/part-of': 'kube-prometheus',
}, },
selectorLabels: { selectorLabels:: {
[labelName]: $._config.prometheusAdapter.labels[labelName] [labelName]: defaults.commonLabels[labelName]
for labelName in std.objectFields($._config.prometheusAdapter.labels) for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version']) if !std.setMember(labelName, ['app.kubernetes.io/version'])
}, },
prometheusURL: 'http://prometheus-' + $._config.prometheus.name + '.' + $._config.namespace + '.svc.cluster.local:9090/',
prometheusURL: error 'must provide prometheusURL',
config: { config: {
resourceRules: { resourceRules: {
cpu: { cpu: {
@ -49,21 +52,25 @@
window: '5m', window: '5m',
}, },
}, },
}, };
},
function(params) {
local pa = self,
config:: defaults + params,
// Safety check
assert std.isObject(pa.config.resources),
prometheusAdapter+:: {
apiService: { apiService: {
apiVersion: 'apiregistration.k8s.io/v1', apiVersion: 'apiregistration.k8s.io/v1',
kind: 'APIService', kind: 'APIService',
metadata: { metadata: {
name: 'v1beta1.metrics.k8s.io', name: 'v1beta1.metrics.k8s.io',
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
spec: { spec: {
service: { service: {
name: $.prometheusAdapter.service.metadata.name, name: $.service.metadata.name,
namespace: $._config.prometheusAdapter.namespace, namespace: pa.config.namespace,
}, },
group: 'metrics.k8s.io', group: 'metrics.k8s.io',
version: 'v1beta1', version: 'v1beta1',
@ -78,23 +85,23 @@
kind: 'ConfigMap', kind: 'ConfigMap',
metadata: { metadata: {
name: 'adapter-config', name: 'adapter-config',
namespace: $._config.prometheusAdapter.namespace, namespace: pa.config.namespace,
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
data: { 'config.yaml': std.manifestYamlDoc($._config.prometheusAdapter.config) }, data: { 'config.yaml': std.manifestYamlDoc(pa.config.config) },
}, },
serviceMonitor: { serviceMonitor: {
apiVersion: 'monitoring.coreos.com/v1', apiVersion: 'monitoring.coreos.com/v1',
kind: 'ServiceMonitor', kind: 'ServiceMonitor',
metadata: { metadata: {
name: $._config.prometheusAdapter.name, name: pa.config.name,
namespace: $._config.prometheusAdapter.namespace, namespace: pa.config.namespace,
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
spec: { spec: {
selector: { selector: {
matchLabels: $._config.prometheusAdapter.selectorLabels, matchLabels: pa.config.selectorLabels,
}, },
endpoints: [ endpoints: [
{ {
@ -114,28 +121,28 @@
apiVersion: 'v1', apiVersion: 'v1',
kind: 'Service', kind: 'Service',
metadata: { metadata: {
name: $._config.prometheusAdapter.name, name: pa.config.name,
namespace: $._config.prometheusAdapter.namespace, namespace: pa.config.namespace,
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
spec: { spec: {
ports: [ ports: [
{ name: 'https', targetPort: 6443, port: 443 }, { name: 'https', targetPort: 6443, port: 443 },
], ],
selector: $._config.prometheusAdapter.selectorLabels, selector: pa.config.selectorLabels,
}, },
}, },
deployment: deployment:
local c = { local c = {
name: $._config.prometheusAdapter.name, name: pa.config.name,
image: $._config.imageRepos.prometheusAdapter + ':' + $._config.versions.prometheusAdapter, image: pa.config.image,
args: [ args: [
'--cert-dir=/var/run/serving-cert', '--cert-dir=/var/run/serving-cert',
'--config=/etc/adapter/config.yaml', '--config=/etc/adapter/config.yaml',
'--logtostderr=true', '--logtostderr=true',
'--metrics-relist-interval=1m', '--metrics-relist-interval=1m',
'--prometheus-url=' + $._config.prometheusAdapter.prometheusURL, '--prometheus-url=' + pa.config.prometheusURL,
'--secure-port=6443', '--secure-port=6443',
], ],
ports: [{ containerPort: 6443 }], ports: [{ containerPort: 6443 }],
@ -150,13 +157,13 @@
apiVersion: 'apps/v1', apiVersion: 'apps/v1',
kind: 'Deployment', kind: 'Deployment',
metadata: { metadata: {
name: $._config.prometheusAdapter.name, name: pa.config.name,
namespace: $._config.prometheusAdapter.namespace, namespace: pa.config.namespace,
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
spec: { spec: {
replicas: 1, replicas: 1,
selector: { matchLabels: $._config.prometheusAdapter.selectorLabels }, selector: { matchLabels: pa.config.selectorLabels },
strategy: { strategy: {
rollingUpdate: { rollingUpdate: {
maxSurge: 1, maxSurge: 1,
@ -164,10 +171,10 @@
}, },
}, },
template: { template: {
metadata: { labels: $._config.prometheusAdapter.labels }, metadata: { labels: pa.config.commonLabels },
spec: { spec: {
containers: [c], containers: [c],
serviceAccountName: $.prometheusAdapter.serviceAccount.metadata.name, serviceAccountName: $.serviceAccount.metadata.name,
nodeSelector: { 'kubernetes.io/os': 'linux' }, nodeSelector: { 'kubernetes.io/os': 'linux' },
volumes: [ volumes: [
{ name: 'tmpfs', emptyDir: {} }, { name: 'tmpfs', emptyDir: {} },
@ -183,9 +190,9 @@
apiVersion: 'v1', apiVersion: 'v1',
kind: 'ServiceAccount', kind: 'ServiceAccount',
metadata: { metadata: {
name: $._config.prometheusAdapter.name, name: pa.config.name,
namespace: $._config.prometheusAdapter.namespace, namespace: pa.config.namespace,
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
}, },
@ -193,8 +200,8 @@
apiVersion: 'rbac.authorization.k8s.io/v1', apiVersion: 'rbac.authorization.k8s.io/v1',
kind: 'ClusterRole', kind: 'ClusterRole',
metadata: { metadata: {
name: $._config.prometheusAdapter.name, name: pa.config.name,
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
rules: [{ rules: [{
apiGroups: [''], apiGroups: [''],
@ -207,18 +214,18 @@
apiVersion: 'rbac.authorization.k8s.io/v1', apiVersion: 'rbac.authorization.k8s.io/v1',
kind: 'ClusterRoleBinding', kind: 'ClusterRoleBinding',
metadata: { metadata: {
name: $._config.prometheusAdapter.name, name: pa.config.name,
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
roleRef: { roleRef: {
apiGroup: 'rbac.authorization.k8s.io', apiGroup: 'rbac.authorization.k8s.io',
kind: 'ClusterRole', kind: 'ClusterRole',
name: $.prometheusAdapter.clusterRole.metadata.name, name: $.clusterRole.metadata.name,
}, },
subjects: [{ subjects: [{
kind: 'ServiceAccount', kind: 'ServiceAccount',
name: $.prometheusAdapter.serviceAccount.metadata.name, name: $.serviceAccount.metadata.name,
namespace: $._config.prometheusAdapter.namespace, namespace: pa.config.namespace,
}], }],
}, },
@ -227,7 +234,7 @@
kind: 'ClusterRoleBinding', kind: 'ClusterRoleBinding',
metadata: { metadata: {
name: 'resource-metrics:system:auth-delegator', name: 'resource-metrics:system:auth-delegator',
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
roleRef: { roleRef: {
apiGroup: 'rbac.authorization.k8s.io', apiGroup: 'rbac.authorization.k8s.io',
@ -236,8 +243,8 @@
}, },
subjects: [{ subjects: [{
kind: 'ServiceAccount', kind: 'ServiceAccount',
name: $.prometheusAdapter.serviceAccount.metadata.name, name: $.serviceAccount.metadata.name,
namespace: $._config.prometheusAdapter.namespace, namespace: pa.config.namespace,
}], }],
}, },
@ -246,7 +253,7 @@
kind: 'ClusterRole', kind: 'ClusterRole',
metadata: { metadata: {
name: 'resource-metrics-server-resources', name: 'resource-metrics-server-resources',
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
rules: [{ rules: [{
apiGroups: ['metrics.k8s.io'], apiGroups: ['metrics.k8s.io'],
@ -264,7 +271,7 @@
'rbac.authorization.k8s.io/aggregate-to-admin': 'true', 'rbac.authorization.k8s.io/aggregate-to-admin': 'true',
'rbac.authorization.k8s.io/aggregate-to-edit': 'true', 'rbac.authorization.k8s.io/aggregate-to-edit': 'true',
'rbac.authorization.k8s.io/aggregate-to-view': 'true', 'rbac.authorization.k8s.io/aggregate-to-view': 'true',
} + $._config.prometheusAdapter.labels, } + pa.config.commonLabels,
}, },
rules: [{ rules: [{
apiGroups: ['metrics.k8s.io'], apiGroups: ['metrics.k8s.io'],
@ -279,7 +286,7 @@
metadata: { metadata: {
name: 'resource-metrics-auth-reader', name: 'resource-metrics-auth-reader',
namespace: 'kube-system', namespace: 'kube-system',
labels: $._config.prometheusAdapter.labels, labels: pa.config.commonLabels,
}, },
roleRef: { roleRef: {
apiGroup: 'rbac.authorization.k8s.io', apiGroup: 'rbac.authorization.k8s.io',
@ -288,9 +295,8 @@
}, },
subjects: [{ subjects: [{
kind: 'ServiceAccount', kind: 'ServiceAccount',
name: $.prometheusAdapter.serviceAccount.metadata.name, name: $.serviceAccount.metadata.name,
namespace: $._config.prometheusAdapter.namespace, namespace: pa.config.namespace,
}], }],
}, },
},
} }