From 0e4da335436593e18c67ad01cb1240a4f3338b05 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Wed, 6 Dec 2023 18:24:39 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- enterprise/prometheus/13.0.24/CHANGELOG.md | 99 + enterprise/prometheus/13.0.24/Chart.yaml | 54 + enterprise/prometheus/13.0.24/LICENSE | 106 ++ enterprise/prometheus/13.0.24/README.md | 27 + .../prometheus/13.0.24/app-changelog.md | 9 + enterprise/prometheus/13.0.24/app-readme.md | 8 + .../13.0.24/charts/common-14.3.5.tgz | Bin 0 -> 73073 bytes .../charts/kube-state-metrics-3.0.38.tgz | Bin 0 -> 77852 bytes .../13.0.24/charts/node-exporter-3.0.40.tgz | Bin 0 -> 77643 bytes enterprise/prometheus/13.0.24/ix_values.yaml | 1343 +++++++++++++ enterprise/prometheus/13.0.24/questions.yaml | 1667 +++++++++++++++++ .../prometheus/13.0.24/templates/NOTES.txt | 1 + .../prometheus/13.0.24/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.24/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.24/values.yaml | 0 36 files changed, 4587 insertions(+) create mode 100644 enterprise/prometheus/13.0.24/CHANGELOG.md create mode 100644 enterprise/prometheus/13.0.24/Chart.yaml create mode 100644 enterprise/prometheus/13.0.24/LICENSE create mode 100644 enterprise/prometheus/13.0.24/README.md create mode 100644 enterprise/prometheus/13.0.24/app-changelog.md create mode 100644 enterprise/prometheus/13.0.24/app-readme.md create mode 100644 enterprise/prometheus/13.0.24/charts/common-14.3.5.tgz create mode 100644 enterprise/prometheus/13.0.24/charts/kube-state-metrics-3.0.38.tgz create mode 100644 enterprise/prometheus/13.0.24/charts/node-exporter-3.0.40.tgz create mode 100644 enterprise/prometheus/13.0.24/ix_values.yaml create mode 100644 enterprise/prometheus/13.0.24/questions.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/NOTES.txt create mode 100644 enterprise/prometheus/13.0.24/templates/_helpers.tpl create mode 100644 enterprise/prometheus/13.0.24/templates/alertmanager/_alertmanager.tpl create mode 100644 enterprise/prometheus/13.0.24/templates/alertmanager/secrets.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/alertmanager/serviceaccount.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/alertmanager/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/common.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/core-dns/service.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/core-dns/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/kube-apiserver/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/kube-controller-manager/endpoints.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/kube-controller-manager/service.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/kube-controller-manager/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/kube-scheduler/endpoints.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/kube-scheduler/service.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/kube-scheduler/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/exporters/kubelet/servicemonitor.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/prometheus/_additionalPrometheusRules.tpl create mode 100644 enterprise/prometheus/13.0.24/templates/prometheus/_additionalScrapeJobs.tpl create mode 100644 enterprise/prometheus/13.0.24/templates/prometheus/_prometheus.tpl create mode 100644 enterprise/prometheus/13.0.24/templates/prometheus/_servicemonitor.tpl create mode 100644 enterprise/prometheus/13.0.24/templates/prometheus/clusterrole.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/prometheus/clusterrolebinding.yaml create mode 100644 enterprise/prometheus/13.0.24/templates/prometheus/serviceaccount.yaml create mode 100644 enterprise/prometheus/13.0.24/values.yaml diff --git a/enterprise/prometheus/13.0.24/CHANGELOG.md b/enterprise/prometheus/13.0.24/CHANGELOG.md new file mode 100644 index 00000000000..b21d46a3b8c --- /dev/null +++ b/enterprise/prometheus/13.0.24/CHANGELOG.md @@ -0,0 +1,99 @@ +**Important:** +*for the complete changelog, please refer to the website* + + + + +## [prometheus-13.0.24](https://github.com/truecharts/charts/compare/prometheus-13.0.23...prometheus-13.0.24) (2023-12-06) + +### Chore + +- update container image bitnami/alertmanager to 0.26.0[@ec6a6b3](https://github.com/ec6a6b3) ([#15806](https://github.com/truecharts/charts/issues/15806)) + + + + +## [prometheus-13.0.23](https://github.com/truecharts/charts/compare/prometheus-13.0.22...prometheus-13.0.23) (2023-12-03) + +### Chore + +- bump everything to ensure catalog has latest versions + - fix annotations again + - update annotations + - cleanup chart.yaml and add min-max scale version + + + + + + + +## [prometheus-13.0.22](https://github.com/truecharts/charts/compare/prometheus-13.0.21...prometheus-13.0.22) (2023-11-18) + + + + +## [prometheus-13.0.21](https://github.com/truecharts/charts/compare/prometheus-13.0.20...prometheus-13.0.21) (2023-11-17) + +### Feat + +- update container image bitnami/prometheus to v2.48.0 ([#14798](https://github.com/truecharts/charts/issues/14798)) + + + + +## [prometheus-13.0.20](https://github.com/truecharts/charts/compare/prometheus-13.0.19...prometheus-13.0.20) (2023-11-17) + + + + +## [prometheus-13.0.19](https://github.com/truecharts/charts/compare/prometheus-13.0.18...prometheus-13.0.19) (2023-11-09) + +### Chore + +- update container image tccr.io/truecharts/prometheus to v2.47.2 ([#14491](https://github.com/truecharts/charts/issues/14491)) + - update helm general non-major ([#14467](https://github.com/truecharts/charts/issues/14467)) + + + + +## [prometheus-13.0.18](https://github.com/truecharts/charts/compare/prometheus-13.0.17...prometheus-13.0.18) (2023-11-09) + +### Chore + +- update container image tccr.io/truecharts/prometheus to v2.47.2 ([#14480](https://github.com/truecharts/charts/issues/14480)) + + + + +## [prometheus-13.0.17](https://github.com/truecharts/charts/compare/prometheus-13.0.16...prometheus-13.0.17) (2023-11-08) + +### Chore + +- update helm general non-major ([#14465](https://github.com/truecharts/charts/issues/14465)) + + + + +## [prometheus-13.0.16](https://github.com/truecharts/charts/compare/prometheus-13.0.15...prometheus-13.0.16) (2023-11-08) + + + + +## [prometheus-13.0.15](https://github.com/truecharts/charts/compare/prometheus-13.0.14...prometheus-13.0.15) (2023-11-08) + + + + +## [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 diff --git a/enterprise/prometheus/13.0.24/Chart.yaml b/enterprise/prometheus/13.0.24/Chart.yaml new file mode 100644 index 00000000000..39851b4bb55 --- /dev/null +++ b/enterprise/prometheus/13.0.24/Chart.yaml @@ -0,0 +1,54 @@ +kubeVersion: ">=1.24.0" +apiVersion: v2 +name: prometheus +version: 13.0.24 +appVersion: 2.48.0 +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. +home: https://truecharts.org/charts/enterprise/prometheus +icon: https://truecharts.org/img/hotlink-ok/chart-icons/prometheus.png +deprecated: false +sources: + - https://github.com/truecharts/charts/tree/master/charts/enterprise/prometheus + - https://hub.docker.com/r/bitnami/prometheus + - https://github.com/prometheus-community/helm-charts + - https://github.com/prometheus-operator/kube-prometheus +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +keywords: + - metrics +dependencies: + - name: common + version: 14.3.5 + repository: https://library-charts.truecharts.org + condition: "" + alias: "" + tags: [] + import-values: [] + - name: node-exporter + version: 3.0.40 + repository: https://deps.truecharts.org + condition: exporters.enabled,exporters.node-exporter.enabled + alias: "" + tags: [] + import-values: [] + - name: kube-state-metrics + version: 3.0.38 + repository: https://deps.truecharts.org + condition: exporters.enabled,exporters.kube-state-metrics.enabled + alias: "" + tags: [] + import-values: [] +annotations: + max_scale_version: 23.10.1 + min_scale_version: 22.12.4 + truecharts.org/SCALE-support: "true" + truecharts.org/category: metrics + truecharts.org/max_helm_version: "3.13" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: enterprise diff --git a/enterprise/prometheus/13.0.24/LICENSE b/enterprise/prometheus/13.0.24/LICENSE new file mode 100644 index 00000000000..c30fceb4a5b --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/README.md b/enterprise/prometheus/13.0.24/README.md new file mode 100644 index 00000000000..f8a41e479fe --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/app-changelog.md b/enterprise/prometheus/13.0.24/app-changelog.md new file mode 100644 index 00000000000..8132b8158ee --- /dev/null +++ b/enterprise/prometheus/13.0.24/app-changelog.md @@ -0,0 +1,9 @@ + + +## [prometheus-13.0.24](https://github.com/truecharts/charts/compare/prometheus-13.0.23...prometheus-13.0.24) (2023-12-06) + +### Chore + +- update container image bitnami/alertmanager to 0.26.0[@ec6a6b3](https://github.com/ec6a6b3) ([#15806](https://github.com/truecharts/charts/issues/15806)) + + \ No newline at end of file diff --git a/enterprise/prometheus/13.0.24/app-readme.md b/enterprise/prometheus/13.0.24/app-readme.md new file mode 100644 index 00000000000..93f59634eaa --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/charts/common-14.3.5.tgz b/enterprise/prometheus/13.0.24/charts/common-14.3.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..58fbc6f4962aed33ebff0850b663611ec736857f GIT binary patch literal 73073 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 ThtK~X009602~<;E01ycPDc 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 QJ_o6hKn7w= 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Ò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

eedBCS*0ON=Thr zjZ+-IpOQI4D`>a^)~RhqQo4dxIheZk-l7R+1)|_h&f6rkPb=k`Agc0^DsWCKKOl<7 z_Z&2prw$3wRpb^wr-*R@yhM`=0b2wDv)Ys=6Cmb-Q)UbTFiH0K!Z*;cPc^h=0h5Ge zY{=`%s^zhsdF&TNP*gQ)Mxlte4vs(Eyl%&h^Ya8VfkxzFy2vwmmvFjXBXXBgW+bqHBghcAgSaq_Mg@@}`Z~>~1m$eVAw*yce5Tr8U;R(W z##P&Yg|nw?|2^E?|6I${rqwBJsP&viX=XX1j5F#iMlUhzcEqEqCP*e!=vRyBJPiG+ zDa(je?Xz5;kNtF8|4L=t|Jm4PcV`1_{$GbjZv5Zllar1A*IFLKDk3vp8Y8THpIIfE zNB5m~g+arN;dM2hr>O{5dhx75h)Nf4UXBfQ4fojPJFV98kBR621CRw33fo_c7d3sg z#BaytSroFouMFQA{!JatTs%|o0!3b{epa1!9g!IFx517lvGjzgS`<`yvp|&M1nq$B zO!ccZzOCp`=?k;9(KiEqA3xwTz(fnKx7j^e{@I_b`=L3Pw_AR=_~)Ue6nKw|M1}S_}JI~H~wF1d3^bw z<&)J2eqmnJj3OYXvwVWO3TloN7oer2<}a+9O(^8T4g5gcqGqH@*Ie^0@9E%7_+Uh` zn$`jW0uz;f##TvJ5}0^}ou&nPhQqYT$FBTl-lKc)lY;yYfHUxwXzPi*P0SG=At2(0 zDnV4|BpsAYs{gv{te`lXL{--uy{77Mk*C$qE#JplW-`xHfQvGtHv|&?u5^$ABSKPF z@6lJZHR!0IbL4w9o0w?tWryT0ATdE2A=y)?g?g5{m*o>vBUJO$De-z~#n*;q=xJ5E z5t|aK(uQv7d;ndQ%^Hxl>bDKd=_>Uz(a;WXT=31#dK#VnX0&8$bPlk3)J$m3e6E|n z6)+IJ5$sL^EOjo)zl^4KY~nZSaC}`VB~hFIS~@b!2}!w@R@~<(0ujB7KrjS>Q3b{^ z%8R#edLkxU@@A7*Dl381t%Jnv;Ieqj#2W+mcO@H=(G6r`K}L~jFy2Z=IYkRh=Hg>Y z$oqK?qQzkZBJJk2HGGRw1Q{BZ=|+wD|Ag($nN+&%ISh7yEq@3#n55CJIV~&yNzV35 zu_(21wN#z`i~-5zW~$fEz&5~HfxmKXeKXGae8umv|sWP zg$Eyx5=C!V%onAdU-bUhIVq5f;8sQ$OZy`9KN(ABBtg&AxyoZA$TfGqmveD^!Zbp` z$yo=k7E~`Nza*pBg~H!mIFzd$#O|apo8^?1>$XL>a&975)le>9#q$?R1Xuz_j#N|* z8Ao7D$?WfNmU=AO#G&4*GPFz(o;(dPl~SmKop2*H>uFBY-Xx)EB?eiML~>O|Vl6~^ zO+884|ybKLkrPLBp*UEfp$I3{5EPx7L;BwMF}%G=5{$D>Q+G$oQka7 z>)7<~UN1CI-D{g8+P#)B^dMk`tIE$vh6}>?0`Az?7F4^d8 z**5o8(Nf7!(_j8niKg2);*Q4~T(tb@tWosmv)h6-o9+I2{dZ{RD~ffbdi&;4h()>( z%fqY}wMbWLxnwZ7K<%prJ=6N}#aTi7+W)k-Y#$?F+x@SDWAFU$aO3~Eo=3)Z(4z`& zb9l!`dfC7af%`>9tcMOp!>Zou&k8-OV%cr;46uB;x14>ktiObjv0Po!*V=#js#PJ76Q8p>2d^nCykG&KBPCRbm$J0|R&*)wx z8;W={9@XocDc5+Qk;b5XU7*iU0r`Hu2XGL@Fcqq1#j>IuZ#Zs|G@S_&w@&p+y)+y0 zX;^DHHmi9?cW)hXIV!A~oN3CS`$mMpZgW6cLn|riCDm>jpAZlEZ4(IPPy6)L|Gn$H zUG@QO{(nbDM~?n~a(1*i|6j`^o$|dq-YeS(1nz(L+7JZl`}#Zu(=xK#YYt=i!d z0~b&J9B-3TqWzsvSSiK(Uz0mju~^pz<e|49P zPU8<=kC_yfb1HA9**h9r(-YmQ2vnyyRxQIU0r|Y(x;4&#oj!JqCw3^i8lfqRMy{G! zHnI~$*;6v{hdr)mF5J^PMX(*aUv)ZLhpEw5{j%_{(NC24F9>kc_;;aTSX&wN*E-sC z4s|E~vM69YouRCF&X+B=`rk(j*(e>K#nWH@ix51$d;r_-|D2w?`CpFC&o=hIwLDz} zunM}g=Q`)%0?kYTq>DP94`PEZ%Gw(#8NBfYuOy5#;RM(k=+}UQh&(&U$B%=(y}d>| zl4#p%S{RPR>n$rvg9+R7hT)aAWv$;qLH-VB=}trahSP!1h|Bd{|I;#n%MD4Y@GZ^k zpk@6Z9=iD-j?NBF4maz69S>I$2A2PCX%TL80&Yu)V1?>wa01q?b#w%t=FsFgHPg|% z!!ylc-4&i`4h?@z4nK4^N14QhSCi$USP=1z*RyptoBfrov|NCxl)MVBQloqC}Wh5cs*<{vL= zVlU&5SNrkLgz;=rHE3B^Y+U^FH>+kiT>pws(WnZ7)>6W(? zz1$32iJA@FyD7~+ve~5$jMS7+d5(lK#F6NBpq5C$iILvQGl+>8GX?QEQO7paoq{04 zXgeSjl|athWPRHF0uBmwaNNx);pPcHef2*XH>KYd;1>Pw^z6(%|2sN6*~EWe%j4bu zy_O@qk}JSv{NZ)P{ZNf{y;7`-TPmJ<%1bXST)Z5}xt_K@f*8s2GQ=b$BbW~H2N9C?N`<1e z)OL5@=|^`Gt<8DE;tV<_87t_VzYl1`po8x~s{)LZ2pC=RuKpDVhC^k*rA|c~qI8qW8u%M4x_} zQ&6`-H5X8*uZ`PNFBV!|YnK1&QY|)ZPFt!rZBW4yo7CnRx`K@=Xm!~RzcG1kspOTK zW8kp5WJFp?-UDChdQaHb05f@5B(hunq#^x7u-F)8>Y_vyY}fIH{}jh4J@Lw ze@6!=XWstrcoYA1EzhIw|H>pF^#{PJNY`DPaiQ0}66)^S^i-|cwW-g>uFV9r)NafI zx%6(Vyj$CGH)eO_u?~yNp|slzT;xH&x|9&IGs;P#u5bsg@id4Av!1)@G4EJ~+Emej zmulCo8*JMKxc?Nqd-MFw1-MKSnGQIH%<~DT*$vzHSLt`&&QpIs+(@vpDxIe&fVg{m zY;$z~=Y4w0f8_;yBQj%k)dJf5zmAVw`7f@7Z{+_P9?$>F8sXLWfH~>Z>XiYjU^j)p zM%Pda><_MTV9(!%gRZTl%qNlqq?#SfWh3By}ZDJ5FXzX zEKf$JJPBZ7F{RD{LO9(1p+WLw)Ga88QLuf(;@Y)tNCK)}0^QB7p+Q32VH2JBON|i{ z;tIX|6Z2%Wi4)T4Eb8&jp&s*SD99~3M&;--xz^}**F>ZcSL;Ks>M+A6%?f?}f?{&x z__ui)pWgaEEnvUfzpeQ{PLBQje<$ag^PjamQaZ_0=&MutWd`(~TE47g>M)K%F0r(9 za`DE~5meF8C5&c;M}V`At~+QsqE@NUiCnfOLY2Ta=27x^6w^Yi*}O zXH}|!oRWgXL=Z8W7DXOVGj#;;Xp8fPpK+)R@3Sa#a&jE{42!9Yy?9rJhL83G_2x8H zLHhTMyc(sgumI{zX14@W5TMS<0=-qGEia|Wrefq0T_5}S$T3j@CAX@8a%d63YquNJ zhbc;PMA@)xqy*uZ&}xOW(T|-S;0-%PFaarn$q1$}ixCCaHw=sk1zf#L(~(aawdHWS zqz=tq5}16WKt%zq_zo9Sziw*Oy1sF$nN#Z-D9EkYUa7>Jb|FW5HjS!imJ`Z{niYh? z2@-u2Q&A{%A|MT+MPMe#F}~5WHZb*ccbqad7T=;Gp2{}tr1CcRab}b#U$fRlbI-a} z3GUx*I4wuZY9a~n#sRaA^uCCde(a8I6-${H($m&k5dn`zCq+((*v|mh{k=8?j#l>q zv!WmrsTnYzjkM(QS=BSU%^La!kZqiL+ReM$?7OZU&YLEnUo12Sb<;hjq3@I)M9-g$ zbrqZDV+E~=HP(2aH%+8QnyIPe`tv(D)y*Tpoj6Oc2DWBWaq7Blhg_JQG6B1s!BMwW zk`}j;^cFtYaU!If3{{i~(#-4XcWN&#rYfJrGN_mA1Ih||pA)PT<~!srC`4oYzRH8c z=V%e{v3q8PW-&>i$D&NDuYiO+SR0B<>qib_*G$uZT7O`^J*WO%XnYkNulRmk=c20b zW7vJWTld`HXHh#cA*Wbx2{*Oa-rauG3{EboO-~7V?`34F0>1{(i>itd@PHc=o6p%h zG-4>8QxtjmMoJA?Dab55t^Ji zmdCMej^0qP8+=d0anzyuf(=SI%y5Ajs@+crSpJ@{`_iiGR|WiE4?4l_1iEzBdyAxG z26t1G0sL=Zj6Wa-M)L^+F@$g9IV13f+{@AoMWkAkg4kQP%k?Scl+y;T;D|ZL5QBHnIlP%$3D! zMS4^@R*^z3np0klcPWHaN&jFFk?^5gNtq&+$Vv@DC3W+tS%m~E`%|7@i$l#&d=B%x z#eA+EC}n`X$x-fbV>uSB+_FWc_6{*Zy~e+K#t+#JqPX zXCsCGO-{X#d34UuYm%Vr8{dfo*uqGz*#-+~1K?DC_HzX!$3=LMp&Ze%v%oXytxHrT&5N0UoDeb4_Eaqsm1t@ppq zPh9`M!}GIE{Li&KQr`Y>wYtN_nm6GT)b@^72fB_IBY99^%$n<2*&T9t0O|Q_wVlWhA40o;i;c4=fGr=F`$@q z_D)%;1{8K_sxS>WGQG*tdmyH*STcAFaKV6{7<|tr2v5c!5|g^-vLO0ZeRqd!M_nYe zywor&a5lM0A)W=)vgQ5hT6FD4Qk+97S;#*u6nkPxr?AF~&6nL*uf~dTUpfX~qnqba zep)@{KOMpT3P79uKRZ5j{eKS5H~D|o^2qz&-&|g;D&i}jAw3lUS!MMafQU^ZokJ?t zBo4ha%jPY!p?SNkzBw`V)gk2%2B&LKId~OQ*ATxwB|`vSN4!|xP@6-x9hA(HU9M=- zjyJyJlj$|x)5H5u<2=pRTt{DNF>O9=Ow#KykkP_^#0e5NKN5nNm=Z!m*#(fX`3xzm zN%%73cF1>M1tH^bqsBM~b(I=#LkyOa<84x0a;!gsb9G<&Pv%9ZoPXxidjI>t&HsIL ze7MQ~vzEt;|MHfP@Jgb;h`C|~|MYKs%QDVYZ=;4IPX%tKKou_xby&z#F-L1IhKY~H zU2X}%Wfh%6z8K(^4)`MR?HcaI?7(AP<`!*4R$F~8Z|mw-YNU`HnrG4&Y$8#%?(T9d zd++C&Oz8`Jdh&lSJYN@4(8B+Z4^CbC@5#yG*@pkGL+>VG}bzLig#{&#-r+5b;YH}QYg@)$yWb*kSo zx!%~?QoJ!Qw;Kzjbn6_?M^)}0(uY}@;+muSFh8rDvBz%@?4y&`b&ces+S>&0`BH=T z)MPSi+*GjDB@(pe{~s%4&lkN9`drf1|4$ANJ^k-& zbN;iQM=dgWfqz9VAZn8IRsdD4PvHon=XEz%kTQ-!FK-Z51rDhc&nno6CF^wy>u?KE zZTYUu#XQ3FyuIosUPbybaAZ52GTM(&Ex!{Z<7eS2+kHbC$o-z^4C|09}H|Q6^ zYjp;e&jPiB&WC|})*&5TO@<~V-NA4PZN0M&q_obuUhO~ScnYUiPd>|zaNW47O%WsM z0EYti0K>aq(iRGg23fD*Bm9&B8n>Xbdn z>HFxdk{v$8dAwb#l;aQMn9Q?3lzOQI>&7^|dE93?{r^&~k&fGdHvjL_BUk@FIXvFz z|7&?H{a+31iuVBu>T=tGvhpX~6=;#r)l=MABuniQ^icSl1^uON&!C%K{@4mo$x1eQQ1$eb|95C40za+P{&(id|D&^`&Hb;nJYucAnisIZ+2lt# zx-t&PoJxVXs#9S#b$Y4+Wv$0Q7oIgy!H~lWr6rGx8(Zmrh};CO+tG3t2>lP7f7C?k zdg81(%jU@WOFeRKoY}q9$|gvg0%BkJW z$X6EcXWrA*tPO>J=jmT%BfS){5?(K*OV{#cZ+U0e6~HYGJ(}IGS;hO)Do=X(bkm+{ z2d|H&WHmA^Q?X!qmz-pL&cLGF_K~c*MZOE>Ouk|&(}Xt$%i0ca%OnTMZH{8V2;Z$G z1hMQdh1{r;3}iS3B5Jvv;^DWJfE5a8z{f-YE{DO~`hKMuav z$W;WR=O|Cf{S0MAKh-EP>a9jm^H94jV1dT-^cMBRjj4)k8Q;l{$UTQ>MzY?hC8FA6 zBK9{j>W9)Vyuu?Pb45wk8=;tz?4d|~0SfkK{&ds-WtyS=pK*r!UjFJ3|K;HL*o*&q zvdRCrmPgwE5uNDRE-Isx_Un^VL4C7BqR0daQv@Qlup=$^O*JFMBU+~C>%XN~=u}Qv zI1sdNCaen8J_3(Rbz61GG=6T$cU4>%OEqq+$O%(ZZ=1|;0m@L+uXh$=c{#nrbZa$vY)>Zf?DiON7ED9V2?5G^>Z{(kxD zCGXhZZr{9)On4R3msYK;l-dOWY)bC*Pmx!U3tl;Ev4G1l+-_ zkh|1^!niO%kSx951*5q*`-F48Cn%~>FZ*&4?Uwt1>jF$r!9WfvA1TOWQVS@Y>iJCJ zBR)YNzzi1g6p6QD(%eCsFe5jSf5NAUi?4BtYG^;Cuo6V^b)g< zdx19oe|+S|e>^!lKH2d9bv$jXtr}~Kxv9;%uwn;{-8lKM3$|okE7+o_rS<6ww(Bf| zezj{WJA-`Xn$5N{_vl}i6Sm>)DuWqLKJ0i0s4|(g)mHFOUN-W~N?Bch8_6;r+Pwx* z?&TP;8ZtvY)>o8Fv=x_HXja|}**SZ>EZ-2{eZ*$O&qYljhf=0V_(?+hhm7#V6@pRa z{)0164Zf5o6HV;z#oZ2MC;+GDoY|Fqi! zeERLpE$pAybZ+H-r}Mbtyx9@Tj}oxJj=9pp zC|+}a$thIpbm-t3zLL`^H?iNfYbhNYd*;c)k|?%lBQz}6R69F6o@XigwfySk=Fo1L zPVXBekXbP7vIe#VPq^FkG;hBxwIj;BQUq|K;`7i`Ta=9^6Lr`ae88J#y~<9-f{ZZ|whT zdA^x5oFT@*Etykcp^Z_-5I7tj4hA=n!Wk+MWrKnIK&1{4{Oag1RKD9Q=L1)=x5Ach4@$pjFp01r#-Vaf=Y!S@K{6fadOz{X8D7mNswg+m?ElYP=T_9&jCV#jc+Y!weu~^b4XEE zC?J50!5GFk#WLyy@9sXKHBfR&W<(UTTa^i!F-<@YX@L;~II97%z$BGZMO?|jOw(aF z7+g)o9`QLWkg>3j4o(mD4i5JY4$Bg1z3M{8dvPk7gL((%hE-pZdCNTY9e5WU6)R550 zVDOq0I7Wj3pO$r;Y+H0WA@Q8IwF^{J|NUS8Tb20l|N1{WI_fvfz?&Rp0|i493jCGa zp#`G5qN>Haq$fIBpsbKy&?5w9FhKw=AWq>ZMT5EUXIG#d^aM8&H(A9J6u7=Dhe!9J zKpzTm#h>EIv;f=j4mdhEJO{5J#qjwz;EK?ksK7Uuqg`;Brr<3v%D`L1H)tps4*vVU z{&x+H{`^_ZHP*20{{QSGtYwa+P+53$dV6JmXAlV7E3L3|@@KC>F~_-Iq63X*qw#WKN4I zfLVqYh%!ja@DF25Spo9-D8+GlKPcxRDEq5;0R${ZF_$EOgD5$KJHzGtv zj;DM{02u;JG-@u7;5bn^Ck4QPNdL))SGQ`jn%(jaqN*j}=w-q;2^3B!%%=nCkKV%*JIustsOn{Qp+q)?<;1l($EXGG>GSvGw$@Bw~554i2DnO#T1YH6}u}sIhzae z(|F1`7#whI8d0GKD1IU}36oa4BEbM0k8z3xFF;v=Ia?Rw4d=y_Q2bAn3@BnKO%atJ z%H}8LC~o27lM&j7i3F9M8#|rT1EkusXw+rf8=mAm;*_ew+mb2{Z(9Y66O4#A)f{hBFi9 zpoA#`mM9gplKl5_&B=AdDHD@SvL7a_bz{Q0gqo)VllCGGg}q8(A;y+Zlu>`UBGx2t{n5MwEs5F_#ersB(b|t|3Sc zvwI~Z#2uk~Q`%9Gk_iE1T(NYn%b07Dfo-ksOH$n%dk)wF3^K0KQpEUtQamP6I$VkL z4)4Sp@b0fKz>9x-_u}^7_T|U2y&S>gD&(uU~%$wtu{S_t!VyzXLC?UtPbuxMOmW`qmdhBWs_D7QKq>w@(#e2*C ze3|{5`DW$WosHSlk49g;F!s)aNf3V@@Np1_h&Y}_+~adEii6SB#Eba+Dw@wO{Q(bW zp%aATCz|3`5y8G-PJ$TKh-JD{Ke)`RQk^I8`Gpd!@ChxdEvd ziCPtxs8m62Mya+l{VJmxFzsjJIVN z)KS7i#*SPbOU+CkaqKp!0cBmxC;XdM^2hE6vXkW_&qV{3(f;I{VS%;0Dyp@n$q-G3 zw1_5T8`>7E2V816f^B;ov;ss~E9_dkFm3mYqTA?2BFJUC1{;}4nh9IpRH9IVy@a<- zU_|T5?D8H%wS(F+)V@e6WK`ZagoON5=;MH6nia@!euw-(9JXL(7f-2Mxinhdu1L{F z5+it4+)31%Wlx$4kfACrthujR*gfvoC0wFLG_1Idc7MiUIk-OLSy@A+U!2Fi@ci^E zlqJrc%h*YO#dV2=%h*Skhmy9Iaw+;IOPdmXR3IMR_i*UjNw1y%M!xrD>bphym;d8W zzyCWr{j~o5=V*8T-hWiC^LFj7(Ex{Cd) zQ@qS>rsA#-V6)pEB^5O5vSOaCk%%1l2&zV%0>c_2RBKiJ6`jE4JSZEemLkCx*~;0E zlpmzpWn~Jh1!HF%u@n(-&iJBVi%z~3{25)ypkBp8{SK=HAg%f73EdYYl7{?L@(7yS hN`Gm(SiT~ literal 0 HcmV?d00001 diff --git a/enterprise/prometheus/13.0.24/ix_values.yaml b/enterprise/prometheus/13.0.24/ix_values.yaml new file mode 100644 index 00000000000..764469a3119 --- /dev/null +++ b/enterprise/prometheus/13.0.24/ix_values.yaml @@ -0,0 +1,1343 @@ +image: + repository: bitnami/prometheus + tag: 2.48.0@sha256:43de9da8d70cff6b862daedd3afd323465bee5ab87ef2f67a1811bf15a39019a +thanosImage: + repository: quay.io/thanos/thanos + tag: v0.32.5@sha256:3e5c47dd3a0bfc6c595036c1c49c7ca95979a89c1fb93ee4cdee3bf5d296f944 +alertmanagerImage: + repository: bitnami/alertmanager + tag: 0.26.0@sha256:ec6a6b36356594e486f9cb0461c830123c6c4ca016ae0cdcffcbaaf8e8adb703 +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 +updated: true diff --git a/enterprise/prometheus/13.0.24/questions.yaml b/enterprise/prometheus/13.0.24/questions.yaml new file mode 100644 index 00000000000..b3169896b66 --- /dev/null +++ b/enterprise/prometheus/13.0.24/questions.yaml @@ -0,0 +1,1667 @@ +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: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + 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: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: "disabled" + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + - 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: [{path: "/", pathType: "Prefix"}] + 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: integration + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description + description: defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", 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: integration + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description + description: defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + - 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.24/templates/NOTES.txt b/enterprise/prometheus/13.0.24/templates/NOTES.txt new file mode 100644 index 00000000000..efcb74cb772 --- /dev/null +++ b/enterprise/prometheus/13.0.24/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/enterprise/prometheus/13.0.24/templates/_helpers.tpl b/enterprise/prometheus/13.0.24/templates/_helpers.tpl new file mode 100644 index 00000000000..1f44049ac4c --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/alertmanager/_alertmanager.tpl b/enterprise/prometheus/13.0.24/templates/alertmanager/_alertmanager.tpl new file mode 100644 index 00000000000..ed5e24e9da6 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/alertmanager/secrets.yaml b/enterprise/prometheus/13.0.24/templates/alertmanager/secrets.yaml new file mode 100644 index 00000000000..9a6f518f35c --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/alertmanager/serviceaccount.yaml b/enterprise/prometheus/13.0.24/templates/alertmanager/serviceaccount.yaml new file mode 100644 index 00000000000..a6f438889a2 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/alertmanager/servicemonitor.yaml b/enterprise/prometheus/13.0.24/templates/alertmanager/servicemonitor.yaml new file mode 100644 index 00000000000..ef0e02d3875 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/common.yaml b/enterprise/prometheus/13.0.24/templates/common.yaml new file mode 100644 index 00000000000..61364503a70 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/core-dns/service.yaml b/enterprise/prometheus/13.0.24/templates/exporters/core-dns/service.yaml new file mode 100644 index 00000000000..359c945de46 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/core-dns/servicemonitor.yaml b/enterprise/prometheus/13.0.24/templates/exporters/core-dns/servicemonitor.yaml new file mode 100644 index 00000000000..8906b87f8e1 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/kube-apiserver/servicemonitor.yaml b/enterprise/prometheus/13.0.24/templates/exporters/kube-apiserver/servicemonitor.yaml new file mode 100644 index 00000000000..7cfbb53f379 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/kube-controller-manager/endpoints.yaml b/enterprise/prometheus/13.0.24/templates/exporters/kube-controller-manager/endpoints.yaml new file mode 100644 index 00000000000..13aa60ebf66 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/kube-controller-manager/service.yaml b/enterprise/prometheus/13.0.24/templates/exporters/kube-controller-manager/service.yaml new file mode 100644 index 00000000000..6a455359832 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/kube-controller-manager/servicemonitor.yaml b/enterprise/prometheus/13.0.24/templates/exporters/kube-controller-manager/servicemonitor.yaml new file mode 100644 index 00000000000..d3f56c49914 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/kube-scheduler/endpoints.yaml b/enterprise/prometheus/13.0.24/templates/exporters/kube-scheduler/endpoints.yaml new file mode 100644 index 00000000000..dde3d8b9110 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/kube-scheduler/service.yaml b/enterprise/prometheus/13.0.24/templates/exporters/kube-scheduler/service.yaml new file mode 100644 index 00000000000..aad5969f5fd --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/kube-scheduler/servicemonitor.yaml b/enterprise/prometheus/13.0.24/templates/exporters/kube-scheduler/servicemonitor.yaml new file mode 100644 index 00000000000..7cbe29f86d7 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/exporters/kubelet/servicemonitor.yaml b/enterprise/prometheus/13.0.24/templates/exporters/kubelet/servicemonitor.yaml new file mode 100644 index 00000000000..b109d78c453 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/prometheus/_additionalPrometheusRules.tpl b/enterprise/prometheus/13.0.24/templates/prometheus/_additionalPrometheusRules.tpl new file mode 100644 index 00000000000..121048d87ce --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/prometheus/_additionalScrapeJobs.tpl b/enterprise/prometheus/13.0.24/templates/prometheus/_additionalScrapeJobs.tpl new file mode 100644 index 00000000000..3c5f85140a4 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/prometheus/_prometheus.tpl b/enterprise/prometheus/13.0.24/templates/prometheus/_prometheus.tpl new file mode 100644 index 00000000000..e4c20bc6eb1 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/prometheus/_servicemonitor.tpl b/enterprise/prometheus/13.0.24/templates/prometheus/_servicemonitor.tpl new file mode 100644 index 00000000000..20744f2c924 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/prometheus/clusterrole.yaml b/enterprise/prometheus/13.0.24/templates/prometheus/clusterrole.yaml new file mode 100644 index 00000000000..ae96e2d45f8 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/prometheus/clusterrolebinding.yaml b/enterprise/prometheus/13.0.24/templates/prometheus/clusterrolebinding.yaml new file mode 100644 index 00000000000..7ca10743f4a --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/templates/prometheus/serviceaccount.yaml b/enterprise/prometheus/13.0.24/templates/prometheus/serviceaccount.yaml new file mode 100644 index 00000000000..39539fc1191 --- /dev/null +++ b/enterprise/prometheus/13.0.24/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.24/values.yaml b/enterprise/prometheus/13.0.24/values.yaml new file mode 100644 index 00000000000..e69de29bb2d

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 literal 0 HcmV?d00001 diff --git a/enterprise/prometheus/13.0.24/charts/node-exporter-3.0.40.tgz b/enterprise/prometheus/13.0.24/charts/node-exporter-3.0.40.tgz new file mode 100644 index 0000000000000000000000000000000000000000..42da9d9226676d173f08df7ac8e2ca3bd13a0df3 GIT binary patch literal 77643 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