Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #153 from kakkoyun/obs_api_stage
Add Observatorium API manifests
  • Loading branch information
squat committed Jan 15, 2020
2 parents 87d15f2 + 3997e4d commit ac03e86
Show file tree
Hide file tree
Showing 12 changed files with 467 additions and 0 deletions.
1 change: 1 addition & 0 deletions build.sh
Expand Up @@ -23,6 +23,7 @@ jsonnet -J vendor environments/openshift/telemeter-prometheus-ams.jsonnet | gojs
jsonnet -J vendor environments/openshift/telemeter.jsonnet | gojsontoyaml >environments/openshift/manifests/telemeter-template.yaml
jsonnet -J vendor environments/openshift/thanos.jsonnet | gojsontoyaml >environments/openshift/manifests/thanos-template.yaml
jsonnet -J vendor environments/openshift/jaeger.jsonnet | gojsontoyaml >environments/openshift/manifests/jaeger-template.yaml
jsonnet -J vendor environments/openshift/observatorium-api.jsonnet | gojsontoyaml >environments/openshift/manifests/observatorium-api-template.yaml
find environments/openshift/manifests -type f ! -name '*.yaml' -delete

# Make sure to start with a clean 'servicemonitors' dir
Expand Down
2 changes: 2 additions & 0 deletions environments/kubernetes/main.jsonnet
@@ -1,8 +1,10 @@
local app =
(import 'kube-thanos.libsonnet') +
(import 'telemeter.libsonnet') +
(import 'observatorium.libsonnet') +
(import 'jaeger.libsonnet');

{ ['observatorium-api-' + name]: app.observatorium.api[name] for name in std.objectFields(app.observatorium.api) } +
{ ['thanos-querier-' + name]: app.thanos.querier[name] for name in std.objectFields(app.thanos.querier) } +
{ ['thanos-receive-' + name]: app.thanos.receive[name] for name in std.objectFields(app.thanos.receive) } +
{ ['thanos-compactor-' + name]: app.thanos.compactor[name] for name in std.objectFields(app.thanos.compactor) } +
Expand Down
@@ -0,0 +1,55 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: observatorium-api
name: observatorium-api
namespace: observatorium
spec:
replicas: 3
selector:
matchLabels:
app.kubernetes.io/name: observatorium-api
strategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
template:
metadata:
labels:
app.kubernetes.io/name: observatorium-api
spec:
containers:
- args:
- --web.listen=0.0.0.0:8080
- --metrics.ui.endpoint=http://thanos-querier.observatorium.svc.cluster.local:9090
- --metrics.query.endpoint=http://observatorium-cache.observatorium.svc.cluster.local:9090/api/v1/query
- --metrics.write.endpoint=http://thanos-receive.observatorium.svc.cluster.local:19291/api/v1/receive
- --log.level=warn
image: quay.io/observatorium/observatorium:latest
livenessProbe:
failureThreshold: 4
httpGet:
path: /-/healthy
port: 8080
scheme: HTTP
periodSeconds: 30
name: observatorium-api
ports:
- containerPort: 8080
name: http
readinessProbe:
failureThreshold: 3
httpGet:
path: /-/ready
port: 8080
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 30
resources:
limits:
cpu: "2"
memory: 1Gi
requests:
cpu: "1"
memory: 256Mi
11 changes: 11 additions & 0 deletions environments/kubernetes/manifests/observatorium-api-service.yaml
@@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: observatorium-api
spec:
ports:
- name: http
port: 8080
targetPort: 8080
selector:
app.kubernetes.io/name: observatorium-api
42 changes: 42 additions & 0 deletions environments/kubernetes/observatorium.libsonnet
@@ -0,0 +1,42 @@
local kt = (import 'kube-thanos.libsonnet');

(import 'observatorium/observatorium-api.libsonnet') {
observatorium+:: {
namespace:: 'observatorium',
api+: {
replicas:: 3,
deployment+: {
spec+: {
template+: {
spec+: {
containers: [
super.containers[0]
{
args: [
'--web.listen=0.0.0.0:8080',
'--metrics.ui.endpoint=http://%s.%s.svc.cluster.local:%d' % [
kt.thanos.querier.service.metadata.name,
kt.thanos.querier.service.metadata.namespace,
kt.thanos.querier.service.spec.ports[1].port,
],
'--metrics.query.endpoint=http://%s.%s.svc.cluster.local:%d/api/v1/query' % [
kt.thanos.querierCache.service.metadata.name,
kt.thanos.querierCache.service.metadata.namespace,
kt.thanos.querierCache.service.spec.ports[0].port,
],
'--metrics.write.endpoint=http://%s.%s.svc.cluster.local:%d/api/v1/receive' % [
kt.thanos.receive.service.metadata.name,
kt.thanos.receive.service.metadata.namespace,
kt.thanos.receive.service.spec.ports[2].port,
],
'--log.level=warn',
],
},
],
},
},
},
},
},
},
}
147 changes: 147 additions & 0 deletions environments/openshift/manifests/observatorium-api-template.yaml
@@ -0,0 +1,147 @@
apiVersion: v1
kind: Template
metadata:
name: observatorium-api
objects:
- apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: observatorium-api
name: observatorium-api
namespace: ${NAMESPACE}
spec:
replicas: ${OBSERVATORIUM_API_REPLICAS}
selector:
matchLabels:
app.kubernetes.io/name: observatorium-api
strategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
template:
metadata:
labels:
app.kubernetes.io/name: observatorium-api
spec:
containers:
- args:
- --web.listen=0.0.0.0:8080
- --metrics.ui.endpoint=http://thanos-querier.observatorium.svc.cluster.local:9090
- --metrics.query.endpoint=http://observatorium-cache.observatorium.svc.cluster.local:9090/api/v1/query
- --metrics.write.endpoint=http://thanos-receive.observatorium.svc.cluster.local:19291/api/v1/receive
- --log.level=warn
image: ${OBSERVATORIUM_API_IMAGE}:${OBSERVATORIUM_API_IMAGE_TAG}
livenessProbe:
failureThreshold: 4
httpGet:
path: /-/healthy
port: 8080
scheme: HTTP
periodSeconds: 30
name: observatorium-api
ports:
- containerPort: 8080
name: http
readinessProbe:
failureThreshold: 3
httpGet:
path: /-/ready
port: 8080
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 30
resources:
limits:
cpu: ${OBSERVATORIUM_API_CPU_LIMIT}
memory: ${OBSERVATORIUM_API_MEMORY_LIMIT}
requests:
cpu: ${OBSERVATORIUM_API_CPU_REQUEST}
memory: ${OBSERVATORIUM_API_MEMORY_REQUEST}
- args:
- -provider=openshift
- -https-address=:8081
- -http-address=
- -email-domain=*
- -upstream=http://localhost:8080
- -openshift-service-account=prometheus-telemeter
- '-openshift-sar={"resource": "namespaces", "verb": "get", "name": "${NAMESPACE}",
"namespace": "${NAMESPACE}"}'
- '-openshift-delegate-urls={"/": {"resource": "namespaces", "verb": "get",
"name": "${NAMESPACE}", "namespace": "${NAMESPACE}"}}'
- -tls-cert=/etc/tls/private/tls.crt
- -tls-key=/etc/tls/private/tls.key
- -client-secret-file=/var/run/secrets/kubernetes.io/serviceaccount/token
- -cookie-secret-file=/etc/proxy/secrets/session_secret
- -openshift-ca=/etc/pki/tls/cert.pem
- -openshift-ca=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- -skip-auth-regex=^/metrics
image: ${PROXY_IMAGE}:${PROXY_IMAGE_TAG}
name: proxy
ports:
- containerPort: 8081
name: https
volumeMounts:
- mountPath: /etc/tls/private
name: secret-api-tls
readOnly: false
- mountPath: /etc/proxy/secrets
name: secret-api-proxy
readOnly: false
serviceAccount: prometheus-telemeter
serviceAccountName: prometheus-telemeter
volumes:
- name: secret-api-tls
secret:
secretName: api-tls
- name: secret-api-proxy
secret:
secretName: api-proxy
- apiVersion: v1
data:
session_secret: ""
kind: Secret
metadata:
labels:
app.kubernetes.io/name: observatorium-api
name: observatorium-proxy
namespace: ${NAMESPACE}
type: Opaque
- apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.openshift.io/serving-cert-secret-name: observatorium-tls
name: observatorium-api
namespace: ${NAMESPACE}
spec:
ports:
- name: http
port: 8080
targetPort: 8080
- name: https
port: 8081
targetPort: https
selector:
app.kubernetes.io/name: observatorium-api
parameters:
- name: NAMESPACE
value: telemeter
- name: OBSERVATORIUM_API_IMAGE
value: quay.io/observatorium/observatorium
- name: OBSERVATORIUM_API_IMAGE_TAG
value: master-2020-01-14-d076eab
- name: PROXY_IMAGE
value: openshift/oauth-proxy
- name: PROXY_IMAGE_TAG
value: v1.1.0
- name: OBSERVATORIUM_API_REPLICAS
value: "3"
- name: OBSERVATORIUM_API_CPU_REQUEST
value: 100m
- name: OBSERVATORIUM_API_CPU_LIMIT
value: "1"
- name: OBSERVATORIUM_API_MEMORY_REQUEST
value: 256Mi
- name: OBSERVATORIUM_API_MEMORY_LIMIT
value: 1Gi
42 changes: 42 additions & 0 deletions environments/openshift/observatorium-api.jsonnet
@@ -0,0 +1,42 @@
local list = import 'telemeter/lib/list.libsonnet';

// This entire file takes what we have for Kubernetes and
// generates an OpenShift specific Template on top of that.

local app =
(import 'observatorium.libsonnet') + {
apiVersion: 'v1',
kind: 'Template',
metadata: {
name: 'observatorium',
},
objects: [
$.observatorium.api[name]
for name in std.objectFields($.observatorium.api)
],
parameters: [
{ name: 'NAMESPACE', value: 'telemeter' },
{ name: 'OBSERVATORIUM_API_IMAGE', value: 'quay.io/observatorium/observatorium' },
{ name: 'OBSERVATORIUM_API_IMAGE_TAG', value: 'master-2020-01-14-d076eab' },
{ name: 'PROXY_IMAGE', value: 'openshift/oauth-proxy' },
{ name: 'PROXY_IMAGE_TAG', value: 'v1.1.0' },
{ name: 'OBSERVATORIUM_API_REPLICAS', value: '3' },
{ name: 'OBSERVATORIUM_API_CPU_REQUEST', value: '100m' },
{ name: 'OBSERVATORIUM_API_CPU_LIMIT', value: '1' },
{ name: 'OBSERVATORIUM_API_MEMORY_REQUEST', value: '256Mi' },
{ name: 'OBSERVATORIUM_API_MEMORY_LIMIT', value: '1Gi' },
],
template:
list.asList('observatorium-api', {}, []) + {
objects: $.objects,
parameters: $.parameters,
},
} + {
template+: {
parameters:
std.filter(function(param) !(param.name == 'NAMESPACE' && param.value == 'observatorium'), super.parameters),
},
};

// Output only the template
app.template

0 comments on commit ac03e86

Please sign in to comment.