sidecar: Add pod discovery

Signed-off-by: Maxime Brunet <maxime.brunet@paytm.com>
This commit is contained in:
Maxime Brunet 2021-02-19 15:57:03 -08:00
parent f72eaf36a1
commit ffe2bcf315
No known key found for this signature in database
GPG Key ID: 757B11B65F872567
7 changed files with 143 additions and 5 deletions

View File

@ -25,6 +25,7 @@ We use *breaking* word for marking changes that are not backward compatible (rel
### Added
- [#192](https://github.com/thanos-io/kube-thanos/pull/192) sidecar: Add pod discovery
- [#194](https://github.com/thanos-io/kube-thanos/pull/194) Allow configuring --label and --receive.tenant-label-name flags.
### Fixed

View File

@ -70,6 +70,17 @@ local ru = t.rule(commonConfig {
serviceMonitor: true,
});
local sc = t.sidecar(commonConfig {
// namespace: 'monitoring',
serviceMonitor: true,
// Labels of the Prometheus pods with a Thanos Sidecar container
podLabelSelector: {
// Here it is the default label given by the prometheus-operator
// to all Prometheus pods
app: 'prometheus',
},
});
local s = t.store(commonConfig {
replicas: 1,
serviceMonitor: true,
@ -96,10 +107,6 @@ local s = t.store(commonConfig {
local q = t.query(commonConfig {
name: 'thanos-query',
replicas: 1,
stores: [
'dnssrv+_grpc._tcp.%s.%s.svc.cluster.local' % [service.metadata.name, service.metadata.namespace]
for service in [re.service, ru.service, s.service]
],
externalPrefix: '',
resources: {},
queryTimeout: '5m',
@ -191,7 +198,7 @@ local strs = t.storeShards(commonConfig {
local finalQ = t.query(q.config {
stores: [
'dnssrv+_grpc._tcp.%s.%s.svc.cluster.local' % [service.metadata.name, service.metadata.namespace]
for service in [re.service, ru.service, s.service] +
for service in [re.service, ru.service, sc.service, s.service] +
[rcvs.hashrings[hashring].service for hashring in std.objectFields(rcvs.hashrings)] +
[strs.shards[shard].service for shard in std.objectFields(strs.shards)]
],
@ -201,6 +208,7 @@ local finalQ = t.query(q.config {
{ ['thanos-compact-' + name]: c[name] for name in std.objectFields(c) if c[name] != null } +
{ ['thanos-receive-' + name]: re[name] for name in std.objectFields(re) if re[name] != null } +
{ ['thanos-rule-' + name]: finalRu[name] for name in std.objectFields(finalRu) if finalRu[name] != null } +
{ ['thanos-sidecar-' + name]: sc[name] for name in std.objectFields(sc) if sc[name] != null } +
{ ['thanos-store-' + name]: s[name] for name in std.objectFields(s) if s[name] != null } +
{ ['thanos-query-' + name]: finalQ[name] for name in std.objectFields(finalQ) if finalQ[name] != null } +
{ ['thanos-query-frontend-' + name]: qf[name] for name in std.objectFields(qf) if qf[name] != null } +

View File

@ -48,6 +48,7 @@ spec:
- --query.replica-label=rule_replica
- --store=dnssrv+_grpc._tcp.thanos-receive.thanos.svc.cluster.local
- --store=dnssrv+_grpc._tcp.thanos-rule.thanos.svc.cluster.local
- --store=dnssrv+_grpc._tcp.thanos-sidecar.thanos.svc.cluster.local
- --store=dnssrv+_grpc._tcp.thanos-store.thanos.svc.cluster.local
- --store=dnssrv+_grpc._tcp.thanos-receive-default.thanos.svc.cluster.local
- --store=dnssrv+_grpc._tcp.thanos-receive-region-1.thanos.svc.cluster.local

View File

@ -0,0 +1,21 @@
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: prometheus-sidecar
app.kubernetes.io/instance: thanos-sidecar
app.kubernetes.io/name: thanos-sidecar
app.kubernetes.io/version: v0.17.2
name: thanos-sidecar
namespace: thanos
spec:
clusterIP: None
ports:
- name: grpc
port: 10901
targetPort: 10901
- name: http
port: 10902
targetPort: 10902
selector:
app: prometheus

View File

@ -0,0 +1,24 @@
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
app.kubernetes.io/component: prometheus-sidecar
app.kubernetes.io/instance: thanos-sidecar
app.kubernetes.io/name: thanos-sidecar
app.kubernetes.io/version: v0.17.2
name: thanos-sidecar
namespace: thanos
spec:
endpoints:
- port: http
relabelings:
- separator: /
sourceLabels:
- namespace
- pod
targetLabel: instance
selector:
matchLabels:
app.kubernetes.io/component: prometheus-sidecar
app.kubernetes.io/instance: thanos-sidecar
app.kubernetes.io/name: thanos-sidecar

View File

@ -0,0 +1,82 @@
// These are the defaults for this components configuration.
// When calling the function to generate the component's manifest,
// you can pass an object structured like the default to overwrite default values.
local defaults = {
local defaults = self,
name: 'thanos-sidecar',
namespace: error 'must provide namespace',
version: error 'must provide version',
serviceMonitor: false,
ports: {
grpc: 10901,
http: 10902,
},
commonLabels:: {
'app.kubernetes.io/name': 'thanos-sidecar',
'app.kubernetes.io/instance': defaults.name,
'app.kubernetes.io/version': defaults.version,
'app.kubernetes.io/component': 'prometheus-sidecar',
},
podLabelSelector:: error 'must provide podLabelSelector',
serviceLabelSelector:: {
[labelName]: defaults.commonLabels[labelName]
for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version'])
},
};
function(params) {
local tsc = self,
config:: defaults + params,
service: {
apiVersion: 'v1',
kind: 'Service',
metadata: {
name: tsc.config.name,
namespace: tsc.config.namespace,
labels: tsc.config.commonLabels,
},
spec: {
clusterIP: 'None',
selector: tsc.config.podLabelSelector,
ports: [
{
assert std.isString(name),
assert std.isNumber(tsc.config.ports[name]),
name: name,
port: tsc.config.ports[name],
targetPort: tsc.config.ports[name],
}
for name in std.objectFields(tsc.config.ports)
],
},
},
serviceMonitor: if tsc.config.serviceMonitor == true then {
apiVersion: 'monitoring.coreos.com/v1',
kind: 'ServiceMonitor',
metadata+: {
name: tsc.config.name,
namespace: tsc.config.namespace,
labels: tsc.config.commonLabels,
},
spec: {
selector: {
matchLabels: tsc.config.serviceLabelSelector,
},
relabelings: [{
sourceLabels: ['namespace', 'pod'],
separator: '/',
targetLabel: 'instance',
}],
endpoints: [
{ port: 'http' },
],
},
},
}

View File

@ -5,6 +5,7 @@
receive: (import 'kube-thanos-receive.libsonnet'),
receiveHashrings: (import 'kube-thanos-receive-hashrings.libsonnet'),
rule: (import 'kube-thanos-rule.libsonnet'),
sidecar: (import 'kube-thanos-sidecar.libsonnet'),
store: (import 'kube-thanos-store.libsonnet'),
storeShards: (import 'kube-thanos-store-shards.libsonnet'),
queryFrontend: (import 'kube-thanos-query-frontend.libsonnet'),