Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions example.jsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ local kp =
{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } +
{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } +
{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } +
{ ['perses-operator-' + name]: kp.persesOperator[name] for name in std.objectFields(kp.persesOperator) } +
// { ['pyrra-' + name]: kp.pyrra[name] for name in std.objectFields(kp.pyrra) if name != 'crd' } +
{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } +
{ ['kubernetes-' + name]: kp.kubernetesControlPlane[name] for name in std.objectFields(kp.kubernetesControlPlane) }
Expand Down
197 changes: 197 additions & 0 deletions jsonnet/kube-prometheus/components/perses-operator.libsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
local persesOperator = import 'github.com/perses/perses-operator/jsonnet/perses-operator.libsonnet';
local communityDashboards = import 'github.com/saswatamcode/community-dashboards/jsonnet/dashboards.libsonnet';

local defaults = {
local defaults = self,
name:: 'perses-operator',
namespace:: error 'must provide namespace',
version:: error 'must provide version',
image:: error 'must provide image',
persesImage:: error 'must provide perses image',
prometheusName:: error 'must provide prometheus name',
components:: error 'must provide components',
resources:: {
requests: { cpu: '100m', memory: '100Mi' },
limits: { cpu: '200m', memory: '200Mi' },
},
commonLabels:: {
'app.kubernetes.io/name': defaults.name,
'app.kubernetes.io/version': defaults.version,
'app.kubernetes.io/component': 'perses-operator',
'app.kubernetes.io/part-of': 'kube-prometheus',
},
selectorLabels:: {
[labelName]: defaults.commonLabels[labelName]
for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version'])
},
};

function(params)
local config = defaults + params;
// Safety check
assert std.isObject(config.resources);
assert std.isArray(config.components);

local po = persesOperator(config);
local cd = communityDashboards(config {
datasource: 'prometheus-' + config.prometheusName + '-datasource',
});

po {
deployment+: {
spec+: {
template+: {
spec+: {
automountServiceAccountToken: false,
securityContext+: {
runAsGroup: 65534,
},
},
},
},
},
} + {
[dashboard.metadata.name]: dashboard
for dashboard in cd.dashboards
} + {
datasource: {
apiVersion: 'perses.dev/v1alpha1',
kind: 'PersesDatasource',
metadata: {
name: 'prometheus-' + config.prometheusName + '-datasource',
labels: config.commonLabels {
'app.kubernetes.io/instance': 'perses-datasource',
},
namespace: config.namespace,
},
spec: {
config: {
default: true,
display: {
name: 'Prometheus ' + config.prometheusName + ' Datasource',
},
plugin: {
kind: 'PrometheusDatasource',
spec: {
proxy: {
kind: 'HTTPProxy',
spec: {
url: 'http://prometheus-' + config.prometheusName + '.' + config.namespace + '.svc:9090',
},
},
},
},
},
},
},
} + {
perses: {
apiVersion: 'perses.dev/v1alpha1',
kind: 'Perses',
metadata: {
finalizers: ['perses.dev/finalizer'],
labels: config.commonLabels {
'app.kubernetes.io/instance': 'perses-' + config.prometheusName,
},
name: 'perses-' + config.prometheusName,
namespace: config.namespace,
},
spec: {
image: config.persesImage,
config: {
database: {
file: {
extension: 'yaml',
folder: '/perses',
case_sensitive: false,
},
},
ephemeral_dashboard: {
cleanup_interval: '1s',
enable: true,
},
frontend: {
disable: false,
explorer: {
enable: true,
},
time_range: {
disable_custom: false,
},
},
security: {
authentication: {
disable_sign_up: false,
providers: {
enable_native: false,
},
},
cookie: {
secure: false,
},
enable_auth: false,
readonly: false,
},
},
containerPort: 8080,
livenessProbe: {
failureThreshold: 5,
initialDelaySeconds: 10,
periodSeconds: 10,
successThreshold: 1,
timeoutSeconds: 5,
},
readinessProbe: {
failureThreshold: 5,
initialDelaySeconds: 10,
periodSeconds: 10,
successThreshold: 1,
timeoutSeconds: 5,
},
storage: {
size: '1Gi',
},
metadata: {
labels: {
'app.kubernetes.io/instance': 'perses-' + config.prometheusName,
},
},
},
},
} + {
//TODO(saswatamcode): Add proper labels.
networkPolicy: {
apiVersion: 'networking.k8s.io/v1',
kind: 'NetworkPolicy',
metadata: {
name: 'perses-' + config.prometheusName,
namespace: config.namespace,
labels: config.commonLabels {
'app.kubernetes.io/instance': 'perses-' + config.prometheusName,
},
},
spec: {
podSelector: {
matchLabels: config.selectorLabels,
},
policyTypes: ['Egress', 'Ingress'],
egress: [{}],
ingress: [{
from: [{
podSelector: {
matchLabels: {
'app.kubernetes.io/name': 'prometheus',
},
},
}],
ports: [
{
port: 8080,
protocol: 'TCP',
},
],
}],
},
},
}
20 changes: 20 additions & 0 deletions jsonnet/kube-prometheus/jsonnetfile.json
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,26 @@
},
"version": "main",
"name": "thanos-mixin"
},
{
"source": {
"git": {
"remote": "https://github.com/perses/perses-operator",
"subdir": "jsonnet"
}
},
"version": "main",
"name": "perses-operator"
},
{
"source": {
"git": {
"remote": "https://github.com/saswatamcode/community-dashboards",
"subdir": "jsonnet"
}
},
"version": "c3b0b402c32ae174a1a517ac52dc90b50259435a",
"name": "community-dashboards"
}
],
"legacyImports": true
Expand Down
14 changes: 14 additions & 0 deletions jsonnet/kube-prometheus/main.libsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ local kubernetesControlPlane = import './components/k8s-control-plane.libsonnet'
local kubeStateMetrics = import './components/kube-state-metrics.libsonnet';
local customMixin = import './components/mixin/custom.libsonnet';
local nodeExporter = import './components/node-exporter.libsonnet';
local persesOperator = import './components/perses-operator.libsonnet';
local prometheusAdapter = import './components/prometheus-adapter.libsonnet';
local prometheusOperator = import './components/prometheus-operator.libsonnet';
local prometheus = import './components/prometheus.libsonnet';
Expand All @@ -28,6 +29,8 @@ local utils = import './lib/utils.libsonnet';
alertmanager: error 'must provide version',
blackboxExporter: error 'must provide version',
grafana: error 'must provide version',
persesOperator: error 'must provide version',
perses: error 'must provide version',
kubeStateMetrics: error 'must provide version',
nodeExporter: error 'must provide version',
prometheus: error 'must provide version',
Expand All @@ -40,6 +43,8 @@ local utils = import './lib/utils.libsonnet';
alertmanager: 'quay.io/prometheus/alertmanager:v' + $.values.common.versions.alertmanager,
blackboxExporter: 'quay.io/prometheus/blackbox-exporter:v' + $.values.common.versions.blackboxExporter,
grafana: 'grafana/grafana:' + $.values.common.versions.grafana,
perses: 'persesdev/perses:v' + $.values.common.versions.perses,
persesOperator: 'persesdev/perses-operator:v' + $.values.common.versions.persesOperator,
kubeStateMetrics: 'registry.k8s.io/kube-state-metrics/kube-state-metrics:v' + $.values.common.versions.kubeStateMetrics,
nodeExporter: 'quay.io/prometheus/node-exporter:v' + $.values.common.versions.nodeExporter,
prometheus: 'quay.io/prometheus/prometheus:v' + $.values.common.versions.prometheus,
Expand Down Expand Up @@ -77,6 +82,14 @@ local utils = import './lib/utils.libsonnet';
$.grafana.mixin.grafanaDashboards,
mixin+: { ruleLabels: $.values.common.ruleLabels },
},
persesOperator: {
namespace: $.values.common.namespace,
version: $.values.common.versions.persesOperator,
image: $.values.common.images.persesOperator,
persesImage: $.values.common.images.perses,
prometheusName: $.values.prometheus.name,
components: ['kubernetes', 'etcd', 'node-exporter', 'alertmanager', 'prometheus', 'perses'],
},
kubeStateMetrics: {
namespace: $.values.common.namespace,
version: $.values.common.versions.kubeStateMetrics,
Expand Down Expand Up @@ -133,6 +146,7 @@ local utils = import './lib/utils.libsonnet';
alertmanager: alertmanager($.values.alertmanager),
blackboxExporter: blackboxExporter($.values.blackboxExporter),
grafana: grafana($.values.grafana),
persesOperator: persesOperator($.values.persesOperator),
kubeStateMetrics: kubeStateMetrics($.values.kubeStateMetrics),
nodeExporter: nodeExporter($.values.nodeExporter),
prometheus: prometheus($.values.prometheus),
Expand Down
2 changes: 2 additions & 0 deletions jsonnet/kube-prometheus/versions.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
"alertmanager": "0.28.1",
"blackboxExporter": "0.26.0",
"grafana": "12.0.0",
"perses": "0.51.0-rc.0",
"persesOperator": "0.1.10",
"kubeStateMetrics": "2.15.0",
"nodeExporter": "1.9.1",
"prometheus": "3.3.1",
Expand Down
Loading
Loading