diff --git a/docs/migration-example/my.release-0.3.jsonnet b/docs/migration-example/my.release-0.3.jsonnet index 6de7c9906aa7f91b41750ed8de4eadb647a0af7f..a6a87818dd2c7eef08e4b82f194ed40b5cbe68d7 100644 --- a/docs/migration-example/my.release-0.3.jsonnet +++ b/docs/migration-example/my.release-0.3.jsonnet @@ -1,16 +1,15 @@ -# Has the following customisations -# Custom alert manager config -# Ingresses for the alert manager, prometheus and grafana -# Grafana admin user password -# Custom prometheus rules -# Custom grafana dashboards -# Custom prometheus config - Data retention, memory, etc. -# Node exporter role and role binding so we can use a PSP for the node exporter - - - -# External variables -# See https://jsonnet.org/learning/tutorial.html +// Has the following customisations +// Custom alert manager config +// Ingresses for the alert manager, prometheus and grafana +// Grafana admin user password +// Custom prometheus rules +// Custom grafana dashboards +// Custom prometheus config - Data retention, memory, etc. +// Node exporter role and role binding so we can use a PSP for the node exporter + + +// External variables +// See https://jsonnet.org/learning/tutorial.html local cluster_identifier = std.extVar('cluster_identifier'); local etcd_ip = std.extVar('etcd_ip'); local etcd_tls_ca = std.extVar('etcd_tls_ca'); @@ -21,13 +20,13 @@ local prometheus_data_retention_period = std.extVar('prometheus_data_retention_p local prometheus_request_memory = std.extVar('prometheus_request_memory'); -# Derived variables +// Derived variables local alert_manager_host = 'alertmanager.' + cluster_identifier + '.myorg.local'; local grafana_host = 'grafana.' + cluster_identifier + '.myorg.local'; local prometheus_host = 'prometheus.' + cluster_identifier + '.myorg.local'; -# Imports +// Imports local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet'; local ingress = k.extensions.v1beta1.ingress; local ingressRule = ingress.mixin.spec.rulesType; @@ -41,78 +40,71 @@ local roleRulesType = k.rbac.v1.role.rulesType; local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + (import 'kube-prometheus/kube-prometheus-kubeadm.libsonnet') + - (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + + (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + { _config+:: { - # Override namespace + // Override namespace namespace: 'monitoring', - - - - - - - # Override alert manager config - # See https://github.com/coreos/kube-prometheus/tree/master/examples/alertmanager-config-external.jsonnet + // Override alert manager config + // See https://github.com/coreos/kube-prometheus/tree/master/examples/alertmanager-config-external.jsonnet alertmanager+: { config: importstr 'alertmanager.yaml', }, - # Override etcd config - # See https://github.com/coreos/kube-prometheus/blob/master/jsonnet/kube-prometheus/kube-prometheus-static-etcd.libsonnet - # See https://github.com/coreos/kube-prometheus/blob/master/examples/etcd-skip-verify.jsonnet + // Override etcd config + // See https://github.com/coreos/kube-prometheus/blob/master/jsonnet/kube-prometheus/kube-prometheus-static-etcd.libsonnet + // See https://github.com/coreos/kube-prometheus/blob/master/examples/etcd-skip-verify.jsonnet etcd+:: { clientCA: etcd_tls_ca, clientCert: etcd_tls_cert, clientKey: etcd_tls_key, - ips: [ etcd_ip ], + ips: [etcd_ip], }, - # Override grafana config - # anonymous access - # See http://docs.grafana.org/installation/configuration/ - # See http://docs.grafana.org/auth/overview/#anonymous-authentication - # admin_password - # See http://docs.grafana.org/installation/configuration/#admin-password + // Override grafana config + // anonymous access + // See http://docs.grafana.org/installation/configuration/ + // See http://docs.grafana.org/auth/overview/#anonymous-authentication + // admin_password + // See http://docs.grafana.org/installation/configuration/#admin-password grafana+:: { config: { sections: { 'auth.anonymous': { - enabled: true + enabled: true, }, security: { - admin_password: grafana_admin_password + admin_password: grafana_admin_password, }, }, }, - }, }, - # Additional grafana dashboards + // Additional grafana dashboards grafanaDashboards+:: { 'my-specific.json': (import 'my-grafana-dashboard-definitions.json'), }, - # Alert manager needs an externalUrl + // Alert manager needs an externalUrl alertmanager+:: { alertmanager+: { spec+: { - # See https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md - # See https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/exposing-prometheus-and-alertmanager.md + // See https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md + // See https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/exposing-prometheus-and-alertmanager.md externalUrl: 'https://' + alert_manager_host, }, }, }, - # Add additional ingresses - # See https://github.com/coreos/kube-prometheus/tree/master/examples/ingress.jsonnet + // Add additional ingresses + // See https://github.com/coreos/kube-prometheus/tree/master/examples/ingress.jsonnet ingress+:: { alertmanager: ingress.new() + @@ -131,8 +123,6 @@ local kp = ingressRuleHttpPath.new() + - - ingressRuleHttpPath.mixin.backend.withServiceName('alertmanager-operated') + ingressRuleHttpPath.mixin.backend.withServicePort(9093) @@ -140,8 +130,8 @@ local kp = ) + - # Note we do not need a TLS secretName here as we are going to use the nginx-ingress default secret which is a wildcard - # secretName would need to be in the same namespace at this time, see https://github.com/kubernetes/ingress-nginx/issues/2371 + // Note we do not need a TLS secretName here as we are going to use the nginx-ingress default secret which is a wildcard + // secretName would need to be in the same namespace at this time, see https://github.com/kubernetes/ingress-nginx/issues/2371 ingress.mixin.spec.withTls( ingressTls.new() + ingressTls.withHosts(alert_manager_host) @@ -165,8 +155,6 @@ local kp = ingressRuleHttpPath.new() + - - ingressRuleHttpPath.mixin.backend.withServiceName('grafana') + ingressRuleHttpPath.mixin.backend.withServicePort(3000) @@ -174,8 +162,8 @@ local kp = ) + - # Note we do not need a TLS secretName here as we are going to use the nginx-ingress default secret which is a wildcard - # secretName would need to be in the same namespace at this time, see https://github.com/kubernetes/ingress-nginx/issues/2371 + // Note we do not need a TLS secretName here as we are going to use the nginx-ingress default secret which is a wildcard + // secretName would need to be in the same namespace at this time, see https://github.com/kubernetes/ingress-nginx/issues/2371 ingress.mixin.spec.withTls( ingressTls.new() + ingressTls.withHosts(grafana_host) @@ -199,17 +187,15 @@ local kp = ingressRuleHttpPath.new() + - - ingressRuleHttpPath.mixin.backend.withServiceName('prometheus-operated') + ingressRuleHttpPath.mixin.backend.withServicePort(9090) ), ) + - - # Note we do not need a TLS secretName here as we are going to use the nginx-ingress default secret which is a wildcard - # secretName would need to be in the same namespace at this time, see https://github.com/kubernetes/ingress-nginx/issues/2371 + + // Note we do not need a TLS secretName here as we are going to use the nginx-ingress default secret which is a wildcard + // secretName would need to be in the same namespace at this time, see https://github.com/kubernetes/ingress-nginx/issues/2371 ingress.mixin.spec.withTls( ingressTls.new() + ingressTls.withHosts(prometheus_host) @@ -217,9 +203,9 @@ local kp = }, - # Node exporter PSP role and role binding - # Add a new top level field for this, the "node-exporter" PSP already exists, so not defining here just referencing - # See https://github.com/coreos/prometheus-operator/issues/787 + // Node exporter PSP role and role binding + // Add a new top level field for this, the "node-exporter" PSP already exists, so not defining here just referencing + // See https://github.com/coreos/prometheus-operator/issues/787 nodeExporterPSP: { role: role.new() + @@ -232,7 +218,7 @@ local kp = roleRulesType.withApiGroups(['policy']) + roleRulesType.withResources(['podsecuritypolicies']) + roleRulesType.withVerbs(['use']) + - roleRulesType.withResourceNames(['node-exporter']) + roleRulesType.withResourceNames(['node-exporter']), ]), roleBinding: @@ -244,7 +230,6 @@ local kp = roleBinding.mixin.metadata.withNamespace($._config.namespace) + - roleBinding.mixin.roleRef.withName('node-exporter-psp') + roleBinding.mixin.roleRef.mixinInstance({ kind: 'Role' }) + @@ -255,48 +240,36 @@ local kp = }, - # Prometheus needs some extra custom config + // Prometheus needs some extra custom config prometheus+:: { prometheus+: { spec+: { - # See https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#prometheusspec + // See https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#prometheusspec externalLabels: { cluster: cluster_identifier, }, - # See https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md - # See https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/exposing-prometheus-and-alertmanager.md + // See https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md + // See https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/exposing-prometheus-and-alertmanager.md externalUrl: 'https://' + prometheus_host, - # Override reuest memory + // Override reuest memory resources: { requests: { memory: prometheus_request_memory, }, }, - # Override data retention period + // Override data retention period retention: prometheus_data_retention_period, }, }, }, - # Additional prometheus rules - # See https://github.com/coreos/kube-prometheus/docs/developing-prometheus-rules-and-grafana-dashboards.md - # cat my-prometheus-rules.yaml | gojsontoyaml -yamltojson | jq . > my-prometheus-rules.json + // Additional prometheus rules + // See https://github.com/coreos/kube-prometheus/docs/developing-prometheus-rules-and-grafana-dashboards.md + // cat my-prometheus-rules.yaml | gojsontoyaml -yamltojson | jq . > my-prometheus-rules.json prometheusRules+:: { - - - - - - - - - - - - groups+: import 'my-prometheus-rules.json', @@ -304,13 +277,10 @@ local kp = }; -# Render +// Render { ['00namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } + - - - { ['0prometheus-operator-' + name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } + @@ -324,4 +294,3 @@ local kp = { ['node-exporter-psp-' + name]: kp.nodeExporterPSP[name] for name in std.objectFields(kp.nodeExporterPSP) } + { ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } + { ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } - diff --git a/docs/migration-example/my.release-0.8.jsonnet b/docs/migration-example/my.release-0.8.jsonnet index e3c5a7331097bf8cf0d440361ab1d4ad4a155830..368938b2c4bb0fa8c9c735646cb8e6575ffd9c08 100644 --- a/docs/migration-example/my.release-0.8.jsonnet +++ b/docs/migration-example/my.release-0.8.jsonnet @@ -1,16 +1,16 @@ -# Has the following customisations -# Custom alert manager config -# Ingresses for the alert manager, prometheus and grafana -# Grafana admin user password -# Custom prometheus rules -# Custom grafana dashboards -# Custom prometheus config - Data retention, memory, etc. -# Node exporter role and role binding so we can use a PSP for the node exporter - -# for help with expected content, see https://github.com/thaum-xyz/ankhmorpork - -# External variables -# See https://jsonnet.org/learning/tutorial.html +// Has the following customisations +// Custom alert manager config +// Ingresses for the alert manager, prometheus and grafana +// Grafana admin user password +// Custom prometheus rules +// Custom grafana dashboards +// Custom prometheus config - Data retention, memory, etc. +// Node exporter role and role binding so we can use a PSP for the node exporter + +// for help with expected content, see https://github.com/thaum-xyz/ankhmorpork + +// External variables +// See https://jsonnet.org/learning/tutorial.html local cluster_identifier = std.extVar('cluster_identifier'); local etcd_ip = std.extVar('etcd_ip'); local etcd_tls_ca = std.extVar('etcd_tls_ca'); @@ -21,26 +21,18 @@ local prometheus_data_retention_period = std.extVar('prometheus_data_retention_p local prometheus_request_memory = std.extVar('prometheus_request_memory'); -# Derived variables +// Derived variables local alert_manager_host = 'alertmanager.' + cluster_identifier + '.myorg.local'; local grafana_host = 'grafana.' + cluster_identifier + '.myorg.local'; local prometheus_host = 'prometheus.' + cluster_identifier + '.myorg.local'; -# ksonnet no longer required - - - - - - - - +// ksonnet no longer required local kp = (import 'kube-prometheus/main.libsonnet') + - # kubeadm now achieved by setting platform value - see 9 lines below + // kubeadm now achieved by setting platform value - see 9 lines below (import 'kube-prometheus/addons/static-etcd.libsonnet') + (import 'kube-prometheus/addons/podsecuritypolicies.libsonnet') + { @@ -49,72 +41,69 @@ local kp = namespace: 'monitoring', }, - # Add kubeadm platform-specific items, - # including kube-contoller-manager and kube-scheduler discovery + // Add kubeadm platform-specific items, + // including kube-contoller-manager and kube-scheduler discovery kubePrometheus+: { - platform: 'kubeadm' + platform: 'kubeadm', }, - # Override alert manager config - # See https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/alertmanager-config-external.jsonnet + // Override alert manager config + // See https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/alertmanager-config-external.jsonnet alertmanager+: { config: importstr 'alertmanager.yaml', }, - # Override etcd config - # See https://github.com/prometheus-operator/kube-prometheus/blob/main/jsonnet/kube-prometheus/addons/static-etcd.libsonnet - # See https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/etcd-skip-verify.jsonnet + // Override etcd config + // See https://github.com/prometheus-operator/kube-prometheus/blob/main/jsonnet/kube-prometheus/addons/static-etcd.libsonnet + // See https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/etcd-skip-verify.jsonnet etcd+:: { clientCA: etcd_tls_ca, clientCert: etcd_tls_cert, clientKey: etcd_tls_key, - ips: [ etcd_ip ], + ips: [etcd_ip], }, - # Override grafana config - # anonymous access - # See http://docs.grafana.org/installation/configuration/ - # See http://docs.grafana.org/auth/overview/#anonymous-authentication - # admin_password - # See http://docs.grafana.org/installation/configuration/#admin-password + // Override grafana config + // anonymous access + // See http://docs.grafana.org/installation/configuration/ + // See http://docs.grafana.org/auth/overview/#anonymous-authentication + // admin_password + // See http://docs.grafana.org/installation/configuration/#admin-password grafana+:: { config: { sections: { 'auth.anonymous': { - enabled: true + enabled: true, }, security: { - admin_password: grafana_admin_password + admin_password: grafana_admin_password, }, }, }, - # Additional grafana dashboards + // Additional grafana dashboards dashboards+:: { 'my-specific.json': (import 'my-grafana-dashboard-definitions.json'), - } + }, }, }, - - - - # Alert manager needs an externalUrl + // Alert manager needs an externalUrl alertmanager+:: { alertmanager+: { spec+: { - # See https://github.com/prometheus-operator/kube-prometheus/blob/main/docs/exposing-prometheus-alertmanager-grafana-ingress.md + // See https://github.com/prometheus-operator/kube-prometheus/blob/main/docs/exposing-prometheus-alertmanager-grafana-ingress.md externalUrl: 'https://' + alert_manager_host, }, }, }, - # Add additional ingresses - # See https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/ingress.jsonnet + // Add additional ingresses + // See https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/ingress.jsonnet ingress+:: { - 'alertmanager': { + alertmanager: { apiVersion: 'networking.k8s.io/v1', kind: 'Ingress', metadata: { @@ -148,7 +137,7 @@ local kp = }], }, }, - 'grafana': { + grafana: { apiVersion: 'networking.k8s.io/v1', kind: 'Ingress', metadata: { @@ -182,7 +171,7 @@ local kp = }], }, }, - 'prometheus': { + prometheus: { apiVersion: 'networking.k8s.io/v1', kind: 'Ingress', metadata: { @@ -219,7 +208,7 @@ local kp = }, - # Node exporter PSP role and role binding + // Node exporter PSP role and role binding nodeExporter+: { 'psp-role'+: { apiVersion: 'rbac.authorization.k8s.io/v1', @@ -232,7 +221,7 @@ local kp = apiGroups: ['policy'], resources: ['podsecuritypolicies'], verbs: ['use'], - resourceNames: ['node-exporter'] + resourceNames: ['node-exporter'], }], }, 'psp-rolebinding'+: { @@ -250,12 +239,12 @@ local kp = }, subjects: [{ kind: 'ServiceAccount', - name: 'node-exporter' + name: 'node-exporter', }], }, }, - # Prometheus needs some extra custom config + // Prometheus needs some extra custom config prometheus+:: { prometheus+: { spec+: { @@ -264,24 +253,24 @@ local kp = cluster: cluster_identifier, }, - # See https://github.com/prometheus-operator/kube-prometheus/blob/main/docs/exposing-prometheus-alertmanager-grafana-ingress.md + // See https://github.com/prometheus-operator/kube-prometheus/blob/main/docs/exposing-prometheus-alertmanager-grafana-ingress.md externalUrl: 'https://' + prometheus_host, - # Override reuest memory + // Override reuest memory resources: { requests: { memory: prometheus_request_memory, }, }, - # Override data retention period + // Override data retention period retention: prometheus_data_retention_period, }, }, }, - # Additional prometheus rules - # See https://github.com/prometheus-operator/kube-prometheus/blob/main/docs/developing-prometheus-rules-and-grafana-dashboards.md#pre-rendered-rules - # cat my-prometheus-rules.yaml | gojsontoyaml -yamltojson | jq . > my-prometheus-rules.json + // Additional prometheus rules + // See https://github.com/prometheus-operator/kube-prometheus/blob/main/docs/developing-prometheus-rules-and-grafana-dashboards.md#pre-rendered-rules + // cat my-prometheus-rules.yaml | gojsontoyaml -yamltojson | jq . > my-prometheus-rules.json prometheusMe: { rules: { apiVersion: 'monitoring.coreos.com/v1', @@ -292,8 +281,8 @@ local kp = labels: { 'app.kubernetes.io/name': 'kube-prometheus', 'app.kubernetes.io/part-of': 'kube-prometheus', - 'prometheus': 'k8s', - 'role': 'alert-rules' + prometheus: 'k8s', + role: 'alert-rules', }, }, spec: { @@ -304,7 +293,7 @@ local kp = }; -# Render +// Render { 'setup/0namespace-namespace': kp.kubePrometheus.namespace } + { ['setup/prometheus-operator-' + name]: kp.prometheusOperator[name]