From c8d308988077658d0a79cf9b3fa44f9f1a1e84c9 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Wed, 8 Nov 2023 18:49:56 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- enterprise/prometheus/13.0.14/CHANGELOG.md | 99 ++ enterprise/prometheus/13.0.14/Chart.yaml | 36 + enterprise/prometheus/13.0.14/LICENSE | 106 ++ enterprise/prometheus/13.0.14/README.md | 27 + .../prometheus/13.0.14/app-changelog.md | 9 + enterprise/prometheus/13.0.14/app-readme.md | 8 + .../13.0.14/charts/common-14.3.3.tgz | Bin 0 -> 73057 bytes .../charts/kube-state-metrics-3.0.35.tgz | Bin 0 -> 77836 bytes .../13.0.14/charts/node-exporter-3.0.37.tgz | Bin 0 -> 77630 bytes enterprise/prometheus/13.0.14/ix_values.yaml | 1367 ++++++++++++++++ enterprise/prometheus/13.0.14/questions.yaml | 1418 +++++++++++++++++ .../prometheus/13.0.14/templates/NOTES.txt | 1 + .../prometheus/13.0.14/templates/_helpers.tpl | 210 +++ .../templates/alertmanager/_alertmanager.tpl | 174 ++ .../templates/alertmanager/secrets.yaml | 13 + .../alertmanager/serviceaccount.yaml | 12 + .../alertmanager/servicemonitor.yaml | 26 + .../prometheus/13.0.14/templates/common.yaml | 13 + .../templates/exporters/core-dns/service.yaml | 22 + .../exporters/core-dns/servicemonitor.yaml | 29 + .../kube-apiserver/servicemonitor.yaml | 35 + .../kube-controller-manager/endpoints.yaml | 18 + .../kube-controller-manager/service.yaml | 25 + .../servicemonitor.yaml | 40 + .../exporters/kube-scheduler/endpoints.yaml | 18 + .../exporters/kube-scheduler/service.yaml | 25 + .../kube-scheduler/servicemonitor.yaml | 40 + .../exporters/kubelet/servicemonitor.yaml | 85 + .../prometheus/_additionalPrometheusRules.tpl | 15 + .../prometheus/_additionalScrapeJobs.tpl | 13 + .../templates/prometheus/_prometheus.tpl | 363 +++++ .../templates/prometheus/_servicemonitor.tpl | 29 + .../templates/prometheus/clusterrole.yaml | 41 + .../prometheus/clusterrolebinding.yaml | 15 + .../templates/prometheus/serviceaccount.yaml | 12 + enterprise/prometheus/13.0.14/values.yaml | 0 36 files changed, 4344 insertions(+) create mode 100644 enterprise/prometheus/13.0.14/CHANGELOG.md create mode 100644 enterprise/prometheus/13.0.14/Chart.yaml create mode 100644 enterprise/prometheus/13.0.14/LICENSE create mode 100644 enterprise/prometheus/13.0.14/README.md create mode 100644 enterprise/prometheus/13.0.14/app-changelog.md create mode 100644 enterprise/prometheus/13.0.14/app-readme.md create mode 100644 enterprise/prometheus/13.0.14/charts/common-14.3.3.tgz create mode 100644 enterprise/prometheus/13.0.14/charts/kube-state-metrics-3.0.35.tgz create mode 100644 enterprise/prometheus/13.0.14/charts/node-exporter-3.0.37.tgz create mode 100644 enterprise/prometheus/13.0.14/ix_values.yaml create mode 100644 enterprise/prometheus/13.0.14/questions.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/NOTES.txt create mode 100644 enterprise/prometheus/13.0.14/templates/_helpers.tpl create mode 100644 enterprise/prometheus/13.0.14/templates/alertmanager/_alertmanager.tpl create mode 100644 enterprise/prometheus/13.0.14/templates/alertmanager/secrets.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/alertmanager/serviceaccount.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/alertmanager/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/common.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/core-dns/service.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/core-dns/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/kube-apiserver/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/endpoints.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/service.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/endpoints.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/service.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/exporters/kubelet/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/prometheus/_additionalPrometheusRules.tpl create mode 100644 enterprise/prometheus/13.0.14/templates/prometheus/_additionalScrapeJobs.tpl create mode 100644 enterprise/prometheus/13.0.14/templates/prometheus/_prometheus.tpl create mode 100644 enterprise/prometheus/13.0.14/templates/prometheus/_servicemonitor.tpl create mode 100644 enterprise/prometheus/13.0.14/templates/prometheus/clusterrole.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/prometheus/clusterrolebinding.yaml create mode 100644 enterprise/prometheus/13.0.14/templates/prometheus/serviceaccount.yaml create mode 100644 enterprise/prometheus/13.0.14/values.yaml diff --git a/enterprise/prometheus/13.0.14/CHANGELOG.md b/enterprise/prometheus/13.0.14/CHANGELOG.md new file mode 100644 index 00000000000..dafb1983466 --- /dev/null +++ b/enterprise/prometheus/13.0.14/CHANGELOG.md @@ -0,0 +1,99 @@ +**Important:** +*for the complete changelog, please refer to the website* + + + + +## [prometheus-13.0.14](https://github.com/truecharts/charts/compare/prometheus-13.0.13...prometheus-13.0.14) (2023-11-08) + +### Chore + +- update container image tccr.io/truecharts/alertmanager to v0.26.0 ([#14452](https://github.com/truecharts/charts/issues/14452)) + + + + +## [prometheus-13.0.13](https://github.com/truecharts/charts/compare/prometheus-13.0.12...prometheus-13.0.13) (2023-11-08) + +### Chore + +- update helm general non-major ([#14454](https://github.com/truecharts/charts/issues/14454)) + + + + +## [prometheus-13.0.12](https://github.com/truecharts/charts/compare/prometheus-13.0.11...prometheus-13.0.12) (2023-11-05) + +### Chore + +- update helm general non-major ([#14365](https://github.com/truecharts/charts/issues/14365)) + + + + +## [prometheus-13.0.11](https://github.com/truecharts/charts/compare/prometheus-13.0.10...prometheus-13.0.11) (2023-11-03) + +### Chore + +- update helm general non-major ([#14287](https://github.com/truecharts/charts/issues/14287)) + + + + +## [prometheus-13.0.10](https://github.com/truecharts/charts/compare/prometheus-13.0.9...prometheus-13.0.10) (2023-10-29) + +### Chore + +- Fix typo in categories and make them singular ([#13693](https://github.com/truecharts/charts/issues/13693)) + - update helm general non-major ([#14094](https://github.com/truecharts/charts/issues/14094)) + + + + +## [prometheus-13.0.9](https://github.com/truecharts/charts/compare/prometheus-13.0.8...prometheus-13.0.9) (2023-10-24) + +### Chore + +- update container image tccr.io/truecharts/thanos to v0.32.5 ([#13785](https://github.com/truecharts/charts/issues/13785)) + + + + +## [prometheus-13.0.8](https://github.com/truecharts/charts/compare/prometheus-13.0.7...prometheus-13.0.8) (2023-10-15) + +### Chore + +- update container image tccr.io/truecharts/prometheus to v2.47.2 ([#13632](https://github.com/truecharts/charts/issues/13632)) + + + + +## [prometheus-13.0.7](https://github.com/truecharts/charts/compare/prometheus-13.0.6...prometheus-13.0.7) (2023-10-11) + +### Chore + +- update container image tccr.io/truecharts/prometheus to v2.47.1 ([#13503](https://github.com/truecharts/charts/issues/13503)) + + + + +## [prometheus-13.0.6](https://github.com/truecharts/charts/compare/prometheus-13.0.5...prometheus-13.0.6) (2023-10-11) + +### Chore + +- update container image tccr.io/truecharts/alertmanager to v0.26.0 ([#13489](https://github.com/truecharts/charts/issues/13489)) + + + + +## [prometheus-13.0.5](https://github.com/truecharts/charts/compare/prometheus-13.0.4...prometheus-13.0.5) (2023-10-09) + +### Chore + +- update container image tccr.io/truecharts/prometheus to v2.47.1 ([#13448](https://github.com/truecharts/charts/issues/13448)) + + + + +## [prometheus-13.0.4](https://github.com/truecharts/charts/compare/prometheus-13.0.3...prometheus-13.0.4) (2023-10-07) + diff --git a/enterprise/prometheus/13.0.14/Chart.yaml b/enterprise/prometheus/13.0.14/Chart.yaml new file mode 100644 index 00000000000..898b8bb0d99 --- /dev/null +++ b/enterprise/prometheus/13.0.14/Chart.yaml @@ -0,0 +1,36 @@ +apiVersion: v2 +appVersion: "2.47.2" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 14.3.3 + - condition: exporters.enabled,exporters.node-exporter.enabled + name: node-exporter + repository: https://deps.truecharts.org + version: 3.0.37 + - condition: exporters.enabled,exporters.kube-state-metrics.enabled + name: kube-state-metrics + repository: https://deps.truecharts.org + version: 3.0.35 +deprecated: false +description: kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards, and Prometheus rules combined with documentation and scripts to provide easy to operate end-to-end Kubernetes cluster monitoring with Prometheus using the Prometheus Operator. +icon: https://truecharts.org/img/hotlink-ok/chart-icons/prometheus.png +home: https://truecharts.org/charts/enterprise/prometheus +keywords: + - metrics +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: prometheus +sources: + - https://github.com/truecharts/charts/tree/master/charts/enterprise/prometheus + - https://github.com/prometheus-community/helm-charts + - https://github.com/prometheus-operator/kube-prometheus +type: application +version: 13.0.14 +annotations: + truecharts.org/category: metrics + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/enterprise/prometheus/13.0.14/LICENSE b/enterprise/prometheus/13.0.14/LICENSE new file mode 100644 index 00000000000..c30fceb4a5b --- /dev/null +++ b/enterprise/prometheus/13.0.14/LICENSE @@ -0,0 +1,106 @@ +Business Source License 1.1 + +Parameters + +Licensor: The TrueCharts Project, it's owner and it's contributors +Licensed Work: The TrueCharts "Prometheus" Helm Chart +Additional Use Grant: You may use the licensed work in production, as long + as it is directly sourced from a TrueCharts provided + official repository, catalog or source. You may also make private + modification to the directly sourced licenced work, + when used in production. + + The following cases are, due to their nature, also + defined as 'production use' and explicitly prohibited: + - Bundling, including or displaying the licensed work + with(in) another work intended for production use, + with the apparent intend of facilitating and/or + promoting production use by third parties in + violation of this license. + +Change Date: 2050-01-01 + +Change License: 3-clause BSD license + +For information about alternative licensing arrangements for the Software, +please contact: legal@truecharts.org + +Notice + +The Business Source License (this document, or the “License”) is not an Open +Source license. However, the Licensed Work will eventually be made available +under an Open Source License, as stated in this License. + +License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved. +“Business Source License” is a trademark of MariaDB Corporation Ab. + +----------------------------------------------------------------------------- + +Business Source License 1.1 + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited +production use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under +the terms of the Change License, and the rights granted in the paragraph +above terminate. + +If your use of the Licensed Work does not comply with the requirements +currently in effect as described in this License, you must purchase a +commercial license from the Licensor, its affiliated entities, or authorized +resellers, or you must refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works +of the Licensed Work, are subject to this License. This License applies +separately for each version of the Licensed Work and the Change Date may vary +for each version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy +of the Licensed Work. If you receive the Licensed Work in original or +modified form from a third party, the terms and conditions set forth in this +License apply to your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other +versions of the Licensed Work. + +This License does not grant you any right in any trademark or logo of +Licensor or its affiliates (provided that you may use a trademark or logo of +Licensor as expressly required by this License). + +TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON +AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, +EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND +TITLE. + +MariaDB hereby grants you permission to use this License’s text to license +your works, and to refer to it using the trademark “Business Source License”, +as long as you comply with the Covenants of Licensor below. + +Covenants of Licensor + +In consideration of the right to use this License’s text and the “Business +Source License” name and trademark, Licensor covenants to MariaDB, and to all +other recipients of the licensed work to be provided by Licensor: + +1. To specify as the Change License the GPL Version 2.0 or any later version, + or a license that is compatible with GPL Version 2.0 or a later version, + where “compatible” means that software provided under the Change License can + be included in a program with software provided under GPL Version 2.0 or a + later version. Licensor may specify additional Change Licenses without + limitation. + +2. To either: (a) specify an additional grant of rights to use that does not + impose any additional restriction on the right granted in this License, as + the Additional Use Grant; or (b) insert the text “None”. + +3. To specify a Change Date. + +4. Not to modify this License in any other way. diff --git a/enterprise/prometheus/13.0.14/README.md b/enterprise/prometheus/13.0.14/README.md new file mode 100644 index 00000000000..f8a41e479fe --- /dev/null +++ b/enterprise/prometheus/13.0.14/README.md @@ -0,0 +1,27 @@ +# README + +## General Info + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/enterprise/) + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** + + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! + +*All Rights Reserved - The TrueCharts Project* diff --git a/enterprise/prometheus/13.0.14/app-changelog.md b/enterprise/prometheus/13.0.14/app-changelog.md new file mode 100644 index 00000000000..b25dc66890a --- /dev/null +++ b/enterprise/prometheus/13.0.14/app-changelog.md @@ -0,0 +1,9 @@ + + +## [prometheus-13.0.14](https://github.com/truecharts/charts/compare/prometheus-13.0.13...prometheus-13.0.14) (2023-11-08) + +### Chore + +- update container image tccr.io/truecharts/alertmanager to v0.26.0 ([#14452](https://github.com/truecharts/charts/issues/14452)) + + \ No newline at end of file diff --git a/enterprise/prometheus/13.0.14/app-readme.md b/enterprise/prometheus/13.0.14/app-readme.md new file mode 100644 index 00000000000..93f59634eaa --- /dev/null +++ b/enterprise/prometheus/13.0.14/app-readme.md @@ -0,0 +1,8 @@ +kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards, and Prometheus rules combined with documentation and scripts to provide easy to operate end-to-end Kubernetes cluster monitoring with Prometheus using the Prometheus Operator. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/enterprise/prometheus](https://truecharts.org/charts/enterprise/prometheus) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! diff --git a/enterprise/prometheus/13.0.14/charts/common-14.3.3.tgz b/enterprise/prometheus/13.0.14/charts/common-14.3.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8b31be8f043bd0f7c4558bd516cf502876c2fd79 GIT binary patch literal 73057 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 literal 0 HcmV?d00001 diff --git a/enterprise/prometheus/13.0.14/charts/kube-state-metrics-3.0.35.tgz b/enterprise/prometheus/13.0.14/charts/kube-state-metrics-3.0.35.tgz new file mode 100644 index 0000000000000000000000000000000000000000..5375688ac96ebbad81737d54f15a93ac955fd407 GIT binary patch literal 77836 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 M|6HxP^#EiE03#@4{r~^~ literal 0 HcmV?d00001 diff --git a/enterprise/prometheus/13.0.14/ix_values.yaml b/enterprise/prometheus/13.0.14/ix_values.yaml new file mode 100644 index 00000000000..cfb7f7d95dd --- /dev/null +++ b/enterprise/prometheus/13.0.14/ix_values.yaml @@ -0,0 +1,1367 @@ +image: + repository: tccr.io/truecharts/prometheus + tag: v2.47.2@sha256:609ae6b1d62ee388d8dd552430985bbb332984b6aaa5df5dc62605dfe1f2e035 + +thanosImage: + repository: tccr.io/truecharts/thanos + tag: v0.32.5@sha256:4cea5ca36f1567993344c3375b9a80d8073dbc8d530656644d36c90683f96464 + +alertmanagerImage: + repository: tccr.io/truecharts/alertmanager + tag: v0.26.0@sha256:f0bbf30d4901be33855b0fb4b71e3d7410b872a33b9d08cd2d7ed576505e40a8 + +global: + labels: {} +workload: + main: + enabled: false + podSpec: + containers: + main: + enabled: false + probes: + liveness: + enabled: false + readiness: + enabled: false + startup: + enabled: false + +service: + main: + selectorLabels: + app.kubernetes.io/name: prometheus + prometheus: '{{ template "kube-prometheus.prometheus.fullname" . }}' + ports: + main: + port: 10086 + targetPort: 9090 + protocol: http + alertmanager: + enabled: true + selectorLabels: + app.kubernetes.io/name: alertmanager + alertmanager: '{{ template "kube-prometheus.alertmanager.fullname" . }}' + ports: + alertmanager: + enabled: true + port: 10087 + targetPort: 9093 + protocol: http + thanos: + enabled: true + selectorLabels: + app.kubernetes.io/name: prometheus + prometheus: '{{ template "kube-prometheus.prometheus.fullname" . }}' + ports: + thanos: + enabled: true + port: 10901 + targetPort: 10901 + protocol: http + +ingress: + main: + enabled: false + alertmanager: + enabled: false + thanos: + enabled: false + +#### +## Operator Config +#### + +env: + PROMETHEUS_CONFIG_RELOADER: + configMapKeyRef: + name: prometheus-operator-config + key: prometheus-config-reloader + +podOptions: + automountServiceAccountToken: true + +rbac: + main: + enabled: true + primary: true + clusterWide: true + rules: + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - create + - apiGroups: + - apiextensions.k8s.io + resourceNames: + - alertmanagers.monitoring.coreos.com + - podmonitors.monitoring.coreos.com + - prometheuses.monitoring.coreos.com + - prometheusrules.monitoring.coreos.com + - servicemonitors.monitoring.coreos.com + - thanosrulers.monitoring.coreos.com + - probes.monitoring.coreos.com + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - monitoring.coreos.com + resources: + - alertmanagers + - alertmanagers/finalizers + - alertmanagerconfigs + - prometheuses + - prometheuses/finalizers + - thanosrulers + - thanosrulers/finalizers + - servicemonitors + - podmonitors + - probes + - prometheusrules + verbs: + - "*" + - apiGroups: + - apps + resources: + - statefulsets + verbs: + - "*" + - apiGroups: + - "" + resources: + - configmaps + - secrets + verbs: + - "*" + - apiGroups: + - "" + resources: + - pods + verbs: + - list + - delete + - apiGroups: + - "" + resources: + - services + - services/finalizers + - endpoints + verbs: + - get + - create + - update + - delete + - apiGroups: + - "" + resources: + - nodes + verbs: + - list + - watch + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch + - apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - watch + +# -- The service account the pods will use to interact with the Kubernetes API +serviceAccount: + main: + enabled: true + primary: true + +securityContext: + readOnlyRootFilesystem: false + +probes: + # -- Liveness probe configuration + # @default -- See below + liveness: + custom: true + spec: + httpGet: + path: "/metrics" + port: promop + scheme: HTTP + + # -- Redainess probe configuration + # @default -- See below + readiness: + custom: true + spec: + httpGet: + path: "/metrics" + port: promop + scheme: HTTP + + # -- Startup probe configuration + # @default -- See below + startup: + custom: true + spec: + httpGet: + path: "/metrics" + port: promop + scheme: HTTP + +operator: + ## Create a servicemonitor for the operator + ## + serviceMonitor: + ## @param operator.serviceMonitor.enabled Creates a ServiceMonitor to monitor Prometheus Operator + ## + enabled: false + ## @param operator.serviceMonitor.interval Scrape interval (use by default, falling back to Prometheus' default) + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint + ## + interval: "" + ## @param operator.serviceMonitor.metricRelabelings Metric relabeling + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs + ## + metricRelabelings: [] + ## @param operator.serviceMonitor.relabelings Relabel configs + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config + ## + relabelings: [] + + ## Prometheus Configmap-reload image to use for reloading configmaps + ## defaults to Bitnami Prometheus Operator (ref: https://hub.docker.com/r/tccr.io/truecharts/prometheus-operator/tags/) + ## + prometheusConfigReloader: + containerSecurityContext: + enabled: true + readOnlyRootFilesystem: false + allowPrivilegeEscalation: false + runAsNonRoot: true + capabilities: + drop: + - ALL + + livenessProbe: + enabled: true + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + successThreshold: 1 + + readinessProbe: + enabled: true + initialDelaySeconds: 15 + periodSeconds: 20 + timeoutSeconds: 5 + failureThreshold: 6 + successThreshold: 1 + +#### +## Prometheus Config (Spawned by Operator) +#### + +## Deploy a Prometheus instance +## +prometheus: + ## @param prometheus.enabled Deploy Prometheus to the cluster + ## + enabled: true + ## Bitnami Prometheus image version + ## ref: https://hub.docker.com/r/tccr.io/truecharts/prometheus/tags/ + ## @param prometheus.image.registry Prometheus image registry + ## @param prometheus.image.repository Prometheus image repository + ## @param prometheus.image.tag Prometheus Image tag (immutable tags are recommended) + ## @param prometheus.image.pullSecrets Specify docker-registry secret names as an array + ## + ## Service account for Prometheus to use. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ + ## + serviceAccount: + ## @param prometheus.serviceAccount.create Specify whether to create a ServiceAccount for Prometheus + ## + create: true + ## @param prometheus.serviceAccount.name The name of the ServiceAccount to create + ## If not set and create is true, a name is generated using the kube-prometheus.prometheus.fullname template + name: "" + ## @param prometheus.serviceAccount.annotations Additional annotations for created Prometheus ServiceAccount + ## annotations: + ## eks.amazonaws.com/role-arn: arn:aws:iam::ACCOUNT:role/prometheus + ## + annotations: {} + ## Prometheus pods' Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param prometheus.podSecurityContext.enabled Enable security context + ## @param prometheus.podSecurityContext.runAsUser User ID for the container + ## @param prometheus.podSecurityContext.fsGroup Group ID for the container filesystem + ## + podSecurityContext: + enabled: true + runAsUser: 1001 + fsGroup: 1001 + ## Prometheus containers' Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + ## @param prometheus.containerSecurityContext.enabled Enable container security context + ## @param prometheus.containerSecurityContext.readOnlyRootFilesystem Mount / (root) as a readonly filesystem + ## @param prometheus.containerSecurityContext.allowPrivilegeEscalation Switch privilegeEscalation possibility on or off + ## @param prometheus.containerSecurityContext.runAsNonRoot Force the container to run as a non root user + ## @param prometheus.containerSecurityContext.capabilities.drop [array] Linux Kernel capabilities which should be dropped + ## + containerSecurityContext: + enabled: true + readOnlyRootFilesystem: false + allowPrivilegeEscalation: false + runAsNonRoot: true + capabilities: + drop: + - ALL + + serviceMonitor: + ## @param prometheus.serviceMonitor.enabled Creates a ServiceMonitor to monitor Prometheus itself + ## + enabled: true + ## @param prometheus.serviceMonitor.interval Scrape interval (use by default, falling back to Prometheus' default) + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint + ## + interval: "" + ## @param prometheus.serviceMonitor.metricRelabelings Metric relabeling + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs + ## + metricRelabelings: [] + ## @param prometheus.serviceMonitor.relabelings Relabel configs + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config + ## + relabelings: [] + ## @param prometheus.externalUrl External URL used to access Prometheus + ## If not creating an ingress but still exposing the service some other way (like a proxy) + ## let Prometheus know what its external URL is so that it can properly create links + ## externalUrl: https://prometheus.example.com + ## + externalUrl: "" + ## @param prometheus.resources CPU/Memory resource requests/limits for node + ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ + ## + resources: {} + ## @param prometheus.podAffinityPreset Prometheus Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAffinityPreset: "" + ## @param prometheus.podAntiAffinityPreset Prometheus Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAntiAffinityPreset: soft + ## Node affinity preset + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity + ## + nodeAffinityPreset: + ## @param prometheus.nodeAffinityPreset.type Prometheus Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param prometheus.nodeAffinityPreset.key Prometheus Node label key to match Ignored if `affinity` is set. + ## E.g. + ## key: "kubernetes.io/e2e-az-name" + ## + key: "" + ## @param prometheus.nodeAffinityPreset.values Prometheus Node label values to match. Ignored if `affinity` is set. + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + ## @param prometheus.affinity Prometheus Affinity for pod assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## Note: prometheus.podAffinityPreset, prometheus.podAntiAffinityPreset, and prometheus.nodeAffinityPreset will be ignored when it's set + ## + affinity: {} + ## @param prometheus.nodeSelector Prometheus Node labels for pod assignment + ## ref: https://kubernetes.io/docs/user-guide/node-selection/ + ## + nodeSelector: {} + ## @param prometheus.tolerations Prometheus Tolerations for pod assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## + tolerations: [] + ## @param prometheus.scrapeInterval Interval between consecutive scrapes + ## + scrapeInterval: "15s" + ## @param prometheus.evaluationInterval Interval between consecutive evaluations + ## + evaluationInterval: "30s" + ## @param prometheus.listenLocal ListenLocal makes the Prometheus server listen on loopback + ## + listenLocal: false + ## Configure extra options for liveness probe + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + ## @param prometheus.livenessProbe.enabled Turn on and off liveness probe + ## @param prometheus.livenessProbe.path Path of the HTTP service for checking the healthy state + ## @param prometheus.livenessProbe.initialDelaySeconds Delay before liveness probe is initiated + ## @param prometheus.livenessProbe.periodSeconds How often to perform the probe + ## @param prometheus.livenessProbe.timeoutSeconds When the probe times out + ## @param prometheus.livenessProbe.failureThreshold Minimum consecutive failures for the probe + ## @param prometheus.livenessProbe.successThreshold Minimum consecutive successes for the probe + ## + livenessProbe: + enabled: true + path: /-/healthy + initialDelaySeconds: 0 + failureThreshold: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 3 + ## Configure extra options for readiness probe + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + ## @param prometheus.readinessProbe.enabled Turn on and off readiness probe + ## @param prometheus.readinessProbe.path Path of the HTTP service for checking the ready state + ## @param prometheus.readinessProbe.initialDelaySeconds Delay before readiness probe is initiated + ## @param prometheus.readinessProbe.periodSeconds How often to perform the probe + ## @param prometheus.readinessProbe.timeoutSeconds When the probe times out + ## @param prometheus.readinessProbe.failureThreshold Minimum consecutive failures for the probe + ## @param prometheus.readinessProbe.successThreshold Minimum consecutive successes for the probe + ## + readinessProbe: + enabled: true + path: /-/ready + initialDelaySeconds: 0 + failureThreshold: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 3 + ## @param prometheus.enableAdminAPI Enable Prometheus adminitrative API + ## ref: https://prometheus.io/docs/prometheus/latest/querying/api/#tsdb-admin-apis + ## + enableAdminAPI: false + ## @param prometheus.enableFeatures Enable access to Prometheus disabled features. + ## ref: https://prometheus.io/docs/prometheus/latest/disabled_features/ + ## + enableFeatures: [] + ## @param prometheus.alertingEndpoints Alertmanagers to which alerts will be sent + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#alertmanagerendpoints + ## + alertingEndpoints: [] + ## @param prometheus.externalLabels External labels to add to any time series or alerts when communicating with external systems + ## + externalLabels: {} + ## @param prometheus.replicaExternalLabelName Name of the external label used to denote replica name + ## + replicaExternalLabelName: "" + ## @param prometheus.replicaExternalLabelNameClear Clear external label used to denote replica name + ## + replicaExternalLabelNameClear: false + ## @param prometheus.routePrefix Prefix used to register routes, overriding externalUrl route + ## Useful for proxies that rewrite URLs. + ## + routePrefix: / + ## @param prometheus.prometheusExternalLabelName Name of the external label used to denote Prometheus instance name + ## + prometheusExternalLabelName: "" + ## @param prometheus.prometheusExternalLabelNameClear Clear external label used to denote Prometheus instance name + ## + prometheusExternalLabelNameClear: false + ## @param prometheus.secrets Secrets that should be mounted into the Prometheus Pods + ## + secrets: [] + ## @param prometheus.configMaps ConfigMaps that should be mounted into the Prometheus Pods + ## + configMaps: [] + ## @param prometheus.querySpec The query command line flags when starting Prometheus + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#queryspec + ## + querySpec: {} + ## @param prometheus.ruleNamespaceSelector Namespaces to be selected for PrometheusRules discovery + ## See https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#namespaceselector for usage + ## + ruleNamespaceSelector: {} + ## @param prometheus.ruleSelector PrometheusRules to be selected for target discovery + ## If {}, select all ServiceMonitors + ## + ruleSelector: {} + ## @param prometheus.serviceMonitorSelector ServiceMonitors to be selected for target discovery + ## If {}, select all ServiceMonitors + ## + serviceMonitorSelector: {} + ## @param prometheus.matchLabels Matchlabels + ## + matchLabels: {} + ## @param prometheus.serviceMonitorNamespaceSelector Namespaces to be selected for ServiceMonitor discovery + ## See https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#namespaceselector for usage + ## + serviceMonitorNamespaceSelector: {} + ## @param prometheus.podMonitorSelector PodMonitors to be selected for target discovery. + ## If {}, select all PodMonitors + ## + podMonitorSelector: {} + ## @param prometheus.podMonitorNamespaceSelector Namespaces to be selected for PodMonitor discovery + ## See https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#namespaceselector for usage + ## + podMonitorNamespaceSelector: {} + ## @param prometheus.probeSelector Probes to be selected for target discovery. + ## If {}, select all Probes + ## + probeSelector: {} + ## @param prometheus.probeNamespaceSelector Namespaces to be selected for Probe discovery + ## See https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#namespaceselector for usage + ## + probeNamespaceSelector: {} + ## @param prometheus.scrapeConfigSelector The scrapeConfigs to be selected for target discovery. + ## If {}, select all scrapeConfigs + ## + scrapeConfigSelector: {} + ## @param prometheus.scrapeConfigNamespaceSelector Namespaces to be selected for scrapeConfig discovery. + ## If {}, select all namespaces. + ## If nil, select own namespace. + scrapeConfigNamespaceSelector: {} + ## @param prometheus.retention Metrics retention days + ## + retention: 31d + ## @param prometheus.retentionSize Maximum size of metrics + ## + retentionSize: "" + ## @param prometheus.disableCompaction Disable the compaction of the Prometheus TSDB + ## See https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#prometheusspec + ## ref: https://prometheus.io/docs/prometheus/latest/storage/#compaction + ## + disableCompaction: false + ## @param prometheus.walCompression Enable compression of the write-ahead log using Snappy + ## + walCompression: false + ## @param prometheus.paused If true, the Operator won't process any Prometheus configuration changes + ## + paused: false + ## @param prometheus.replicaCount Number of Prometheus replicas desired + ## + replicaCount: 1 + ## @param prometheus.logLevel Log level for Prometheus + ## + logLevel: info + ## @param prometheus.logFormat Log format for Prometheus + ## + logFormat: logfmt + ## @param prometheus.podMetadata [object] Standard object's metadata + ## ref: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#metadata + ## + podMetadata: + ## labels: + ## app: prometheus + ## k8s-app: prometheus + ## + labels: {} + annotations: {} + ## @param prometheus.remoteRead The remote_read spec configuration for Prometheus + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#remotereadspec + ## remoteRead: + ## - url: http://remote1/read + ## + remoteRead: [] + ## @param prometheus.remoteWrite The remote_write spec configuration for Prometheus + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#remotewritespec + ## remoteWrite: + ## - url: http://remote1/push + ## + remoteWrite: [] + ## @param prometheus.storageSpec Prometheus StorageSpec for persistent data + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/storage.md + ## + storageSpec: {} + ## Prometheus persistence parameters + ## + persistence: + ## @param prometheus.persistence.enabled Use PVCs to persist data. If the storageSpec is provided this will not take effect. + ## + enabled: true + ## @param prometheus.persistence.storageClass Persistent Volume Storage Class + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. + ## + storageClass: "" + ## @param prometheus.persistence.accessModes Persistent Volume Access Modes + ## + accessModes: + - ReadWriteOnce + ## @param prometheus.persistence.size Persistent Volume Size + ## + size: 999Gi + ## @param prometheus.priorityClassName Priority class assigned to the Pods + ## + priorityClassName: "" + ## @param prometheus.containers Containers allows injecting additional containers + ## + containers: [] + ## @param prometheus.volumes Volumes allows configuration of additional volumes + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#prometheusspec + ## + volumes: [] + ## @param prometheus.volumeMounts VolumeMounts allows configuration of additional VolumeMounts. Evaluated as a template + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#prometheusspec + ## + volumeMounts: [] + ## @param prometheus.additionalPrometheusRules PrometheusRule defines recording and alerting rules for a Prometheus instance. + additionalPrometheusRules: [] + ## - name: custom-recording-rules + ## groups: + ## - name: sum_node_by_job + ## rules: + ## - record: job:kube_node_labels:sum + ## expr: sum(kube_node_labels) by (job) + ## - name: sum_prometheus_config_reload_by_pod + ## rules: + ## - record: job:prometheus_config_last_reload_successful:sum + ## expr: sum(prometheus_config_last_reload_successful) by (pod) + ## - name: custom-alerting-rules + ## groups: + ## - name: prometheus-config + ## rules: + ## - alert: PrometheusConfigurationReload + ## expr: prometheus_config_last_reload_successful > 0 + ## for: 1m + ## labels: + ## severity: error + ## annotations: + ## summary: "Prometheus configuration reload (instance {{ $labels.instance }})" + ## description: "Prometheus configuration reload error\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" + ## - name: custom-node-exporter-alerting-rules + ## rules: + ## - alert: PhysicalComponentTooHot + ## expr: node_hwmon_temp_celsius > 75 + ## for: 5m + ## labels: + ## severity: warning + ## annotations: + ## summary: "Physical component too hot (instance {{ $labels.instance }})" + ## description: "Physical hardware component too hot\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" + ## - alert: NodeOvertemperatureAlarm + ## expr: node_hwmon_temp_alarm == 1 + ## for: 5m + ## labels: + ## severity: critical + ## annotations: + ## summary: "Node overtemperature alarm (instance {{ $labels.instance }})" + ## description: "Physical node temperature alarm triggered\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" + ## + ## Note that the prometheus will fail to provision if the correct secret does not exist. + ## @param prometheus.additionalScrapeConfigs.enabled Enable additional scrape configs + ## @param prometheus.additionalScrapeConfigs.type Indicates if the cart should use external additional scrape configs or internal configs + ## @param prometheus.additionalScrapeConfigs.external.name Name of the secret that Prometheus should use for the additional external scrape configuration + ## @param prometheus.additionalScrapeConfigs.external.key Name of the key inside the secret to be used for the additional external scrape configuration + ## @param prometheus.additionalScrapeConfigs.internal.jobList A list of Prometheus scrape jobs + ## + additionalScrapeConfigs: + enabled: false + type: external + external: + ## Name of the secret that Prometheus should use for the additional scrape configuration + ## + name: "" + ## Name of the key inside the secret to be used for the additional scrape configuration. + ## + key: "" + internal: + jobList: [] + ## @param prometheus.additionalScrapeConfigsExternal.enabled Deprecated: Enable additional scrape configs that are managed externally to this chart + ## @param prometheus.additionalScrapeConfigsExternal.name Deprecated: Name of the secret that Prometheus should use for the additional scrape configuration + ## @param prometheus.additionalScrapeConfigsExternal.key Deprecated: Name of the key inside the secret to be used for the additional scrape configuration + ## + additionalScrapeConfigsExternal: + enabled: false + name: "" + key: "" + ## Enable additional Prometheus alert relabel configs that are managed externally to this chart + ## Note that the prometheus will fail to provision if the correct secret does not exist. + ## @param prometheus.additionalAlertRelabelConfigsExternal.enabled Enable additional Prometheus alert relabel configs that are managed externally to this chart + ## @param prometheus.additionalAlertRelabelConfigsExternal.name Name of the secret that Prometheus should use for the additional Prometheus alert relabel configuration + ## @param prometheus.additionalAlertRelabelConfigsExternal.key Name of the key inside the secret to be used for the additional Prometheus alert relabel configuration + ## + additionalAlertRelabelConfigsExternal: + enabled: false + name: "" + key: "" + ## Thanos sidecar container configuration + ## + thanos: + ## @param prometheus.thanos.create Create a Thanos sidecar container + ## + create: false + ## Bitnami Thanos image + ## ref: https://hub.docker.com/r/tccr.io/truecharts/thanos/tags/ + ## @param prometheus.thanos.image.registry Thanos image registry + ## @param prometheus.thanos.image.repository Thanos image name + ## @param prometheus.thanos.image.tag Thanos image tag + ## @param prometheus.thanos.image.pullPolicy Thanos image pull policy + ## @param prometheus.thanos.image.pullSecrets Specify docker-registry secret names as an array + ## + ## Thanos Sidecar container's securityContext + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + ## @param prometheus.thanos.containerSecurityContext.enabled Enable container security context + ## @param prometheus.thanos.containerSecurityContext.readOnlyRootFilesystem mount / (root) as a readonly filesystem + ## @param prometheus.thanos.containerSecurityContext.allowPrivilegeEscalation Switch privilegeEscalation possibility on or off + ## @param prometheus.thanos.containerSecurityContext.runAsNonRoot Force the container to run as a non root user + ## @param prometheus.thanos.containerSecurityContext.capabilities.drop [array] Linux Kernel capabilities which should be dropped + ## + containerSecurityContext: + enabled: true + readOnlyRootFilesystem: false + allowPrivilegeEscalation: false + runAsNonRoot: true + capabilities: + drop: + - ALL + ## @param prometheus.thanos.prometheusUrl Override default prometheus url "http://localhost:9090" + ## + prometheusUrl: "" + ## @param prometheus.thanos.extraArgs Additional arguments passed to the thanos sidecar container + ## extraArgs: + ## - --log.level=debug + ## - --tsdb.path=/data/ + ## + extraArgs: [] + ## @param prometheus.thanos.objectStorageConfig Support mounting a Secret for the objectStorageConfig of the sideCar container. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/thanos.md + ## objectStorageConfig: + ## secretName: thanos-objstore-config + ## secretKey: thanos.yaml + ## + objectStorageConfig: {} + ## ref: https://github.com/thanos-io/thanos/blob/main/docs/components/sidecar.md + ## @param prometheus.thanos.extraVolumeMounts Additional volumeMounts from `prometheus.volumes` for thanos sidecar container + ## extraVolumeMounts: + ## - name: my-secret-volume + ## mountPath: /etc/thanos/secrets/my-secret + ## + extraVolumeMounts: [] + ## Thanos sidecar container resource requests and limits. + ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ + ## We usually recommend not to specify default resources and to leave this as a conscious + ## choice for the user. This also increases chances charts run on environments with little + ## resources, such as Minikube. If you do want to specify resources, uncomment the following + ## lines, adjust them as necessary, and remove the curly braces after 'resources:'. + ## @param prometheus.thanos.resources.limits The resources limits for the Thanos sidecar container + ## @param prometheus.thanos.resources.requests The resources requests for the Thanos sidecar container + ## + resources: + ## Example: + ## limits: + ## cpu: 100m + ## memory: 128Mi + limits: {} + ## Examples: + ## requests: + ## cpu: 100m + ## memory: 128Mi + requests: {} + ## Configure extra options for liveness probe + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + ## @param prometheus.thanos.livenessProbe.enabled Turn on and off liveness probe + ## @param prometheus.thanos.livenessProbe.path Path of the HTTP service for checking the healthy state + ## @param prometheus.thanos.livenessProbe.initialDelaySeconds Delay before liveness probe is initiated + ## @param prometheus.thanos.livenessProbe.periodSeconds How often to perform the probe + ## @param prometheus.thanos.livenessProbe.timeoutSeconds When the probe times out + ## @param prometheus.thanos.livenessProbe.failureThreshold Minimum consecutive failures for the probe + ## @param prometheus.thanos.livenessProbe.successThreshold Minimum consecutive successes for the probe + ## + livenessProbe: + enabled: true + path: /-/healthy + initialDelaySeconds: 0 + periodSeconds: 5 + timeoutSeconds: 3 + failureThreshold: 120 + successThreshold: 1 + ## Configure extra options for readiness probe + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + ## @param prometheus.thanos.readinessProbe.enabled Turn on and off readiness probe + ## @param prometheus.thanos.readinessProbe.path Path of the HTTP service for checking the ready state + ## @param prometheus.thanos.readinessProbe.initialDelaySeconds Delay before readiness probe is initiated + ## @param prometheus.thanos.readinessProbe.periodSeconds How often to perform the probe + ## @param prometheus.thanos.readinessProbe.timeoutSeconds When the probe times out + ## @param prometheus.thanos.readinessProbe.failureThreshold Minimum consecutive failures for the probe + ## @param prometheus.thanos.readinessProbe.successThreshold Minimum consecutive successes for the probe + ## + readinessProbe: + enabled: true + path: /-/ready + initialDelaySeconds: 0 + periodSeconds: 5 + timeoutSeconds: 3 + failureThreshold: 120 + successThreshold: 1 + ## Thanos Sidecar Service + ## + service: + ## @param prometheus.thanos.service.type Kubernetes service type + ## + type: ClusterIP + ## @param prometheus.thanos.service.port Thanos service port + ## + port: 10901 + ## @param prometheus.thanos.service.clusterIP Specific cluster IP when service type is cluster IP. Use `None` to create headless service by default. + ## Use a "headless" service by default so it returns every pod's IP instead of loadbalancing requests. + ## + clusterIP: None + ## @param prometheus.thanos.service.nodePort Specify the nodePort value for the LoadBalancer and NodePort service types. + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport + ## e.g: + ## nodePort: 30901 + ## + nodePort: "" + ## @param prometheus.thanos.service.loadBalancerIP `loadBalancerIP` if service type is `LoadBalancer` + ## Set the LoadBalancer service type to internal only + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer + ## + loadBalancerIP: "" + ## @param prometheus.thanos.service.loadBalancerSourceRanges Address that are allowed when svc is `LoadBalancer` + ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param prometheus.thanos.service.annotations Additional annotations for Prometheus service + ## + annotations: {} + ## @param prometheus.thanos.service.extraPorts Additional ports to expose from the Thanos sidecar container + ## extraPorts: + ## - name: http + ## port: 10902 + ## targetPort: http + ## protocol: tcp + ## + extraPorts: [] + ## @param prometheus.portName Port name used for the pods and governing service. This defaults to web + ## + portName: main + +#### +## Alert Manager Config +#### + +## @section Alertmanager Parameters + +## Configuration for alertmanager +## ref: https://prometheus.io/docs/alerting/alertmanager/ +## +alertmanager: + ## @param alertmanager.enabled Deploy Alertmanager to the cluster + ## + enabled: true + ## Service account for Alertmanager to use. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ + ## + serviceAccount: + ## @param alertmanager.serviceAccount.create Specify whether to create a ServiceAccount for Alertmanager + ## + create: true + ## @param alertmanager.serviceAccount.name The name of the ServiceAccount to create + ## If not set and create is true, a name is generated using the kube-prometheus.alertmanager.fullname template + name: "" + ## Prometheus Alertmanager pods' Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param alertmanager.podSecurityContext.enabled Enable security context + ## @param alertmanager.podSecurityContext.runAsUser User ID for the container + ## @param alertmanager.podSecurityContext.fsGroup Group ID for the container filesystem + ## + podSecurityContext: + enabled: true + runAsUser: 1001 + fsGroup: 1001 + ## Prometheus Alertmanager container's securityContext + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + ## @param alertmanager.containerSecurityContext.enabled Enable container security context + ## @param alertmanager.containerSecurityContext.readOnlyRootFilesystem mount / (root) as a readonly filesystem + ## @param alertmanager.containerSecurityContext.allowPrivilegeEscalation Switch privilegeEscalation possibility on or off + ## @param alertmanager.containerSecurityContext.runAsNonRoot Force the container to run as a non root user + ## @param alertmanager.containerSecurityContext.capabilities.drop [array] Linux Kernel capabilities which should be dropped + ## + containerSecurityContext: + enabled: true + readOnlyRootFilesystem: false + allowPrivilegeEscalation: false + runAsNonRoot: true + capabilities: + drop: + - ALL + ## Configure pod disruption budgets for Alertmanager + ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + ## @param alertmanager.podDisruptionBudget.enabled Create a pod disruption budget for Alertmanager + ## @param alertmanager.podDisruptionBudget.minAvailable Minimum number / percentage of pods that should remain scheduled + ## @param alertmanager.podDisruptionBudget.maxUnavailable Maximum number / percentage of pods that may be made unavailable + ## + podDisruptionBudget: + enabled: false + minAvailable: 1 + maxUnavailable: "" + ## If true, create a serviceMonitor for alertmanager + ## + serviceMonitor: + ## @param alertmanager.serviceMonitor.enabled Creates a ServiceMonitor to monitor Alertmanager + ## + enabled: true + ## @param alertmanager.serviceMonitor.interval Scrape interval. If not set, the Prometheus default scrape interval is used. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint + ## + interval: "" + ## @param alertmanager.serviceMonitor.metricRelabelings Metric relabeling + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs + ## + metricRelabelings: [] + ## @param alertmanager.serviceMonitor.relabelings Relabel configs + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config + ## + relabelings: [] + ## @param alertmanager.externalUrl External URL used to access Alertmanager + ## e.g: + ## externalUrl: https://alertmanager.example.com + ## + externalUrl: "" + ## @param alertmanager.resources CPU/Memory resource requests/limits for node + ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ + ## + resources: {} + ## @param alertmanager.podAffinityPreset Alertmanager Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAffinityPreset: "" + ## @param alertmanager.podAntiAffinityPreset Alertmanager Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAntiAffinityPreset: soft + ## Node affinity preset + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity + ## + nodeAffinityPreset: + ## @param alertmanager.nodeAffinityPreset.type Alertmanager Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param alertmanager.nodeAffinityPreset.key Alertmanager Node label key to match Ignored if `affinity` is set. + ## E.g. + ## key: "kubernetes.io/e2e-az-name" + ## + key: "" + ## @param alertmanager.nodeAffinityPreset.values Alertmanager Node label values to match. Ignored if `affinity` is set. + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + ## @param alertmanager.affinity Alertmanager Affinity for pod assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## Note: alertmanager.podAffinityPreset, alertmanager.podAntiAffinityPreset, and alertmanager.nodeAffinityPreset will be ignored when it's set + ## + affinity: {} + ## @param alertmanager.nodeSelector Alertmanager Node labels for pod assignment + ## ref: https://kubernetes.io/docs/user-guide/node-selection/ + ## + nodeSelector: {} + ## @param alertmanager.tolerations Alertmanager Tolerations for pod assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## + tolerations: [] + ## Alertmanager configuration + ## ref: https://prometheus.io/docs/alerting/configuration/#configuration-file + ## @param alertmanager.config [object] Alertmanager configuration directive + ## @skip alertmanager.config.route.group_by + ## @skip alertmanager.config.route.routes + ## @skip alertmanager.config.receivers + ## + config: + global: + resolve_timeout: 5m + route: + group_by: + - job + group_wait: 30s + group_interval: 5m + repeat_interval: 12h + receiver: "null" + routes: + - match: + alertname: Watchdog + receiver: "null" + receivers: + - name: "null" + ## @param alertmanager.externalConfig Alertmanager configuration is created externally. If true, `alertmanager.config` is ignored, and a secret will not be created. + ## Alertmanager requires a secret named `alertmanager-{{ template "kube-prometheus.alertmanager.fullname" . }}` + ## It must contain: + ## alertmanager.yaml: + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/alerting.md#alerting + ## + externalConfig: false + ## @param alertmanager.replicaCount Number of Alertmanager replicas desired + ## + replicaCount: 1 + ## Configure extra options for liveness probe + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + ## @param alertmanager.livenessProbe.enabled Turn on and off liveness probe + ## @param alertmanager.livenessProbe.path Path of the HTTP service for checking the healthy state + ## @param alertmanager.livenessProbe.initialDelaySeconds Delay before liveness probe is initiated + ## @param alertmanager.livenessProbe.periodSeconds How often to perform the probe + ## @param alertmanager.livenessProbe.timeoutSeconds When the probe times out + ## @param alertmanager.livenessProbe.failureThreshold Minimum consecutive failures for the probe + ## @param alertmanager.livenessProbe.successThreshold Minimum consecutive successes for the probe + ## + livenessProbe: + enabled: true + path: /-/healthy + initialDelaySeconds: 0 + periodSeconds: 5 + timeoutSeconds: 3 + failureThreshold: 120 + successThreshold: 1 + ## Configure extra options for readiness probe + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + ## @param alertmanager.readinessProbe.enabled Turn on and off readiness probe + ## @param alertmanager.readinessProbe.path Path of the HTTP service for checking the ready state + ## @param alertmanager.readinessProbe.initialDelaySeconds Delay before readiness probe is initiated + ## @param alertmanager.readinessProbe.periodSeconds How often to perform the probe + ## @param alertmanager.readinessProbe.timeoutSeconds When the probe times out + ## @param alertmanager.readinessProbe.failureThreshold Minimum consecutive failures for the probe + ## @param alertmanager.readinessProbe.successThreshold Minimum consecutive successes for the probe + ## + readinessProbe: + enabled: true + path: /-/ready + initialDelaySeconds: 0 + periodSeconds: 5 + timeoutSeconds: 3 + failureThreshold: 120 + successThreshold: 1 + ## @param alertmanager.logLevel Log level for Alertmanager + ## + logLevel: info + ## @param alertmanager.logFormat Log format for Alertmanager + ## + logFormat: logfmt + ## @param alertmanager.podMetadata [object] Standard object's metadata. + ## ref: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#metadata + ## + podMetadata: + labels: {} + annotations: {} + ## @param alertmanager.secrets Secrets that should be mounted into the Alertmanager Pods + ## + secrets: [] + ## @param alertmanager.configMaps ConfigMaps that should be mounted into the Alertmanager Pods + ## + configMaps: [] + ## @param alertmanager.retention Metrics retention days + ## + retention: 240h + ## @param alertmanager.storageSpec Alertmanager StorageSpec for persistent data + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/storage.md + ## + storageSpec: {} + ## Alertmanager persistence parameters + ## + persistence: + ## @param alertmanager.persistence.enabled Use PVCs to persist data. If the storageSpec is provided this will not take effect. + ## If you want to use this configuration make sure the storageSpec is not provided. + ## + enabled: true + ## @param alertmanager.persistence.storageClass Persistent Volume Storage Class + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. + ## + storageClass: "" + ## @param alertmanager.persistence.accessModes Persistent Volume Access Modes + ## + accessModes: + - ReadWriteOnce + ## @param alertmanager.persistence.size Persistent Volume Size + ## + size: 999Gi + ## @param alertmanager.paused If true, the Operator won't process any Alertmanager configuration changes + ## + paused: false + ## @param alertmanager.listenLocal ListenLocal makes the Alertmanager server listen on loopback + ## + listenLocal: false + ## @param alertmanager.containers Containers allows injecting additional containers + ## + containers: [] + ## @param alertmanager.volumes Volumes allows configuration of additional volumes. Evaluated as a template + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#alertmanagerspec + ## + volumes: [] + ## @param alertmanager.volumeMounts VolumeMounts allows configuration of additional VolumeMounts. Evaluated as a template + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/pi.md#alertmanagerspec + ## + volumeMounts: [] + ## @param alertmanager.priorityClassName Priority class assigned to the Pods + ## + priorityClassName: "" + ## @param alertmanager.additionalPeers AdditionalPeers allows injecting a set of additional Alertmanagers to peer with to form a highly available cluster + ## + additionalPeers: [] + ## @param alertmanager.routePrefix Prefix used to register routes, overriding externalUrl route + ## Useful for proxies that rewrite URLs. + ## + routePrefix: / + ## @param alertmanager.portName Port name used for the pods and governing service. This defaults to web + ## + portName: alertmanager + ## @param alertmanager.configNamespaceSelector AlertmanagerConfigs to be selected for to merge and configure Alertmanager with. This defaults to {} + ## + configNamespaceSelector: {} + ## @param alertmanager.configSelector Namespaces to be selected for AlertmanagerConfig discovery. If nil, only check own namespace. This defaults to {} + ## + configSelector: {} + +#### +## Exporters +#### + +## @section Exporters + +## Exporters +## +exporters: + node-exporter: + ## @param exporters.node-exporter.enabled Enable node-exporter + ## + enabled: true + kube-state-metrics: + ## @param exporters.kube-state-metrics.enabled Enable kube-state-metrics + ## + enabled: true + +## @param kube-state-metrics [object] Node Exporter deployment configuration +## +kube-state-metrics: + serviceMonitor: + enabled: true + honorLabels: true + +## Component scraping for kubelet and kubelet hosted cAdvisor +## +kubelet: + ## @param kubelet.enabled Create a ServiceMonitor to scrape kubelet service + ## + enabled: true + ## @param kubelet.namespace Namespace where kubelet service is deployed. Related configuration `operator.kubeletService.namespace` + ## + namespace: kube-system + serviceMonitor: + ## @param kubelet.serviceMonitor.https Enable scraping of the kubelet over HTTPS + ## + https: true + ## @param kubelet.serviceMonitor.interval Scrape interval (use by default, falling back to Prometheus' default) + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint + ## + interval: "" + ## @param kubelet.serviceMonitor.metricRelabelings Metric relabeling + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs + ## + metricRelabelings: [] + ## @param kubelet.serviceMonitor.relabelings Relabel configs + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config + ## + relabelings: [] + ## @param kubelet.serviceMonitor.cAdvisorMetricRelabelings Metric relabeling for scraping cAdvisor + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs + ## + cAdvisorMetricRelabelings: [] + ## @param kubelet.serviceMonitor.cAdvisorRelabelings Relabel configs for scraping cAdvisor + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs + ## + cAdvisorRelabelings: [] +## Component scraping the kube-apiserver +## +kubeApiServer: + ## @param kubeApiServer.enabled Create a ServiceMonitor to scrape kube-apiserver service + ## + enabled: true + serviceMonitor: + ## @param kubeApiServer.serviceMonitor.interval Scrape interval. If not set, the Prometheus default scrape interval is used. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint + ## + interval: "" + ## @param kubeApiServer.serviceMonitor.metricRelabelings Metric relabeling + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs + ## + metricRelabelings: [] + ## @param kubeApiServer.serviceMonitor.relabelings Relabel configs + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config + ## + relabelings: [] +## Component scraping the kube-controller-manager +## +kubeControllerManager: + ## @param kubeControllerManager.enabled Create a ServiceMonitor to scrape kube-controller-manager service + ## + enabled: false + ## @param kubeControllerManager.endpoints If your kube controller manager is not deployed as a pod, specify IPs it can be found on + ## endpoints: + ## - 10.141.4.22 + ## - 10.141.4.23 + ## - 10.141.4.24 + ## + endpoints: [] + ## @param kubeControllerManager.namespace Namespace where kube-controller-manager service is deployed. + ## + namespace: kube-system + ## Service ports and selector information + ## @param kubeControllerManager.service.enabled Whether or not to create a Service object for kube-controller-manager + ## @param kubeControllerManager.service.port Listening port of the kube-controller-manager Service object + ## @param kubeControllerManager.service.targetPort Port to target on the kube-controller-manager Pods. This should be the port that kube-controller-manager is exposing metrics on + ## @param kubeControllerManager.service.selector Optional PODs Label selector for the service + ## + service: + enabled: true + port: 10252 + targetPort: 10252 + ## selector: + ## component: kube-controller-manager + ## + selector: {} + serviceMonitor: + ## @param kubeControllerManager.serviceMonitor.interval Scrape interval (use by default, falling back to Prometheus' default) + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint + ## + interval: "" + ## @param kubeControllerManager.serviceMonitor.https Enable scraping kube-controller-manager over https + ## Requires proper certs (not self-signed) and delegated authentication/authorization checks + ## + https: false + ## @param kubeControllerManager.serviceMonitor.insecureSkipVerify Skip TLS certificate validation when scraping + ## + insecureSkipVerify: "" + ## @param kubeControllerManager.serviceMonitor.serverName Name of the server to use when validating TLS certificate + serverName: "" + ## @param kubeControllerManager.serviceMonitor.metricRelabelings Metric relabeling + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs + ## + metricRelabelings: [] + ## @param kubeControllerManager.serviceMonitor.relabelings Relabel configs + ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config + ## + relabelings: [] +## Component scraping kube scheduler +## +kubeScheduler: + ## @param kubeScheduler.enabled Create a ServiceMonitor to scrape kube-scheduler service + ## + enabled: false + ## @param kubeScheduler.endpoints If your kube scheduler is not deployed as a pod, specify IPs it can be found on + ## endpoints: + ## - 10.141.4.22 + ## - 10.141.4.23 + ## - 10.141.4.24 + ## + endpoints: [] + ## @param kubeScheduler.namespace Namespace where kube-scheduler service is deployed. + ## + namespace: kube-system + ## If using kubeScheduler.endpoints only the port and targetPort are used + ## @param kubeScheduler.service.enabled Whether or not to create a Service object for kube-scheduler + ## @param kubeScheduler.service.port Listening port of the kube scheduler Service object + ## @param kubeScheduler.service.targetPort Port to target on the kube scheduler Pods. This should be the port that kube scheduler is exposing metrics on + ## @param kubeScheduler.service.selector Optional PODs Label selector for the service + ## + service: + enabled: true + port: 10251 + targetPort: 10251 + ## selector: + ## component: kube-scheduler + ## + selector: {} + serviceMonitor: + ## @param kubeScheduler.serviceMonitor.interval Scrape interval (use by default, falling back to Prometheus' default) + ## + interval: "" + ## @param kubeScheduler.serviceMonitor.https Enable scraping kube-scheduler over https + ## Requires proper certs (not self-signed) and delegated authentication/authorization checks + ## + https: false + ## @param kubeScheduler.serviceMonitor.insecureSkipVerify Skip TLS certificate validation when scraping + ## + insecureSkipVerify: "" + ## @param kubeScheduler.serviceMonitor.serverName Name of the server to use when validating TLS certificate + ## + serverName: "" + ## @param kubeScheduler.serviceMonitor.metricRelabelings Metric relabeling + ## metricRelabelings: + ## - action: keep + ## regex: 'kube_(daemonset|deployment|pod|namespace|node|statefulset).+' + ## sourceLabels: [__name__] + ## + metricRelabelings: [] + ## @param kubeScheduler.serviceMonitor.relabelings Relabel configs + ## relabelings: + ## - sourceLabels: [__meta_kubernetes_pod_node_name] + ## separator: ; + ## regex: ^(.*)$ + ## targetLabel: nodename + ## replacement: $1 + ## action: replace + ## + relabelings: [] +## Component scraping coreDns +## +coreDns: + ## @param coreDns.enabled Create a ServiceMonitor to scrape coredns service + ## + enabled: true + ## @param coreDns.namespace Namespace where core dns service is deployed. + ## + namespace: kube-system + ## Create a ServiceMonitor to scrape coredns service + ## @param coreDns.service.enabled Whether or not to create a Service object for coredns + ## @param coreDns.service.port Listening port of the coredns Service object + ## @param coreDns.service.targetPort Port to target on the coredns Pods. This should be the port that coredns is exposing metrics on + ## @param coreDns.service.selector Optional PODs Label selector for the service + ## + service: + enabled: true + port: 9153 + targetPort: 9153 + ## selector: + ## component: kube-dns + ## + selector: {} + serviceMonitor: + ## @param coreDns.serviceMonitor.interval Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + ## @param coreDns.serviceMonitor.metricRelabelings Metric relabel configs to apply to samples before ingestion. + ## metricRelabelings: + ## - action: keep + ## regex: 'kube_(daemonset|deployment|pod|namespace|node|statefulset).+' + ## sourceLabels: [__name__] + ## + metricRelabelings: [] + ## @param coreDns.serviceMonitor.relabelings Relabel configs to apply to samples before ingestion. + ## relabelings: + ## - sourceLabels: [__meta_kubernetes_pod_node_name] + ## separator: ; + ## regex: ^(.*)$ + ## targetLabel: nodename + ## replacement: $1 + ## action: replace + ## + relabelings: [] +## Component scraping the kube-proxy +## +kubeProxy: + ## @param kubeProxy.enabled Create a ServiceMonitor to scrape the kube-proxy Service + ## + enabled: false + +portal: + open: + enabled: true diff --git a/enterprise/prometheus/13.0.14/questions.yaml b/enterprise/prometheus/13.0.14/questions.yaml new file mode 100644 index 00000000000..255dbc88bea --- /dev/null +++ b/enterprise/prometheus/13.0.14/questions.yaml @@ -0,0 +1,1418 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" +questions: + - variable: operator + group: "App Configuration" + label: "Operator Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable" + schema: + type: boolean + default: true + show_subquestions_if: true + subquestions: + - variable: logLevel + label: "Log Level" + description: "Log level for Operator" + schema: + type: string + default: "info" + + - variable: prometheus + group: "App Configuration" + label: "Prometheus Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable" + schema: + type: boolean + default: true + show_subquestions_if: true + subquestions: + - variable: logLevel + label: "Log Level" + description: "Log level for Prometheus" + schema: + type: string + default: "info" + - variable: retention + label: "Retention" + description: "Metrics retention days" + schema: + type: string + default: "31d" + - variable: retentionSize + label: "Max Retention Size" + description: "Maximum size of metrics" + schema: + type: string + default: "" + - variable: scrapeInterval + label: "Scrape interval" + description: "Interval between consecutive scrapes" + schema: + type: string + default: "15s" + - variable: evaluationInterval + label: "Evaluation interval" + description: "Interval between consecutive evaluations" + schema: + type: string + default: "30s" + - variable: disableCompaction + label: "Disable Compaction" + description: "Disable the compaction of the Prometheus TSDB" + schema: + type: boolean + default: false + - variable: walCompression + label: "WAL Compression" + description: "Enable compression of the write-ahead log using Snappy" + schema: + type: boolean + default: false + - variable: remoteWrite + label: "Remote Write" + schema: + type: list + default: [] + items: + - variable: remoteWriteEntry + label: Remote Write Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: url + label: URL + description: Remote write destination URL + schema: + type: string + required: true + default: "" + - variable: basicAuth + label: Basic Auth + description: Basic authentication for remote write + schema: + type: dict + attrs: + - variable: username + label: Username + description: Basic auth username + schema: + type: string + required: true + default: "" + - variable: password + label: Password + description: Basic auth password + schema: + type: string + required: false + default: "" + + - variable: exporters + group: "App Configuration" + label: "Exporter Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: node-exporter + label: "node-exporter" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable" + schema: + type: boolean + default: true + - variable: kube-state-metrics + label: "Kube-State-Metrics" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable" + schema: + type: boolean + default: true + + - variable: alertmanager + group: "App Configuration" + label: "Alertmanager Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable" + schema: + type: boolean + default: true + show_subquestions_if: true + subquestions: + - variable: logLevel + label: "Log Level" + description: "Log level for Alertmanager" + schema: + type: string + default: "info" + - variable: retention + label: "Retention" + description: "Metrics retention days" + schema: + type: string + default: "240h" + - variable: service + group: Networking and Services + label: Configure Service(s) + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The serving the Prometheus WebUI" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service Port Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: "Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 10086 + required: true + - variable: alertmanager + label: "alertmanager Service" + description: "alertmanager service " + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: alertmanager + label: "alertmanager Service Port Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: "Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 10087 + required: true + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: scaleExternalInterface + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + additional_attrs: true + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + additional_attrs: true + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + show_if: [["type", "=", "static"]] + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + show_if: [["type", "=", "static"]] + items: + - variable: staticRouteConfiguration + label: Static Route Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: destination + label: Destination + schema: + type: ipaddr + cidr: true + required: true + - variable: gateway + label: Gateway + schema: + type: ipaddr + cidr: false + required: true + - variable: serviceList + label: Add Manual Custom Services + group: Networking and Services + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: Custom Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the service + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: portsList + label: Additional Service Ports + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: Custom ports + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Port + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Port Name + schema: + type: string + default: "" + - variable: protocol + label: Port Type + schema: + type: string + default: tcp + enum: + - value: http + description: HTTP + - value: https + description: HTTPS + - value: tcp + description: TCP + - value: udp + description: UDP + - variable: targetPort + label: Target Port + description: This port exposes the container port on the service + schema: + type: int + required: true + - variable: port + label: Container Port + schema: + type: int + required: true + - variable: persistenceList + label: Additional App Storage + group: Storage and Persistence + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: Custom Storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the storage + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: hostPath + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: mountPath + label: Mount Path + description: Path inside the container the storage is mounted + schema: + type: string + default: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size Quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: certificateIssuer + label: Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates. Cannot be used combined with tls option below' + schema: + type: string + default: "" + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: entrypoint + label: (Advanced) Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + show_if: [["advanced", "=", true]] + required: true + - variable: allowCors + label: "Allow Cross Origin Requests" + schema: + type: boolean + show_if: [["advanced", "=", true]] + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + - variable: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - variable: ingressList + label: Add Manual Custom Ingresses + group: Ingress + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: Custom Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: allowCors + label: "Allow Cross Origin Requests" + schema: + type: boolean + show_if: [["advanced", "=", true]] + default: false + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: service + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: certificateIssuer + label: certificateIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates. Cannot be used combined with tls option below' + schema: + type: string + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + show_if: [["certificateIssuer", "=", ""]] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: scaleCert + label: Use TrueNAS SCALE Certificate (Deprecated) + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: Use Custom Secret (Advanced) + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true +# - variable: horizontalPodAutoscaler +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# type: list +# default: [] +# items: +# - variable: hpaEntry +# label: HPA Entry +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: name +# label: Name +# schema: +# type: string +# required: true +# default: "" +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: target +# label: Target +# description: Deployment name, Defaults to Main Deployment +# schema: +# type: string +# default: "" +# - variable: minReplicas +# label: Minimum Replicas +# schema: +# type: int +# default: 1 +# - variable: maxReplicas +# label: Maximum Replicas +# schema: +# type: int +# default: 5 +# - variable: targetCPUUtilizationPercentage +# label: Target CPU Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: targetMemoryUtilizationPercentage +# label: Target Memory Utilization Percentage +# schema: +# type: int +# default: 80 + - variable: networkPolicy + group: Advanced + label: (Advanced) Network Policy + schema: + type: list + default: [] + items: + - variable: netPolicyEntry + label: Network Policy Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: policyType + label: Policy Type + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ingress + description: Ingress + - value: egress + description: Egress + - value: ingress-egress + description: Ingress and Egress + - variable: egress + label: Egress + schema: + type: list + default: [] + items: + - variable: egressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: to + label: To + schema: + type: list + default: [] + items: + - variable: toEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: ingress + label: Ingress + schema: + type: list + default: [] + items: + - variable: ingressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: from + label: From + schema: + type: list + default: [] + items: + - variable: fromEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP diff --git a/enterprise/prometheus/13.0.14/templates/NOTES.txt b/enterprise/prometheus/13.0.14/templates/NOTES.txt new file mode 100644 index 00000000000..efcb74cb772 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/enterprise/prometheus/13.0.14/templates/_helpers.tpl b/enterprise/prometheus/13.0.14/templates/_helpers.tpl new file mode 100644 index 00000000000..1f44049ac4c --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/_helpers.tpl @@ -0,0 +1,210 @@ +{{/* Name suffixed with operator */}} +{{- define "kube-prometheus.fullname" -}} +{{- printf "%s" (include "tc.v1.common.lib.chart.names.fullname" . ) -}} +{{- end }} + +{{/* Name suffixed with operator */}} +{{- define "kube-prometheus.name" -}} +{{- printf "%s" (include "tc.v1.common.lib.chart.names.fullname" . ) -}} +{{- end }} + +{{/* Name suffixed with operator */}} +{{- define "kube-prometheus.operator.name" -}} +{{- printf "%s-operator" (include "tc.v1.common.lib.chart.names.fullname" . ) -}} +{{- end }} + +{{/* Name suffixed with prometheus */}} +{{- define "kube-prometheus.prometheus.name" -}} +{{- printf "%s-prometheus" (include "tc.v1.common.lib.chart.names.fullname" . ) -}} +{{- end }} + +{{/* Name suffixed with alertmanager */}} +{{- define "kube-prometheus.alertmanager.name" -}} +{{- printf "%s-alertmanager" (include "tc.v1.common.lib.chart.names.fullname" . ) -}} +{{- end }} + +{{/* Name suffixed with thanos */}} +{{- define "kube-prometheus.thanos.name" -}} +{{- printf "%s-thanos" (include "tc.v1.common.lib.chart.names.fullname" . ) -}} +{{- end }} + +{{/* Fullname suffixed with operator */}} +{{- define "kube-prometheus.operator.fullname" -}} +{{- printf "%s-operator" (include "tc.v1.common.lib.chart.names.fullname" . ) -}} +{{- end }} + +{{/* Fullname suffixed with prometheus */}} +{{- define "kube-prometheus.prometheus.fullname" -}} +{{- printf "%s-prometheus" (include "tc.v1.common.lib.chart.names.fullname" . ) -}} +{{- end }} + +{{/* Fullname suffixed with alertmanager */}} +{{- define "kube-prometheus.alertmanager.fullname" -}} +{{- printf "%s-alertmanager" (include "tc.v1.common.lib.chart.names.fullname" . ) -}} +{{- end }} + +{{/* Fullname suffixed with thanos */}} +{{- define "kube-prometheus.thanos.fullname" -}} +{{- printf "%s-thanos" (include "kube-prometheus.prometheus.fullname" .) -}} +{{- end }} + +{{- define "kube-prometheus.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Common Labels +*/}} +{{- define "kube-prometheus.labels" -}} + {{- $labels := (include "tc.v1.common.lib.metadata.allLabels" $ | fromYaml) -}} + {{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $ "labels" $labels) | trim) }} + {{- . | nindent 0 }} + {{- end }} +{{- if .Values.global.labels }} +{{ toYaml .Values.global.labels }} +{{- end }} +{{- end -}} + +{{/* +Labels for operator +*/}} +{{- define "kube-prometheus.operator.labels" -}} + {{- $labels := (include "tc.v1.common.lib.metadata.allLabels" $ | fromYaml) -}} + {{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $ "labels" $labels) | trim) }} + {{- . | nindent 0 }} + {{- end }} +app.kubernetes.io/component: operator +{{- end -}} + +{{/* +Labels for prometheus +*/}} +{{- define "kube-prometheus.prometheus.labels" -}} + {{- $labels := (include "tc.v1.common.lib.metadata.allLabels" $ | fromYaml) -}} + {{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $ "labels" $labels) | trim) }} + {{- . | nindent 0 }} + {{- end }} +app.kubernetes.io/component: prometheus +{{- end -}} + +{{/* +Labels for alertmanager +*/}} +{{- define "kube-prometheus.alertmanager.labels" -}} + {{- $labels := (include "tc.v1.common.lib.metadata.allLabels" $ | fromYaml) -}} + {{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $ "labels" $labels) | trim) }} + {{- . | nindent 0 }} + {{- end }} +app.kubernetes.io/component: alertmanager +{{- end -}} + +{{/* +matchLabels for operator +*/}} +{{- define "kube-prometheus.operator.matchLabels" -}} +{{ include "tc.v1.common.lib.metadata.selectorLabels" (dict "rootCtx" $ )}} +app.kubernetes.io/component: operator +{{- end -}} + +{{/* +matchLabels for prometheus +*/}} +{{- define "kube-prometheus.prometheus.matchLabels" -}} +{{ include "tc.v1.common.lib.metadata.selectorLabels" (dict "rootCtx" $ )}} +app.kubernetes.io/component: prometheus +{{- end -}} + +{{/* +matchLabels for alertmanager +*/}} +{{- define "kube-prometheus.alertmanager.matchLabels" -}} +{{ include "tc.v1.common.lib.metadata.selectorLabels" (dict "rootCtx" $ )}} +app.kubernetes.io/component: alertmanager +{{- end -}} + +{{/* +Return the proper Prometheus Operator image name +*/}} +{{- define "kube-prometheus.image" -}} +{{ printf "%s:%s" .Values.image.repository (default .Chart.AppVersion .Values.image.tag) | quote }} +{{- end -}} + +{{/* +Return the proper Prometheus Operator Reloader image name +*/}} +{{- define "kube-prometheus.prometheusConfigReloader.image" -}} +{{- include "kube-prometheus.image" . -}} +{{- end -}} + +{{/* +Return the proper Prometheus Image name +*/}} +{{- define "kube-prometheus.prometheus.image" -}} +{{ printf "%s:%s" .Values.image.repository (default .Chart.AppVersion .Values.image.tag) | quote }} +{{- end -}} + +{{/* +Return the proper Thanos Image name +*/}} +{{- define "kube-prometheus.prometheus.thanosImage" -}} +{{ printf "%s:%s" .Values.thanosImage.repository (default .Chart.AppVersion .Values.thanosImage.tag) | quote }} +{{- end -}} + +{{/* +Return the proper Alertmanager Image name +*/}} +{{- define "kube-prometheus.alertmanager.image" -}} +{{ printf "%s:%s" .Values.alertmanagerImage.repository (default .Chart.AppVersion .Values.alertmanagerImage.tag) | quote }} +{{- end -}} + +{{/* +Return the proper Docker Image Registry Secret Names +*/}} +{{- define "kube-prometheus.imagePullSecrets" -}} +{{- end -}} + +{{/* +Create the name of the operator service account to use +*/}} +{{- define "kube-prometheus.operator.serviceAccountName" -}} +{{- if .Values.operator.serviceAccount.create -}} + {{ default (include "kube-prometheus.operator.fullname" .) .Values.operator.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.operator.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Create the name of the prometheus service account to use +*/}} +{{- define "kube-prometheus.prometheus.serviceAccountName" -}} +{{- if .Values.prometheus.serviceAccount.create -}} + {{ default (include "kube-prometheus.prometheus.fullname" .) .Values.prometheus.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.prometheus.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Create the name of the alertmanager service account to use +*/}} +{{- define "kube-prometheus.alertmanager.serviceAccountName" -}} +{{- if .Values.alertmanager.serviceAccount.create -}} + {{ default (include "kube-prometheus.alertmanager.fullname" .) .Values.alertmanager.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.alertmanager.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Compile all warnings into a single message, and call fail. +*/}} +{{- define "kube-prometheus.validateValues" -}} +{{- $messages := list -}} +{{- $messages := without $messages "" -}} +{{- $message := join "\n" $messages -}} + +{{- if $message -}} +{{- printf "\nVALUES VALIDATION:\n%s" $message | fail -}} +{{- end -}} +{{- end -}} diff --git a/enterprise/prometheus/13.0.14/templates/alertmanager/_alertmanager.tpl b/enterprise/prometheus/13.0.14/templates/alertmanager/_alertmanager.tpl new file mode 100644 index 00000000000..ed5e24e9da6 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/alertmanager/_alertmanager.tpl @@ -0,0 +1,174 @@ +{{- define "prometheus.alertmanager.alertmanager" -}} +{{- if .Values.alertmanager.enabled }} +--- +apiVersion: monitoring.coreos.com/v1 +kind: Alertmanager +metadata: + name: {{ template "kube-prometheus.alertmanager.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.alertmanager.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.alertmanager.replicaCount }} + serviceAccountName: {{ template "kube-prometheus.alertmanager.serviceAccountName" . }} + {{- if .Values.alertmanager.image }} + image: {{ template "kube-prometheus.alertmanager.image" . }} + {{- end }} + listenLocal: {{ .Values.alertmanager.listenLocal }} + {{- if index .Values.alertmanager "externalUrl" }} + externalUrl: "{{ .Values.alertmanager.externalUrl }}" + {{- else if and .Values.ingress.alertmanager.enabled .Values.ingress.alertmanager.hosts }} + externalUrl: {{ if .Values.ingress.alertmanager.tls }}https{{else}}http{{ end }}://{{ (index .Values.ingress.alertmanager.hosts 0).name }}{{ .Values.alertmanager.routePrefix }} + {{- else }} + externalUrl: http://{{ template "kube-prometheus.alertmanager.fullname" . }}.{{ .Release.Namespace }}:{{ .Values.service.alertmanager.ports.alertmanager.port }}{{ .Values.alertmanager.routePrefix }} + {{- end }} + portName: "{{ .Values.alertmanager.portName }}" + paused: {{ .Values.alertmanager.paused }} + logFormat: {{ .Values.alertmanager.logFormat }} + logLevel: {{ .Values.alertmanager.logLevel }} + retention: {{ .Values.alertmanager.retention }} + {{- if .Values.alertmanager.secrets }} + secrets: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.secrets "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.alertmanager.configMaps }} + configMaps: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.configMaps "context" $) | nindent 4 }} + {{- end }} + resources: {{- toYaml .Values.alertmanager.resources | nindent 4 }} + routePrefix: "{{ .Values.alertmanager.routePrefix }}" + {{- if .Values.alertmanager.podSecurityContext.enabled }} + securityContext: {{- omit .Values.alertmanager.podSecurityContext "enabled" | toYaml | nindent 4 }} + {{- end }} + {{- if .Values.alertmanager.storageSpec }} + storage: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.storageSpec "context" $) | nindent 4 }} + {{- else }} + {{- if .Values.alertmanager.persistence.enabled }} + storage: + volumeClaimTemplate: + spec: + accessModes: + {{- range .Values.alertmanager.persistence.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.alertmanager.persistence.size | quote }} + {{- with (include "tc.v1.common.lib.storage.storageClassName" ( dict "rootCtx" . "objectData" .Values.prometheus.persistence )) | trim }} + storageClassName: {{ . }} + {{- end }} + {{- end }} + {{- end }} + {{- if or .Values.alertmanager.podMetadata.labels .Values.alertmanager.podMetadata.annotations (eq .Values.alertmanager.podAntiAffinityPreset "soft") (eq .Values.alertmanager.podAntiAffinityPreset "hard") }} + podMetadata: + labels: + {{- if .Values.alertmanager.podMetadata.labels }} + {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.podMetadata.labels "context" $) | nindent 6 }} + {{- end }} + {{- if or (eq .Values.alertmanager.podAntiAffinityPreset "soft") (eq .Values.alertmanager.podAntiAffinityPreset "hard") }} + {{- include "kube-prometheus.alertmanager.matchLabels" . | nindent 6 }} + {{- end }} + {{- if .Values.alertmanager.podMetadata.annotations }} + annotations: + {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.podMetadata.annotations "context" $) | nindent 6 }} + {{- end }} + {{- end }} + {{- if .Values.alertmanager.affinity }} + affinity: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.affinity "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.alertmanager.nodeSelector }} + nodeSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.nodeSelector "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.alertmanager.tolerations }} + tolerations: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.tolerations "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.alertmanager.volumes }} + volumes: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.volumes "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.alertmanager.volumeMounts }} + volumeMounts: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.volumeMounts "context" $) | nindent 4 }} + {{- end }} +{{- include "kube-prometheus.imagePullSecrets" . | indent 2 }} + {{- if or .Values.alertmanager.containers .Values.alertmanager.containerSecurityContext.enabled .Values.operator.prometheusConfigReloader.containerSecurityContext.enabled }} + containers: + {{- if or .Values.alertmanager.containerSecurityContext.enabled .Values.alertmanager.livenessProbe.enabled .Values.alertmanager.readinessProbe.enabled }} + ## This monkey patching is needed until the securityContexts are + ## directly patchable via the CRD. + ## ref: https://github.com/prometheus-operator/prometheus-operator/issues/3947 + ## currently implemented with strategic merge + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/strategic-merge-patch.md + - name: alertmanager + {{- if .Values.alertmanager.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.alertmanager.containerSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + {{- if .Values.alertmanager.livenessProbe.enabled }} + livenessProbe: + httpGet: + path: {{ .Values.alertmanager.livenessProbe.path }} + port: alertmanager + scheme: HTTP + initialDelaySeconds: {{ .Values.alertmanager.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.alertmanager.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.alertmanager.livenessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.alertmanager.livenessProbe.failureThreshold }} + successThreshold: {{ .Values.alertmanager.livenessProbe.successThreshold }} + {{- end }} + {{- if .Values.alertmanager.readinessProbe.enabled }} + readinessProbe: + httpGet: + path: {{ .Values.alertmanager.readinessProbe.path }} + port: alertmanager + scheme: HTTP + initialDelaySeconds: {{ .Values.alertmanager.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.alertmanager.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.alertmanager.readinessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.alertmanager.readinessProbe.failureThreshold }} + successThreshold: {{ .Values.alertmanager.readinessProbe.successThreshold }} + {{- end }} + {{- end }} + {{- if or .Values.operator.prometheusConfigReloader.containerSecurityContext.enabled .Values.operator.prometheusConfigReloader.livenessProbe.enabled .Values.operator.prometheusConfigReloader.readinessProbe.enabled }} + ## This monkey patching is needed until the securityContexts are + ## directly patchable via the CRD. + ## ref: https://github.com/prometheus-operator/prometheus-operator/issues/3947 + ## currently implemented with strategic merge + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/strategic-merge-patch.md + - name: config-reloader + {{- if .Values.operator.prometheusConfigReloader.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.operator.prometheusConfigReloader.containerSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + {{- if .Values.operator.prometheusConfigReloader.livenessProbe.enabled }} + livenessProbe: + tcpSocket: + port: reloader-web + initialDelaySeconds: {{ .Values.operator.prometheusConfigReloader.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.operator.prometheusConfigReloader.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.operator.prometheusConfigReloader.livenessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.operator.prometheusConfigReloader.livenessProbe.failureThreshold }} + successThreshold: {{ .Values.operator.prometheusConfigReloader.livenessProbe.successThreshold }} + {{- end }} + {{- if .Values.operator.prometheusConfigReloader.readinessProbe.enabled }} + readinessProbe: + tcpSocket: + port: reloader-web + initialDelaySeconds: {{ .Values.operator.prometheusConfigReloader.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.operator.prometheusConfigReloader.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.operator.prometheusConfigReloader.readinessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.operator.prometheusConfigReloader.readinessProbe.failureThreshold }} + successThreshold: {{ .Values.operator.prometheusConfigReloader.readinessProbe.successThreshold }} + {{- end }} + {{- end }} + {{- if .Values.alertmanager.containers }} + {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.containers "context" $) | nindent 4 }} + {{- end }} + {{- end }} + {{- if .Values.alertmanager.priorityClassName }} + priorityClassName: {{ .Values.alertmanager.priorityClassName }} + {{- end }} + {{- if .Values.alertmanager.additionalPeers }} + additionalPeers: {{ .Values.alertmanager.additionalPeers }} + {{- end }} + {{- if .Values.alertmanager.configNamespaceSelector }} + alertmanagerConfigNamespaceSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.configNamespaceSelector "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.alertmanager.configSelector }} + alertmanagerConfigSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.configSelector "context" $) | nindent 4 }} + {{- end }} +{{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/alertmanager/secrets.yaml b/enterprise/prometheus/13.0.14/templates/alertmanager/secrets.yaml new file mode 100644 index 00000000000..9a6f518f35c --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/alertmanager/secrets.yaml @@ -0,0 +1,13 @@ +{{- if (and .Values.alertmanager.enabled (not .Values.alertmanager.externalConfig) ) }} +apiVersion: v1 +kind: Secret +metadata: + name: alertmanager-{{ template "kube-prometheus.alertmanager.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.alertmanager.labels" . | nindent 4 }} +data: + alertmanager.yaml: {{ toYaml .Values.alertmanager.config | b64enc | quote }} +{{- range $key, $val := .Values.alertmanager.templateFiles }} + {{ $key }}: {{ $val | b64enc | quote }} +{{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/alertmanager/serviceaccount.yaml b/enterprise/prometheus/13.0.14/templates/alertmanager/serviceaccount.yaml new file mode 100644 index 00000000000..a6f438889a2 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/alertmanager/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if and .Values.alertmanager.enabled .Values.alertmanager.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "kube-prometheus.alertmanager.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.alertmanager.labels" . | nindent 4 }} + {{- if index .Values.alertmanager.serviceAccount "annotations" }} + annotations: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.alertmanager.serviceAccount.annotations "context" $) | nindent 4 }} + {{- end }} +{{- include "kube-prometheus.imagePullSecrets" . }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/alertmanager/servicemonitor.yaml b/enterprise/prometheus/13.0.14/templates/alertmanager/servicemonitor.yaml new file mode 100644 index 00000000000..ef0e02d3875 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/alertmanager/servicemonitor.yaml @@ -0,0 +1,26 @@ +{{- if and .Values.alertmanager.enabled .Values.alertmanager.serviceMonitor.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "kube-prometheus.alertmanager.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.alertmanager.labels" . | nindent 4 }} +spec: + selector: + matchLabels: {{- include "kube-prometheus.alertmanager.matchLabels" . | nindent 6 }} + namespaceSelector: + matchNames: + - {{ .Release.Namespace }} + endpoints: + - port: http + {{- if .Values.alertmanager.serviceMonitor.interval }} + interval: {{ .Values.alertmanager.serviceMonitor.interval }} + {{- end }} + path: {{ trimSuffix "/" .Values.alertmanager.routePrefix }}/metrics + {{- if .Values.alertmanager.serviceMonitor.metricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" ( dict "value" .Values.alertmanager.serviceMonitor.metricRelabelings "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.alertmanager.serviceMonitor.relabelings }} + relabelings: {{- toYaml .Values.alertmanager.serviceMonitor.relabelings | nindent 8 }} + {{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/common.yaml b/enterprise/prometheus/13.0.14/templates/common.yaml new file mode 100644 index 00000000000..61364503a70 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/common.yaml @@ -0,0 +1,13 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{- include "prometheus.prometheus.prometheus" . }} +{{- include "prometheus.prometheus.additionalprometheusrules" . }} +{{- include "prometheus.prometheus.additionalscrapejobs" . }} +{{- include "prometheus.prometheus.servicemonitor" . }} + +{{- include "prometheus.alertmanager.alertmanager" . }} + + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/core-dns/service.yaml b/enterprise/prometheus/13.0.14/templates/exporters/core-dns/service.yaml new file mode 100644 index 00000000000..359c945de46 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/core-dns/service.yaml @@ -0,0 +1,22 @@ +{{- if and .Values.coreDns.enabled .Values.coreDns.service.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kube-prometheus.fullname" . }}-coredns + namespace: {{ .Values.coreDns.namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: {{ template "kube-prometheus.fullname" . }}-coredns +spec: + clusterIP: None + ports: + - name: http-metrics + port: {{ .Values.coreDns.service.port }} + protocol: TCP + targetPort: {{ .Values.coreDns.service.targetPort }} + selector: + {{- if .Values.coreDns.service.selector }} +{{ toYaml .Values.coreDns.service.selector | indent 4 }} + {{- else}} + k8s-app: kube-dns + {{- end}} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/core-dns/servicemonitor.yaml b/enterprise/prometheus/13.0.14/templates/exporters/core-dns/servicemonitor.yaml new file mode 100644 index 00000000000..8906b87f8e1 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/core-dns/servicemonitor.yaml @@ -0,0 +1,29 @@ +{{- if .Values.coreDns.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "kube-prometheus.fullname" . }}-coredns + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: {{ template "kube-prometheus.fullname" . }}-coredns +spec: + jobLabel: k8s-app + selector: + matchLabels: + app.kubernetes.io/component: {{ template "kube-prometheus.fullname" . }}-coredns + namespaceSelector: + matchNames: + - {{ .Values.coreDns.namespace }} + endpoints: + - port: http-metrics + {{- if .Values.coreDns.serviceMonitor.interval}} + interval: {{ .Values.coreDns.serviceMonitor.interval }} + {{- end }} + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + {{- if .Values.coreDns.serviceMonitor.metricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.coreDns.serviceMonitor.metricRelabelings "context" $) | nindent 6 }} + {{- end }} + {{- if .Values.coreDns.serviceMonitor.relabelings }} + relabelings: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.coreDns.serviceMonitor.relabelings "context" $) | nindent 6 }} + {{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/kube-apiserver/servicemonitor.yaml b/enterprise/prometheus/13.0.14/templates/exporters/kube-apiserver/servicemonitor.yaml new file mode 100644 index 00000000000..7cfbb53f379 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/kube-apiserver/servicemonitor.yaml @@ -0,0 +1,35 @@ +{{- if .Values.kubeApiServer.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "kube-prometheus.fullname" . }}-apiserver + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: apiserver +spec: + jobLabel: component + selector: + matchLabels: + component: apiserver + provider: kubernetes + namespaceSelector: + matchNames: + - default + endpoints: + - port: https + scheme: https + tlsConfig: + caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + serverName: kubernetes + insecureSkipVerify: true + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + {{- if .Values.kubeApiServer.serviceMonitor.interval }} + interval: {{ .Values.kubeApiServer.serviceMonitor.interval }} + {{- end }} + {{- if .Values.kubeApiServer.serviceMonitor.metricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" ( dict "value" .Values.kubeApiServer.serviceMonitor.metricRelabelings "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.kubeApiServer.serviceMonitor.relabelings }} + relabelings: {{- toYaml .Values.kubeApiServer.serviceMonitor.relabelings | nindent 8 }} + {{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/endpoints.yaml b/enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/endpoints.yaml new file mode 100644 index 00000000000..13aa60ebf66 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/endpoints.yaml @@ -0,0 +1,18 @@ +{{- if and .Values.kubeControllerManager.enabled .Values.kubeControllerManager.endpoints }} +apiVersion: v1 +kind: Endpoints +metadata: + name: {{ template "kube-prometheus.fullname" . }}-kube-controller-manager + namespace: {{ .Values.kubeControllerManager.namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: kube-controller-manager +subsets: + - addresses: + {{- range .Values.kubeControllerManager.endpoints }} + - ip: {{ . }} + {{- end }} + ports: + - name: http-metrics + port: {{ .Values.kubeControllerManager.service.port }} + protocol: TCP +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/service.yaml b/enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/service.yaml new file mode 100644 index 00000000000..6a455359832 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/service.yaml @@ -0,0 +1,25 @@ +{{- if and .Values.kubeControllerManager.enabled .Values.kubeControllerManager.service.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kube-prometheus.fullname" . }}-kube-controller-manager + namespace: {{ .Values.kubeControllerManager.namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: {{ template "kube-prometheus.fullname" . }}-kube-controller-manager +spec: + clusterIP: None + ports: + - name: http-metrics + port: {{ .Values.kubeControllerManager.service.port }} + protocol: TCP + targetPort: {{ .Values.kubeControllerManager.service.targetPort }} +{{- if .Values.kubeControllerManager.endpoints }}{{- else }} + selector: + {{- if .Values.kubeControllerManager.service.selector }} +{{ toYaml .Values.kubeControllerManager.service.selector | indent 4 }} + {{- else}} + component: kube-controller-manager + {{- end}} +{{- end }} + type: ClusterIP +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/servicemonitor.yaml b/enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/servicemonitor.yaml new file mode 100644 index 00000000000..d3f56c49914 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/kube-controller-manager/servicemonitor.yaml @@ -0,0 +1,40 @@ +{{- if .Values.kubeControllerManager.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "kube-prometheus.fullname" . }}-kube-controller-manager + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: {{ template "kube-prometheus.fullname" . }}-kube-controller-manager +spec: + jobLabel: component + selector: + matchLabels: + app.kubernetes.io/component: {{ template "kube-prometheus.fullname" . }}-kube-controller-manager + namespaceSelector: + matchNames: + - {{ .Values.kubeControllerManager.namespace }} + endpoints: + - port: http-metrics + {{- if .Values.kubeControllerManager.serviceMonitor.interval }} + interval: {{ .Values.kubeControllerManager.serviceMonitor.interval }} + {{- end }} + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + {{- if .Values.kubeControllerManager.serviceMonitor.https }} + scheme: https + tlsConfig: + caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + {{- if .Values.kubeControllerManager.serviceMonitor.insecureSkipVerify }} + insecureSkipVerify: {{ .Values.kubeControllerManager.serviceMonitor.insecureSkipVerify }} + {{- end }} + {{- if .Values.kubeControllerManager.serviceMonitor.serverName }} + serverName: {{ .Values.kubeControllerManager.serviceMonitor.serverName }} + {{- end }} + {{- end }} + {{- if .Values.kubeControllerManager.serviceMonitor.metricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.kubeControllerManager.serviceMonitor.metricRelabelings "context" $) | nindent 6 }} + {{- end }} + {{- if .Values.kubeControllerManager.serviceMonitor.relabelings }} + relabelings: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.kubeControllerManager.serviceMonitor.relabelings "context" $) | nindent 6 }} + {{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/endpoints.yaml b/enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/endpoints.yaml new file mode 100644 index 00000000000..dde3d8b9110 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/endpoints.yaml @@ -0,0 +1,18 @@ +{{- if and .Values.kubeScheduler.enabled .Values.kubeScheduler.endpoints }} +apiVersion: v1 +kind: Endpoints +metadata: + name: {{ template "kube-prometheus.fullname" . }}-kube-scheduler + namespace: {{ .Values.kubeScheduler.namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: kube-scheduler +subsets: + - addresses: + {{- range .Values.kubeScheduler.endpoints }} + - ip: {{ . }} + {{- end }} + ports: + - name: http-metrics + port: {{ .Values.kubeScheduler.service.port }} + protocol: TCP +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/service.yaml b/enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/service.yaml new file mode 100644 index 00000000000..aad5969f5fd --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/service.yaml @@ -0,0 +1,25 @@ +{{- if and .Values.kubeScheduler.enabled .Values.kubeScheduler.service.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kube-prometheus.fullname" . }}-kube-scheduler + namespace: {{ .Values.kubeScheduler.namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: {{ template "kube-prometheus.fullname" . }}-kube-scheduler +spec: + clusterIP: None + ports: + - name: http-metrics + port: {{ .Values.kubeScheduler.service.port}} + protocol: TCP + targetPort: {{ .Values.kubeScheduler.service.targetPort}} +{{- if .Values.kubeScheduler.endpoints }}{{- else }} + selector: + {{- if .Values.kubeScheduler.service.selector }} +{{ toYaml .Values.kubeScheduler.service.selector | indent 4 }} + {{- else}} + component: kube-scheduler + {{- end}} +{{- end }} + type: ClusterIP +{{- end -}} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/servicemonitor.yaml b/enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/servicemonitor.yaml new file mode 100644 index 00000000000..7cbe29f86d7 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/kube-scheduler/servicemonitor.yaml @@ -0,0 +1,40 @@ +{{- if .Values.kubeScheduler.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "kube-prometheus.fullname" . }}-kube-scheduler + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: {{ template "kube-prometheus.fullname" . }}-kube-scheduler +spec: + jobLabel: component + selector: + matchLabels: + app.kubernetes.io/component: {{ template "kube-prometheus.fullname" . }}-kube-scheduler + namespaceSelector: + matchNames: + - {{ .Values.kubeScheduler.namespace }} + endpoints: + - port: http-metrics + {{- if .Values.kubeScheduler.serviceMonitor.interval }} + interval: {{ .Values.kubeScheduler.serviceMonitor.interval }} + {{- end }} + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + {{- if .Values.kubeScheduler.serviceMonitor.https }} + scheme: https + tlsConfig: + caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + {{- if .Values.kubeScheduler.serviceMonitor.insecureSkipVerify }} + insecureSkipVerify: {{ .Values.kubeScheduler.serviceMonitor.insecureSkipVerify }} + {{- end}} + {{- if .Values.kubeScheduler.serviceMonitor.serverName }} + serverName: {{ .Values.kubeScheduler.serviceMonitor.serverName }} + {{- end}} + {{- end}} + {{- if .Values.kubeScheduler.serviceMonitor.metricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.kubeScheduler.serviceMonitor.metricRelabelings "context" $) | nindent 6 }} + {{- end }} + {{- if .Values.kubeScheduler.serviceMonitor.relabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.kubeScheduler.serviceMonitor.relabelings "context" $) | nindent 6 }} + {{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/exporters/kubelet/servicemonitor.yaml b/enterprise/prometheus/13.0.14/templates/exporters/kubelet/servicemonitor.yaml new file mode 100644 index 00000000000..b109d78c453 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/exporters/kubelet/servicemonitor.yaml @@ -0,0 +1,85 @@ +{{- if .Values.kubelet.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "kube-prometheus.fullname" . }}-kubelet + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.labels" . | nindent 4 }} + app.kubernetes.io/component: kubelet +spec: + jobLabel: k8s-app + selector: + matchLabels: + k8s-app: kubelet + namespaceSelector: + matchNames: + - {{ .Values.kubelet.namespace }} + endpoints: + {{- if .Values.kubelet.serviceMonitor.https }} + - port: https-metrics + scheme: https + tlsConfig: + caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + serverName: kubernetes + insecureSkipVerify: true + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + honorLabels: true + {{- if .Values.kubelet.serviceMonitor.interval }} + interval: {{ .Values.kubelet.serviceMonitor.interval }} + {{- end }} + {{- if .Values.kubelet.serviceMonitor.metricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" ( dict "value" .Values.kubelet.serviceMonitor.metricRelabelings "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.kubelet.serviceMonitor.relabelings }} + relabelings: {{- toYaml .Values.kubelet.serviceMonitor.relabelings | nindent 8 }} + {{- end }} + - port: https-metrics + path: /metrics/cadvisor + scheme: https + tlsConfig: + caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + serverName: kubernetes + insecureSkipVerify: true + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + honorLabels: true + {{- if .Values.kubelet.serviceMonitor.interval }} + interval: {{ .Values.kubelet.serviceMonitor.interval }} + {{- end }} + {{- if .Values.kubelet.serviceMonitor.cAdvisorMetricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" ( dict "value" .Values.kubelet.serviceMonitor.cAdvisorMetricRelabelings "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.kubelet.serviceMonitor.cAdvisorRelabelings }} + relabelings: {{- toYaml .Values.kubelet.serviceMonitor.cAdvisorRelabelings | nindent 8 }} + {{- end }} + {{- else }} + - port: http-metrics + scheme: http + tlsConfig: + insecureSkipVerify: false + honorLabels: true + {{- if .Values.kubelet.serviceMonitor.interval }} + interval: {{ .Values.kubelet.serviceMonitor.interval }} + {{- end }} + {{- if .Values.kubelet.serviceMonitor.metricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" ( dict "value" .Values.kubelet.serviceMonitor.metricRelabelings "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.kubelet.serviceMonitor.relabelings }} + relabelings: {{- toYaml .Values.kubelet.serviceMonitor.relabelings | nindent 8 }} + {{- end }} + - port: http-metrics + path: /metrics/cadvisor + scheme: http + tlsConfig: + insecureSkipVerify: false + honorLabels: true + {{- if .Values.kubelet.serviceMonitor.interval }} + interval: {{ .Values.kubelet.serviceMonitor.interval }} + {{- end }} + {{- if .Values.kubelet.serviceMonitor.cAdvisorMetricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" ( dict "value" .Values.kubelet.serviceMonitor.cAdvisorMetricRelabelings "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.kubelet.serviceMonitor.cAdvisorRelabelings }} + relabelings: {{- toYaml .Values.kubelet.serviceMonitor.cAdvisorRelabelings | nindent 8 }} + {{- end }} + {{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/prometheus/_additionalPrometheusRules.tpl b/enterprise/prometheus/13.0.14/templates/prometheus/_additionalPrometheusRules.tpl new file mode 100644 index 00000000000..121048d87ce --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/prometheus/_additionalPrometheusRules.tpl @@ -0,0 +1,15 @@ +{{- define "prometheus.prometheus.additionalprometheusrules" -}} +{{- if and .Values.prometheus.enabled .Values.prometheus.additionalPrometheusRules}} + {{- range .Values.prometheus.additionalPrometheusRules }} +--- +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: {{ template "kube-prometheus.name" $ }}-{{ .name }} + namespace: {{ $.Release.Namespace }} + labels: {{ include "kube-prometheus.prometheus.labels" $ | nindent 4 }} +spec: + groups: {{- toYaml .groups | nindent 4 }} + {{- end }} +{{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/prometheus/_additionalScrapeJobs.tpl b/enterprise/prometheus/13.0.14/templates/prometheus/_additionalScrapeJobs.tpl new file mode 100644 index 00000000000..3c5f85140a4 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/prometheus/_additionalScrapeJobs.tpl @@ -0,0 +1,13 @@ +{{- define "prometheus.prometheus.additionalscrapejobs" -}} +{{- if (and .Values.prometheus.additionalScrapeConfigs.enabled (eq .Values.prometheus.additionalScrapeConfigs.type "internal") ) }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: additional-scrape-jobs-{{ template "kube-prometheus.prometheus.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.prometheus.labels" . | nindent 4 }} +data: + scrape-jobs.yaml: {{ include "tc.v1.common.tplvalues.render" ( dict "value" .Values.prometheus.additionalScrapeConfigs.internal.jobList "context" $ ) | b64enc | quote }} +{{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/prometheus/_prometheus.tpl b/enterprise/prometheus/13.0.14/templates/prometheus/_prometheus.tpl new file mode 100644 index 00000000000..e4c20bc6eb1 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/prometheus/_prometheus.tpl @@ -0,0 +1,363 @@ +{{- define "prometheus.prometheus.prometheus" -}} +{{- if .Values.prometheus.enabled }} +--- +apiVersion: monitoring.coreos.com/v1 +kind: Prometheus +metadata: + name: {{ template "kube-prometheus.prometheus.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.prometheus.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.prometheus.replicaCount }} + serviceAccountName: {{ template "kube-prometheus.prometheus.serviceAccountName" . }} + {{- if .Values.prometheus.serviceMonitorSelector }} + serviceMonitorSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.serviceMonitorSelector "context" $) | nindent 4 }} + {{- else }} + serviceMonitorSelector: {} + {{- end }} + {{- if .Values.prometheus.podMonitorSelector }} + podMonitorSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.podMonitorSelector "context" $) | nindent 4 }} + {{- else }} + podMonitorSelector: {} + {{- end }} + {{- if .Values.prometheus.probeSelector }} + probeSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.probeSelector "context" $) | nindent 4 }} + {{- else }} + probeSelector: {} + {{- end }} + {{- if .Values.prometheus.scrapeConfigSelector }} + scrapeConfigSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.scrapeConfigSelector "context" $) | nindent 4 }} + {{- else }} + scrapeConfigSelector: {} + {{- end }} + alerting: + alertmanagers: + {{- if .Values.prometheus.alertingEndpoints }} + {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.alertingEndpoints "context" $) | nindent 6 }} + {{- else if .Values.alertmanager.enabled }} + - namespace: {{ .Release.Namespace }} + name: {{ template "kube-prometheus.alertmanager.fullname" . }} + port: http + pathPrefix: "{{ .Values.alertmanager.routePrefix }}" + {{- else }} + [] + {{- end }} + {{- if .Values.prometheus.image }} + image: {{ template "kube-prometheus.prometheus.image" . }} + {{- end }} + {{- if .Values.prometheus.externalLabels }} + externalLabels: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.externalLabels "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.prometheusExternalLabelNameClear }} + prometheusExternalLabelName: "" + {{- else if .Values.prometheus.prometheusExternalLabelName }} + prometheusExternalLabelName: "{{ .Values.prometheus.prometheusExternalLabelName }}" + {{- end }} + {{- if .Values.prometheus.replicaExternalLabelNameClear }} + replicaExternalLabelName: "" + {{- else if .Values.prometheus.replicaExternalLabelName }} + replicaExternalLabelName: "{{ .Values.prometheus.replicaExternalLabelName }}" + {{- end }} + {{- if index .Values.prometheus "externalUrl" }} + externalUrl: "{{ .Values.prometheus.externalUrl }}" + {{- else if and .Values.ingress.main.enabled .Values.ingress.main.hosts }} + externalUrl: {{ if .Values.ingress.main.tls }}https{{else}}http{{ end }}://{{ (index .Values.ingress.main.hosts 0).name }}{{ .Values.prometheus.routePrefix }} + {{- else }} + externalUrl: http://{{ template "kube-prometheus.prometheus.fullname" . }}.{{ .Release.Namespace }}:9090{{ .Values.prometheus.routePrefix }} + {{- end }} + paused: {{ .Values.prometheus.paused }} + logLevel: {{ .Values.prometheus.logLevel }} + logFormat: {{ .Values.prometheus.logFormat }} + listenLocal: {{ .Values.prometheus.listenLocal }} + enableAdminAPI: {{ .Values.prometheus.enableAdminAPI }} + {{- if .Values.prometheus.enableFeatures }} + enableFeatures: + {{- range .Values.prometheus.enableFeatures }} + - {{ . | quote }} + {{- end }} + {{- end }} + {{- if .Values.prometheus.scrapeInterval }} + scrapeInterval: {{ .Values.prometheus.scrapeInterval }} + {{- end }} + {{- if .Values.prometheus.evaluationInterval }} + evaluationInterval: {{ .Values.prometheus.evaluationInterval }} + {{- end }} + {{- if .Values.prometheus.resources }} + resources: {{- toYaml .Values.prometheus.resources | nindent 4 }} + {{- end }} + retention: {{ .Values.prometheus.retention }} + {{- if .Values.prometheus.retentionSize }} + retentionSize: {{ .Values.prometheus.retentionSize }} + {{- end }} + {{- if .Values.prometheus.disableCompaction }} + disableCompaction: {{ .Values.prometheus.disableCompaction }} + {{- end }} + {{- if .Values.prometheus.walCompression }} + walCompression: {{ .Values.prometheus.walCompression }} + {{- end }} + portName: "{{ .Values.prometheus.portName }}" + routePrefix: "{{ .Values.prometheus.routePrefix }}" + {{- if .Values.prometheus.secrets }} + secrets: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.secrets "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.configMaps }} + configMaps: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.configMaps "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.serviceMonitorNamespaceSelector }} + serviceMonitorNamespaceSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.serviceMonitorNamespaceSelector "context" $) | nindent 4 }} + {{- else }} + serviceMonitorNamespaceSelector: {} + {{- end }} + {{- if .Values.prometheus.podMonitorNamespaceSelector }} + podMonitorNamespaceSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.podMonitorNamespaceSelector "context" $) | nindent 4 }} + {{- else }} + podMonitorNamespaceSelector: {} + {{- end }} + {{- if .Values.prometheus.probeNamespaceSelector }} + probeNamespaceSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.probeNamespaceSelector "context" $) | nindent 4 }} + {{- else }} + probeNamespaceSelector: {} + {{- end }} + {{- if .Values.prometheus.scrapeConfigNamespaceSelector }} + scrapeConfigNamespaceSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.scrapeConfigNamespaceSelector "context" $) | nindent 4 }} + {{- else }} + scrapeConfigNamespaceSelector: {} + {{- end }} + {{- if .Values.prometheus.remoteRead }} + remoteRead: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.remoteRead "context" $) | nindent 4 }} + {{- end }} + {{- with .Values.prometheus.remoteWrite }} + remoteWrite: + {{- tpl (toYaml .) $ | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.podSecurityContext.enabled }} + securityContext: {{- omit .Values.prometheus.podSecurityContext "enabled" | toYaml | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.ruleNamespaceSelector }} + ruleNamespaceSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.ruleNamespaceSelector "context" $) | nindent 4 }} + {{- else }} + ruleNamespaceSelector: {} + {{- end }} + {{- if .Values.prometheus.ruleSelector }} + ruleSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.ruleSelector "context" $) | nindent 4 }} + {{- else }} + ruleSelector: {} + {{- end }} + {{- if .Values.prometheus.storageSpec }} + storage: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.storageSpec "context" $) | nindent 4 }} + {{- else if .Values.prometheus.persistence.enabled }} + storage: + volumeClaimTemplate: + spec: + accessModes: + {{- range .Values.prometheus.persistence.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.prometheus.persistence.size | quote }} + {{- with (include "tc.v1.common.lib.storage.storageClassName" ( dict "rootCtx" . "objectData" .Values.prometheus.persistence )) | trim }} + storageClassName: {{ . }} + {{- end }} + {{- end }} + {{- if or .Values.prometheus.podMetadata.labels .Values.prometheus.podMetadata.annotations (eq .Values.prometheus.podAntiAffinityPreset "soft") (eq .Values.prometheus.podAntiAffinityPreset "hard") }} + podMetadata: + labels: + {{- if .Values.prometheus.podMetadata.labels }} + {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.podMetadata.labels "context" $) | nindent 6 }} + {{- end }} + {{- if or (eq .Values.prometheus.podAntiAffinityPreset "soft") (eq .Values.prometheus.podAntiAffinityPreset "hard") }} + {{- include "kube-prometheus.prometheus.matchLabels" . | nindent 6 }} + {{- end }} + {{- if .Values.prometheus.podMetadata.annotations }} + annotations: + {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.podMetadata.annotations "context" $) | nindent 6 }} + {{- end }} + {{- end }} + {{- if .Values.prometheus.querySpec }} + query: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.querySpec "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.affinity }} + affinity: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.affinity "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.nodeSelector }} + nodeSelector: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.nodeSelector "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.tolerations }} + tolerations: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.tolerations "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.volumes }} + volumes: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.volumes "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.prometheus.volumeMounts }} + volumeMounts: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.volumeMounts "context" $) | nindent 4 }} + {{- end }} + {{- if or .Values.prometheus.additionalScrapeConfigs.enabled .Values.prometheus.additionalScrapeConfigsExternal.enabled }} + additionalScrapeConfigs: + {{- if and .Values.prometheus.additionalScrapeConfigs.enabled (eq .Values.prometheus.additionalScrapeConfigs.type "external") }} + name: {{ .Values.prometheus.additionalScrapeConfigs.external.name }} + key: {{ .Values.prometheus.additionalScrapeConfigs.external.key }} + {{- else if and .Values.prometheus.additionalScrapeConfigs.enabled (eq .Values.prometheus.additionalScrapeConfigs.type "internal") }} + name: additional-scrape-jobs-{{ template "kube-prometheus.prometheus.fullname" . }} + key: scrape-jobs.yaml + {{- else if and (not .Values.prometheus.additionalScrapeConfigs.enabled) .Values.prometheus.additionalScrapeConfigsExternal.enabled }} + name: {{ .Values.prometheus.additionalScrapeConfigsExternal.name }} + key: {{ .Values.prometheus.additionalScrapeConfigsExternal.key }} + {{- end }} + {{- end }} + {{- if .Values.prometheus.additionalAlertRelabelConfigsExternal.enabled }} + additionalAlertRelabelConfigs: + name: {{ .Values.prometheus.additionalAlertRelabelConfigsExternal.name }} + key: {{ .Values.prometheus.additionalAlertRelabelConfigsExternal.key }} + {{- end }} +{{- include "kube-prometheus.imagePullSecrets" . | indent 2 }} + {{- if or .Values.prometheus.containers .Values.prometheus.thanos.create .Values.prometheus.containerSecurityContext.enabled .Values.prometheus.containerSecurityContext.enabled .Values.operator.prometheusConfigReloader.containerSecurityContext.enabled }} + containers: + {{- if .Values.prometheus.thanos.create }} + - name: thanos-sidecar + image: {{ template "kube-prometheus.prometheus.thanosImage" . }} + imagePullPolicy: {{ .Values.prometheus.thanos.image.pullPolicy }} + args: + - sidecar + - --prometheus.url={{ default "http://localhost:9090" .Values.prometheus.thanos.prometheusUrl }} + - --grpc-address=0.0.0.0:10901 + - --http-address=0.0.0.0:10902 + - --tsdb.path=/prometheus/ + {{- if .Values.prometheus.thanos.objectStorageConfig }} + - --objstore.config=$(OBJSTORE_CONFIG) + {{- end }} + {{- if .Values.prometheus.thanos.extraArgs }} + {{ toYaml .Values.prometheus.thanos.extraArgs | indent 8 | trim }} + {{- end }} + {{- if .Values.prometheus.thanos.objectStorageConfig }} + env: + - name: OBJSTORE_CONFIG + valueFrom: + secretKeyRef: + name: {{ .Values.prometheus.thanos.objectStorageConfig.secretName }} + key: {{ .Values.prometheus.thanos.objectStorageConfig.secretKey | default "thanos.yaml" }} + {{- end }} + {{- if .Values.prometheus.thanos.resources }} + resources: {{- toYaml .Values.prometheus.thanos.resources | nindent 8 }} + {{- end }} + ports: + - name: thanos + containerPort: 10901 + protocol: TCP + - name: http + containerPort: 10902 + protocol: TCP + volumeMounts: + - mountPath: /prometheus + name: prometheus-{{ template "kube-prometheus.prometheus.fullname" . }}-db + {{- if not (.Values.prometheus.storageSpec.disableMountSubPath | default (not .Values.prometheus.persistence.enabled)) }} + subPath: prometheus-db + {{- end }} + {{- if .Values.prometheus.thanos.extraVolumeMounts }} + {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.thanos.extraVolumeMounts "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.prometheus.thanos.containerSecurityContext.enabled }} + # yamllint disable rule:indentation + securityContext: {{- omit .Values.prometheus.thanos.containerSecurityContext "enabled" | toYaml | nindent 8 }} + # yamllint enable rule:indentation + {{- end }} + {{- if .Values.prometheus.thanos.livenessProbe.enabled }} + livenessProbe: + httpGet: + path: {{ .Values.prometheus.thanos.livenessProbe.path }} + port: http + scheme: HTTP + initialDelaySeconds: {{ .Values.prometheus.thanos.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.prometheus.thanos.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.prometheus.thanos.livenessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.prometheus.thanos.livenessProbe.failureThreshold }} + successThreshold: {{ .Values.prometheus.thanos.livenessProbe.successThreshold }} + {{- end }} + {{- if .Values.prometheus.thanos.readinessProbe.enabled }} + readinessProbe: + httpGet: + path: {{ .Values.prometheus.thanos.readinessProbe.path }} + port: http + scheme: HTTP + initialDelaySeconds: {{ .Values.prometheus.thanos.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.prometheus.thanos.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.prometheus.thanos.readinessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.prometheus.thanos.readinessProbe.failureThreshold }} + successThreshold: {{ .Values.prometheus.thanos.readinessProbe.successThreshold }} + {{- end }} + {{- end }} + {{- if or .Values.prometheus.containerSecurityContext.enabled .Values.prometheus.livenessProbe.enabled .Values.prometheus.readinessProbe.enabled }} + ## This monkey patching is needed until the securityContexts are + ## directly patchable via the CRD. + ## ref: https://github.com/prometheus-operator/prometheus-operator/issues/3947 + ## currently implemented with strategic merge + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/strategic-merge-patch.md + - name: prometheus + {{- if .Values.prometheus.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.prometheus.containerSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + {{- if .Values.prometheus.livenessProbe.enabled }} + livenessProbe: + httpGet: + path: {{ .Values.prometheus.livenessProbe.path }} + port: main + scheme: HTTP + initialDelaySeconds: {{ .Values.prometheus.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.prometheus.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.prometheus.livenessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.prometheus.livenessProbe.failureThreshold }} + successThreshold: {{ .Values.prometheus.livenessProbe.successThreshold }} + {{- end }} + {{- if .Values.prometheus.readinessProbe.enabled }} + readinessProbe: + httpGet: + path: {{ .Values.prometheus.readinessProbe.path }} + port: main + scheme: HTTP + initialDelaySeconds: {{ .Values.prometheus.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.prometheus.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.prometheus.readinessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.prometheus.readinessProbe.failureThreshold }} + successThreshold: {{ .Values.prometheus.readinessProbe.successThreshold }} + {{- end }} + {{- end }} + {{- if or .Values.operator.prometheusConfigReloader.containerSecurityContext.enabled .Values.operator.prometheusConfigReloader.livenessProbe.enabled .Values.operator.prometheusConfigReloader.readinessProbe.enabled }} + ## This monkey patching is needed until the securityContexts are + ## directly patchable via the CRD. + ## ref: https://github.com/prometheus-operator/prometheus-operator/issues/3947 + ## currently implemented with strategic merge + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/strategic-merge-patch.md + - name: config-reloader + {{- if .Values.operator.prometheusConfigReloader.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.operator.prometheusConfigReloader.containerSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + {{- if .Values.operator.prometheusConfigReloader.livenessProbe.enabled }} + livenessProbe: + tcpSocket: + port: reloader-web + initialDelaySeconds: {{ .Values.operator.prometheusConfigReloader.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.operator.prometheusConfigReloader.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.operator.prometheusConfigReloader.livenessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.operator.prometheusConfigReloader.livenessProbe.failureThreshold }} + successThreshold: {{ .Values.operator.prometheusConfigReloader.livenessProbe.successThreshold }} + {{- end }} + {{- if .Values.operator.prometheusConfigReloader.readinessProbe.enabled }} + readinessProbe: + tcpSocket: + port: reloader-web + initialDelaySeconds: {{ .Values.operator.prometheusConfigReloader.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.operator.prometheusConfigReloader.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.operator.prometheusConfigReloader.readinessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.operator.prometheusConfigReloader.readinessProbe.failureThreshold }} + successThreshold: {{ .Values.operator.prometheusConfigReloader.readinessProbe.successThreshold }} + {{- end }} + {{- end }} + {{- if .Values.prometheus.containers }} + {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.containers "context" $) | nindent 4 }} + {{- end }} + {{- end }} + {{- if .Values.prometheus.priorityClassName }} + priorityClassName: {{ .Values.prometheus.priorityClassName }} + {{- end }} +{{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/prometheus/_servicemonitor.tpl b/enterprise/prometheus/13.0.14/templates/prometheus/_servicemonitor.tpl new file mode 100644 index 00000000000..20744f2c924 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/prometheus/_servicemonitor.tpl @@ -0,0 +1,29 @@ +{{- define "prometheus.prometheus.servicemonitor" -}} +{{- if and .Values.prometheus.enabled .Values.prometheus.serviceMonitor.enabled }} +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "kube-prometheus.prometheus.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.prometheus.labels" . | nindent 4 }} +spec: + selector: + matchLabels: {{- include "kube-prometheus.prometheus.matchLabels" . | nindent 6 }} + namespaceSelector: + matchNames: + - {{ .Release.Namespace }} + endpoints: + - port: http + {{- if .Values.prometheus.serviceMonitor.interval }} + interval: {{ .Values.prometheus.serviceMonitor.interval }} + {{- end }} + path: {{ trimSuffix "/" .Values.prometheus.routePrefix }}/metrics + {{- if .Values.prometheus.serviceMonitor.metricRelabelings }} + metricRelabelings: {{- include "tc.v1.common.tplvalues.render" ( dict "value" .Values.prometheus.serviceMonitor.metricRelabelings "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.prometheus.serviceMonitor.relabelings }} + relabelings: {{- toYaml .Values.prometheus.serviceMonitor.relabelings | nindent 8 }} + {{- end }} +{{- end }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/prometheus/clusterrole.yaml b/enterprise/prometheus/13.0.14/templates/prometheus/clusterrole.yaml new file mode 100644 index 00000000000..ae96e2d45f8 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/prometheus/clusterrole.yaml @@ -0,0 +1,41 @@ +{{- if .Values.prometheus.enabled -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "kube-prometheus.prometheus.fullname" . }} + labels: {{- include "kube-prometheus.prometheus.labels" . | nindent 4 }} +rules: + - apiGroups: + - "" + resources: + - nodes/metrics + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes + - nodes/proxy + - services + - endpoints + - pods + verbs: + - "get" + - "list" + - "watch" + - apiGroups: + - extensions + - "networking.k8s.io" + resources: + - ingresses + verbs: + - get + - list + - watch + - nonResourceURLs: + - "/metrics" + verbs: + - "get" +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/prometheus/clusterrolebinding.yaml b/enterprise/prometheus/13.0.14/templates/prometheus/clusterrolebinding.yaml new file mode 100644 index 00000000000..7ca10743f4a --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/prometheus/clusterrolebinding.yaml @@ -0,0 +1,15 @@ +{{- if .Values.prometheus.enabled }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "kube-prometheus.prometheus.fullname" . }} + labels: {{- include "kube-prometheus.prometheus.labels" . | nindent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "kube-prometheus.prometheus.fullname" . }} +subjects: + - kind: ServiceAccount + name: {{ template "kube-prometheus.prometheus.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/templates/prometheus/serviceaccount.yaml b/enterprise/prometheus/13.0.14/templates/prometheus/serviceaccount.yaml new file mode 100644 index 00000000000..39539fc1191 --- /dev/null +++ b/enterprise/prometheus/13.0.14/templates/prometheus/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if and .Values.prometheus.enabled .Values.prometheus.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "kube-prometheus.prometheus.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} + labels: {{- include "kube-prometheus.prometheus.labels" . | nindent 4 }} + {{- if index .Values.prometheus.serviceAccount "annotations" }} + annotations: {{- include "tc.v1.common.tplvalues.render" (dict "value" .Values.prometheus.serviceAccount.annotations "context" $) | nindent 4 }} + {{- end }} +{{- include "kube-prometheus.imagePullSecrets" . }} +{{- end }} diff --git a/enterprise/prometheus/13.0.14/values.yaml b/enterprise/prometheus/13.0.14/values.yaml new file mode 100644 index 00000000000..e69de29bb2d