1
0
Fork 0
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:
mikechengwei 2021-01-06 02:10:07 +08:00
parent 19927edb56
commit 9798b98df1
11 changed files with 160 additions and 114 deletions

View file

@ -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

View file

@ -23,3 +23,5 @@ rules:
- get
- nonResourceURLs:
- /metrics
verbs:
- get

View file

@ -2,6 +2,7 @@ apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
app: prometheus
prometheus: self
name: prometheus-self
namespace: default

View file

@ -30,10 +30,3 @@ spec:
name: http
- containerPort: 10901
name: grpc
resources:
limits:
cpu: 200m
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi

View file

@ -8,7 +8,7 @@ metadata:
spec:
ports:
- name: http
port: 9090
port: 10902
targetPort: http
selector:
app: thanos-query

View file

@ -2,7 +2,7 @@ apiVersion: v1
kind: Service
metadata:
labels:
app: thanos-query
app: thanos-sidecar
name: thanos-sidecar
namespace: default
spec:

View file

@ -6,7 +6,6 @@ metadata:
name: thanos-ruler
namespace: default
spec:
clusterIP: None
ports:
- name: grpc
port: 10901

View file

@ -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',
}]
)
}
}

View file

@ -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}"

View file

@ -8,6 +8,14 @@
}
},
"version": "."
},
{
"source": {
"local": {
"directory": "../../jsonnet/thanos"
}
},
"version": "."
}
],
"legacyImports": true

View file

@ -1,4 +1,4 @@
local po = (import 'config.libsonnet').thanos;
local po = (import 'thanos/config.libsonnet').thanos;
{
'prometheus.yaml': po.prometheus,