mirror of
https://github.com/thanos-io/kube-thanos.git
synced 2026-05-06 12:36:14 +02:00
sidecar: Add pod discovery
Signed-off-by: Maxime Brunet <maxime.brunet@paytm.com>
This commit is contained in:
parent
f72eaf36a1
commit
ffe2bcf315
@ -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
|
||||
|
||||
18
all.jsonnet
18
all.jsonnet
@ -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 } +
|
||||
|
||||
@ -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
|
||||
|
||||
21
examples/all/manifests/thanos-sidecar-service.yaml
Normal file
21
examples/all/manifests/thanos-sidecar-service.yaml
Normal 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
|
||||
24
examples/all/manifests/thanos-sidecar-serviceMonitor.yaml
Normal file
24
examples/all/manifests/thanos-sidecar-serviceMonitor.yaml
Normal 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
|
||||
82
jsonnet/kube-thanos/kube-thanos-sidecar.libsonnet
Normal file
82
jsonnet/kube-thanos/kube-thanos-sidecar.libsonnet
Normal 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' },
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -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'),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user