mirror of
https://github.com/prometheus-operator/prometheus-operator.git
synced 2025-04-21 03:38:43 +00:00
optimize thanos yaml generate script
This commit is contained in:
parent
19927edb56
commit
9798b98df1
11 changed files with 160 additions and 114 deletions
6
Makefile
6
Makefile
|
@ -163,7 +163,7 @@ tidy:
|
|||
cd scripts && go mod tidy -v -modfile=go.mod
|
||||
|
||||
.PHONY: generate
|
||||
generate: $(DEEPCOPY_TARGETS) generate-crds bundle.yaml example/mixin/alerts.yaml $(shell find Documentation -type f)
|
||||
generate: $(DEEPCOPY_TARGETS) generate-crds bundle.yaml example/mixin/alerts.yaml example/thanos/thanos.yaml $(shell find Documentation -type f)
|
||||
|
||||
.PHONY: generate-crds
|
||||
generate-crds: $(CONTROLLER_GEN_BINARY) $(GOJSONTOYAML_BINARY) $(TYPES_V1_TARGET) $(TYPES_V1ALPHA1_TARGET)
|
||||
|
@ -190,8 +190,8 @@ example/mixin/alerts.yaml: $(JSONNET_BINARY) $(GOJSONTOYAML_BINARY)
|
|||
RBAC_MANIFESTS = example/rbac/prometheus-operator/prometheus-operator-cluster-role.yaml example/rbac/prometheus-operator/prometheus-operator-cluster-role-binding.yaml example/rbac/prometheus-operator/prometheus-operator-service-account.yaml example/rbac/prometheus-operator/prometheus-operator-deployment.yaml
|
||||
$(RBAC_MANIFESTS): scripts/generate/vendor scripts/generate/prometheus-operator-rbac.jsonnet $(shell find jsonnet -type f)
|
||||
scripts/generate/build-rbac-prometheus-operator.sh
|
||||
THANOS_MANIFESTS = example/thanos/prometheus.yaml
|
||||
$(THANOS_MANIFESTS): scripts/generate/vendor jsonnet/thanos/thanos.jsonnet $(shell find jsonnet -type f)
|
||||
|
||||
example/thanos/thanos.yaml: scripts/generate/vendor scripts/generate/thanos.jsonnet $(shell find jsonnet -type f)
|
||||
scripts/generate/build-thanos-example.sh
|
||||
|
||||
jsonnet/prometheus-operator/prometheus-operator.libsonnet: VERSION
|
||||
|
|
|
@ -23,3 +23,5 @@ rules:
|
|||
- get
|
||||
- nonResourceURLs:
|
||||
- /metrics
|
||||
verbs:
|
||||
- get
|
||||
|
|
|
@ -2,6 +2,7 @@ apiVersion: monitoring.coreos.com/v1
|
|||
kind: ServiceMonitor
|
||||
metadata:
|
||||
labels:
|
||||
app: prometheus
|
||||
prometheus: self
|
||||
name: prometheus-self
|
||||
namespace: default
|
||||
|
|
|
@ -30,10 +30,3 @@ spec:
|
|||
name: http
|
||||
- containerPort: 10901
|
||||
name: grpc
|
||||
resources:
|
||||
limits:
|
||||
cpu: 200m
|
||||
memory: 200Mi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 100Mi
|
||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
|||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 9090
|
||||
port: 10902
|
||||
targetPort: http
|
||||
selector:
|
||||
app: thanos-query
|
||||
|
|
|
@ -2,7 +2,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: thanos-query
|
||||
app: thanos-sidecar
|
||||
name: thanos-sidecar
|
||||
namespace: default
|
||||
spec:
|
||||
|
|
|
@ -6,7 +6,6 @@ metadata:
|
|||
name: thanos-ruler
|
||||
namespace: default
|
||||
spec:
|
||||
clusterIP: None
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 10901
|
||||
|
|
|
@ -1,4 +1,16 @@
|
|||
local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
||||
local service(name, namespace, labels, selector, ports) = {
|
||||
apiVersion: 'v1',
|
||||
kind: 'Service',
|
||||
metadata: {
|
||||
name: name,
|
||||
namespace: namespace,
|
||||
labels: labels,
|
||||
},
|
||||
spec: {
|
||||
ports+: ports,
|
||||
selector: selector,
|
||||
},
|
||||
};
|
||||
|
||||
{
|
||||
_config+:: {
|
||||
|
@ -23,7 +35,7 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
|||
'app': 'prometheus'
|
||||
},
|
||||
queryLabels: {'app':'thanos-query'},
|
||||
sidecarLabels: {'app':'thanos-query'},
|
||||
sidecarLabels: {'app':'thanos-sidecar'},
|
||||
rulerLabels: {'app':'thanos-ruler'},
|
||||
},
|
||||
|
||||
|
@ -68,49 +80,53 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
|||
}
|
||||
}
|
||||
},
|
||||
clusterRole:
|
||||
local clusterRole = k.rbac.v1.clusterRole;
|
||||
local policyRule = clusterRole.rulesType;
|
||||
local monitoringRule = policyRule.new() +
|
||||
policyRule.withApiGroups(['']) +
|
||||
policyRule.withResources([
|
||||
'nodes',
|
||||
'nodes/metrics',
|
||||
'services',
|
||||
'endpoints',
|
||||
'pods',
|
||||
]) +
|
||||
policyRule.withVerbs(['get','list','watch']);
|
||||
local configmapRule = policyRule.new()+
|
||||
policyRule.withApiGroups(['']) +
|
||||
policyRule.withResources([
|
||||
'configmaps',
|
||||
]) +
|
||||
policyRule.withVerbs(['get'])
|
||||
;
|
||||
local noResourceRule= policyRule.new()+policyRule.withNonResourceUrls(['/metrics']) ;
|
||||
local rules = [monitoringRule,configmapRule,noResourceRule];
|
||||
|
||||
clusterRole.new() +
|
||||
clusterRole.mixin.metadata.withName(po.prometheusName) +
|
||||
clusterRole.withRules(rules),
|
||||
clusterRoleBinding:
|
||||
local clusterRoleBinding = k.rbac.v1.clusterRoleBinding;
|
||||
clusterRoleBinding.new() +
|
||||
clusterRoleBinding.mixin.metadata.withName(po.prometheusName) +
|
||||
clusterRoleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') +
|
||||
clusterRoleBinding.mixin.roleRef.withName(po.prometheusName) +
|
||||
clusterRoleBinding.mixin.roleRef.withKind('ClusterRole') +
|
||||
clusterRoleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'default', namespace: po.namespace }]),
|
||||
service:
|
||||
local service = k.core.v1.service;
|
||||
local servicePort = k.core.v1.service.mixin.spec.portsType;
|
||||
|
||||
local poServicePort = servicePort.newNamed('web', 9090, 'web');
|
||||
|
||||
service.new(po.prometheusName, po.prometheusLabels, [poServicePort]) +
|
||||
service.mixin.metadata.withLabels(po.commonLabels) +
|
||||
service.mixin.metadata.withNamespace(po.namespace) ,
|
||||
clusterRole: {
|
||||
apiVersion: 'rbac.authorization.k8s.io/v1',
|
||||
kind: 'ClusterRole',
|
||||
metadata: {
|
||||
name: po.prometheusName,
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
apiGroups: [''],
|
||||
resources: ['nodes','nodes/metrics','services','endpoints','pods'],
|
||||
verbs: ['get','list','watch'],
|
||||
},
|
||||
{
|
||||
apiGroups: [''],
|
||||
resources: ['configmaps'],
|
||||
verbs: ['get'],
|
||||
},
|
||||
{
|
||||
nonResourceURLs: ['/metrics'],
|
||||
verbs: ['get'],
|
||||
},
|
||||
],
|
||||
},
|
||||
clusterRoleBinding: {
|
||||
apiVersion: 'rbac.authorization.k8s.io/v1',
|
||||
kind: 'ClusterRoleBinding',
|
||||
metadata: {
|
||||
name: po.prometheusName,
|
||||
},
|
||||
roleRef: {
|
||||
apiGroup: 'rbac.authorization.k8s.io',
|
||||
kind: 'ClusterRole',
|
||||
name: po.prometheusName,
|
||||
},
|
||||
subjects: [{
|
||||
kind: 'ServiceAccount',
|
||||
name: 'default',
|
||||
namespace: po.namespace,
|
||||
}],
|
||||
},
|
||||
service: service(
|
||||
po.prometheusName,
|
||||
po.namespace,
|
||||
po.commonLabels,
|
||||
po.prometheusLabels,
|
||||
[{ name: 'web', port: 9090, targetPort: 'web' }]
|
||||
),
|
||||
serviceMonitor:
|
||||
{
|
||||
apiVersion: 'monitoring.coreos.com/v1',
|
||||
|
@ -118,7 +134,7 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
|||
metadata: {
|
||||
name: po.prometheusName,
|
||||
namespace: po.namespace,
|
||||
labels: po.prometheusLabels,
|
||||
labels: po.commonLabels,
|
||||
},
|
||||
spec: {
|
||||
endpoints: [
|
||||
|
@ -134,48 +150,71 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
|||
},
|
||||
},
|
||||
},
|
||||
queryDeployment:
|
||||
local deployment = k.apps.v1.deployment;
|
||||
local container = k.apps.v1.deployment.mixin.spec.template.spec.containersType;
|
||||
local containerPort = container.portsType;
|
||||
local name = 'thanos-query';
|
||||
local queryContainer =
|
||||
container.new(name, po.image + ':' + po.version) +
|
||||
|
||||
container.withPorts([containerPort.newNamed(10902, 'http'),containerPort.newNamed(10901, 'grpc')]) +
|
||||
container.withArgs([
|
||||
'query',
|
||||
'--log.level=debug',
|
||||
'--query.replica-label=prometheus_replica',
|
||||
'--query.replica-label=thanos_ruler_replica',
|
||||
'--store=dnssrv+_grpc._tcp.thanos-sidecar.default.svc.cluster.local',
|
||||
'--store=dnssrv+_grpc._tcp.thanos-ruler.default.svc.cluster.local'
|
||||
]) +
|
||||
container.mixin.resources.withRequests({ cpu: '100m', memory: '100Mi' }) +
|
||||
container.mixin.resources.withLimits({ cpu: '200m', memory: '200Mi' });
|
||||
|
||||
deployment.new(name, 1, queryContainer, {app:"thanos-query"}) +
|
||||
deployment.mixin.metadata.withNamespace(po.namespace) +
|
||||
deployment.mixin.metadata.withLabels({app:"thanos-query"}) +
|
||||
deployment.mixin.spec.selector.withMatchLabels({app:"thanos-query"}) ,
|
||||
queryService:
|
||||
local service = k.core.v1.service;
|
||||
local servicePort = k.core.v1.service.mixin.spec.portsType;
|
||||
|
||||
local poServicePort = servicePort.newNamed('http', 9090, 'http');
|
||||
service.new(po.thanosQueryName, po.queryLabels, [poServicePort]) +
|
||||
service.mixin.metadata.withLabels(po.queryLabels) +
|
||||
service.mixin.metadata.withNamespace(po.namespace) ,
|
||||
sidecarService:
|
||||
local service = k.core.v1.service;
|
||||
local servicePort = k.core.v1.service.mixin.spec.portsType;
|
||||
|
||||
local poServicePort = servicePort.newNamed('grpc', 10901, 'grpc');
|
||||
service.new(po.thanosSidecarName, po.commonLabels, [poServicePort]) +
|
||||
service.mixin.metadata.withLabels(po.sidecarLabels) +
|
||||
service.mixin.metadata.withNamespace(po.namespace) +
|
||||
service.mixin.spec.withSelector(po.prometheusLabels) +
|
||||
service.mixin.spec.withClusterIp('None'),
|
||||
queryDeployment: {
|
||||
apiVersion: 'apps/v1',
|
||||
kind: 'Deployment',
|
||||
metadata: {
|
||||
name: po.thanosQueryName,
|
||||
namespace: po.namespace,
|
||||
labels: po.queryLabels,
|
||||
},
|
||||
spec: {
|
||||
replicas: 1,
|
||||
selector: { matchLabels: po.queryLabels },
|
||||
template: {
|
||||
metadata: { labels: po.queryLabels },
|
||||
spec: {
|
||||
containers: [
|
||||
{
|
||||
name: 'thanos-query',
|
||||
image: po.image + ':' + po.version,
|
||||
args: [
|
||||
'query',
|
||||
'--log.level=debug',
|
||||
'--query.replica-label=prometheus_replica',
|
||||
'--query.replica-label=thanos_ruler_replica',
|
||||
'--store=dnssrv+_grpc._tcp.thanos-sidecar.default.svc.cluster.local',
|
||||
'--store=dnssrv+_grpc._tcp.thanos-ruler.default.svc.cluster.local',
|
||||
],
|
||||
ports: [{
|
||||
name: 'http',
|
||||
containerPort: 10902,
|
||||
},
|
||||
{
|
||||
name: 'grpc',
|
||||
containerPort: 10901,
|
||||
}],
|
||||
}
|
||||
],
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
queryService: service(
|
||||
po.thanosQueryName,
|
||||
po.namespace,
|
||||
po.queryLabels,
|
||||
po.queryLabels,
|
||||
[{ name: 'http', port: 10902, targetPort: 'http' }]
|
||||
),
|
||||
sidecarService: {
|
||||
apiVersion: 'v1',
|
||||
kind: 'Service',
|
||||
metadata: {
|
||||
name: po.thanosSidecarName,
|
||||
namespace: po.namespace,
|
||||
labels: po.sidecarLabels,
|
||||
},
|
||||
spec: {
|
||||
ports: [{
|
||||
name: 'grpc',
|
||||
port: 10901,
|
||||
targetPort: 'grpc',
|
||||
}],
|
||||
selector: po.prometheusLabels,
|
||||
clusterIP: 'None'
|
||||
},
|
||||
},
|
||||
thanosRuler:
|
||||
{
|
||||
"apiVersion": "monitoring.coreos.com/v1",
|
||||
|
@ -219,16 +258,20 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
|||
}]
|
||||
}
|
||||
},
|
||||
thanosRulerService:
|
||||
local service = k.core.v1.service;
|
||||
local servicePort = k.core.v1.service.mixin.spec.portsType;
|
||||
local grpcServicePort = servicePort.newNamed('grpc', 10901, 'grpc');
|
||||
local httpServicePort = servicePort.newNamed('http', 10902, 'web');
|
||||
|
||||
service.new(po.thanosRulerName, po.rulerLabels, [grpcServicePort,httpServicePort]) +
|
||||
service.mixin.metadata.withLabels(po.rulerLabels) +
|
||||
service.mixin.metadata.withNamespace(po.namespace) +
|
||||
service.mixin.spec.withSelector(po.rulerLabels) +
|
||||
service.mixin.spec.withClusterIp('None'),
|
||||
thanosRulerService: service(
|
||||
po.thanosRulerName,
|
||||
po.namespace,
|
||||
po.rulerLabels,
|
||||
po.rulerLabels,
|
||||
[{
|
||||
name: 'grpc',
|
||||
port: 10901,
|
||||
targetPort: 'grpc',
|
||||
},{
|
||||
name: 'http',
|
||||
port: 10902,
|
||||
targetPort: 'web',
|
||||
}]
|
||||
)
|
||||
}
|
||||
}
|
|
@ -6,7 +6,7 @@ set -o pipefail
|
|||
# error on unset variables
|
||||
set -u
|
||||
|
||||
PO=$(jsonnet -J scripts/generate/vendor jsonnet/thanos/thanos.jsonnet)
|
||||
PO=$(jsonnet -J scripts/generate/vendor scripts/generate/thanos.jsonnet)
|
||||
echo "$PO" | jq -r 'keys[]' | while read -r file
|
||||
do
|
||||
echo "$PO" | jq -r ".[\"${file}\"]" | gojsontoyaml > "example/thanos/${file}"
|
||||
|
|
|
@ -8,6 +8,14 @@
|
|||
}
|
||||
},
|
||||
"version": "."
|
||||
},
|
||||
{
|
||||
"source": {
|
||||
"local": {
|
||||
"directory": "../../jsonnet/thanos"
|
||||
}
|
||||
},
|
||||
"version": "."
|
||||
}
|
||||
],
|
||||
"legacyImports": true
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
local po = (import 'config.libsonnet').thanos;
|
||||
local po = (import 'thanos/config.libsonnet').thanos;
|
||||
|
||||
{
|
||||
'prometheus.yaml': po.prometheus,
|
Loading…
Add table
Add a link
Reference in a new issue