diff --git a/jsonnet/kube-prometheus/kube-prometheus-thanos.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-thanos.libsonnet index 71d342dce584b05611260a5d80327c2e801fac9c..cc6ec460b3c76480631ab0db0cf55dc0a2fbe85d 100644 --- a/jsonnet/kube-prometheus/kube-prometheus-thanos.libsonnet +++ b/jsonnet/kube-prometheus/kube-prometheus-thanos.libsonnet @@ -138,5 +138,81 @@ local servicePort = k.core.v1.service.mixin.spec.portsType; statefulSet.mixin.spec.template.spec.withVolumes([ volume.fromEmptyDir('data'), ]), + + serviceMonitorThanosCompactor: + { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'thanos-compactor', + namespace: $._config.namespace, + labels: { + 'k8s-app': 'thanos-compactor', + }, + }, + spec: { + jobLabel: 'k8s-app', + endpoints: [ + { + port: 'http', + interval: '30s', + }, + ], + selector: { + matchLabels: { + app: 'thanos-compactor', + }, + }, + }, + }, + + thanosCompactorService: + service.new( + 'thanos-compactor', + { app: 'thanos-compactor' }, + servicePort.newNamed('http', 9090, 'http'), + ) + + service.mixin.metadata.withNamespace($._config.namespace) + + service.mixin.metadata.withLabels({ app: 'thanos-compactor' }), + + thanosCompactorStatefulset: + local statefulSet = k.apps.v1beta2.statefulSet; + local volume = statefulSet.mixin.spec.template.spec.volumesType; + local container = statefulSet.mixin.spec.template.spec.containersType; + local containerEnv = container.envType; + local containerVolumeMount = container.volumeMountsType; + + local labels = { app: 'thanos-compactor' }; + + local c = + container.new('thanos-compactor', $._config.imageRepos.thanos + ':' + $._config.versions.thanos) + + container.withArgs([ + 'compact', + '--log.level=debug', + '--data-dir=/var/thanos/store', + '--objstore.config=$(OBJSTORE_CONFIG)', + '--wait', + ]) + + container.withEnv([ + containerEnv.fromSecretRef( + 'OBJSTORE_CONFIG', + $._config.thanos.objectStorageConfig.name, + $._config.thanos.objectStorageConfig.key, + ), + ]) + + container.withPorts([ + { name: 'http', containerPort: 10902 }, + ]) + + container.withVolumeMounts([ + containerVolumeMount.new('data', '/var/thanos/store', false), + ]); + + statefulSet.new('thanos-compactor', 1, c, [], labels) + + statefulSet.mixin.metadata.withNamespace($._config.namespace) + + statefulSet.mixin.spec.selector.withMatchLabels(labels) + + statefulSet.mixin.spec.withServiceName('thanos-compactor') + + statefulSet.mixin.spec.template.spec.withVolumes([ + volume.fromEmptyDir('data'), + ]), }, }