From 04e7ef2f82eb1bc0e4271485d0314dff1e988b7d Mon Sep 17 00:00:00 2001 From: Mukul Sharma Date: Sun, 6 Sep 2026 08:38:34 +0530 Subject: [PATCH] Replace Prometheus with VictoriaMetrics (victoria-metrics-single + vmagent) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lower RAM/disk for the same metric volume on an 8GB single node — VM's own compression is the entire reason it exists as a project. Speaks Prometheus's own query API (/api/v1/query), so nothing downstream needed to change beyond the URL it points at: same PromQL, same kubernetes-nodes-cadvisor-sourced container_cpu_usage_seconds_total / container_memory_working_set_bytes toolshed's metrics work (docs/PRODUCT-ARCHITECTURE.md step 5) already targets. Three releases, matching the one-release-per-component convention already used everywhere in this repo, since victoria-metrics-single has no bundled scraper/exporter subcharts the way the Prometheus chart did: - victoria-metrics-single: the TSDB + query engine. 3Gi/local-path, 7-day retention, resources capped at 512Mi — same trim reasoning as the Prometheus server it replaces. - vmagent: the scraper. Its default scrape_configs already includes kubernetes-nodes-cadvisor and kubernetes-service-endpoints (the chart's own comment says "COPY from Prometheus helm chart") — nothing to override there, only remoteWrite pointed at victoria-metrics-single and trimmed resources. - node-exporter: pulled out of the removed Prometheus chart's bundled subchart into its own standalone release, since victoria-metrics-single has no equivalent. Same trim as before (32Mi/64Mi), same prometheus.io/scrape annotation vmagent's default scrape config already looks for. Found and fixed while vendoring: helm-templates/victoria-metrics-single already existed in this repo — a leftover GKE-targeted vendored copy from the original Meesho monorepo import (commit b8575bb), with its own templates/values.yaml for a different chart entirely. `mkdir -p` on an already-existing directory silently did nothing, so the first vendoring attempt left that old tree sitting alongside the new one and rendered two ServiceAccounts/Services/StatefulSets with colliding names. Removed outright rather than adapted, same reasoning as the ~35 charts devops-helm-charts removed in its own prune — see this chart's own Chart.yaml for the full note. Verified with `helm template` against the real charts and these values for all three releases individually, and again for the whole generic-argo-apps-chart appSpec list (11 Applications render, including the three new ones and nothing orphaned from the old prometheus entry). Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Wajog7nELA3i8JWTjxYGHF --- .../node-exporter/custom-values.yaml | 16 + .../prometheus/custom-values.yaml | 66 -- .../custom-values.yaml | 24 + .../vmagent/custom-values.yaml | 28 + helm-templates/node-exporter/Chart.lock | 6 + helm-templates/node-exporter/Chart.yaml | 13 + .../prometheus-node-exporter-4.56.3.tgz | Bin 0 -> 15619 bytes helm-templates/prometheus/Chart.lock | 6 - helm-templates/prometheus/Chart.yaml | 10 - .../prometheus/charts/prometheus-29.27.1.tgz | Bin 88965 -> 0 bytes .../victoria-metrics-single/.helmignore | 22 - .../victoria-metrics-single/Chart.lock | 6 + .../victoria-metrics-single/Chart.yaml | 49 +- .../victoria-metrics-single/README.md | 244 ------ .../charts/victoria-metrics-single-0.45.0.tgz | Bin 0 -> 21835 bytes .../templates/NOTES.txt | 51 -- .../templates/_helpers.tpl | 260 ------- .../templates/clusterrole.yaml | 50 -- .../templates/clusterrolebinding.yaml | 23 - .../templates/extra-objects.yaml | 4 - .../templates/pdb.yaml | 26 - .../templates/podsecuritypolicy.yaml | 42 -- .../templates/role.yaml | 23 - .../templates/rolebinding.yaml | 26 - .../templates/scrape-configmap.yaml | 17 - .../templates/server-deployment.yaml | 257 ------- .../templates/server-ingress.yaml | 50 -- .../templates/server-pvc.yaml | 33 - .../templates/server-service-headless.yaml | 72 -- .../templates/server-service-monitor.yaml | 48 -- .../templates/server-service.yaml | 91 --- .../templates/server-statefulset.yaml | 289 ------- .../templates/serviceaccount.yaml | 16 - .../victoria-metrics-single/values.yaml | 710 ------------------ helm-templates/vmagent/Chart.lock | 6 + helm-templates/vmagent/Chart.yaml | 7 + .../charts/victoria-metrics-agent-0.46.0.tgz | Bin 0 -> 20975 bytes 37 files changed, 126 insertions(+), 2465 deletions(-) create mode 100644 helm-overrides/k8s-admin-prd-ase1/node-exporter/custom-values.yaml delete mode 100644 helm-overrides/k8s-admin-prd-ase1/prometheus/custom-values.yaml create mode 100644 helm-overrides/k8s-admin-prd-ase1/victoria-metrics-single/custom-values.yaml create mode 100644 helm-overrides/k8s-admin-prd-ase1/vmagent/custom-values.yaml create mode 100644 helm-templates/node-exporter/Chart.lock create mode 100644 helm-templates/node-exporter/Chart.yaml create mode 100644 helm-templates/node-exporter/charts/prometheus-node-exporter-4.56.3.tgz delete mode 100644 helm-templates/prometheus/Chart.lock delete mode 100644 helm-templates/prometheus/Chart.yaml delete mode 100644 helm-templates/prometheus/charts/prometheus-29.27.1.tgz delete mode 100644 helm-templates/victoria-metrics-single/.helmignore create mode 100644 helm-templates/victoria-metrics-single/Chart.lock delete mode 100644 helm-templates/victoria-metrics-single/README.md create mode 100644 helm-templates/victoria-metrics-single/charts/victoria-metrics-single-0.45.0.tgz delete mode 100644 helm-templates/victoria-metrics-single/templates/NOTES.txt delete mode 100644 helm-templates/victoria-metrics-single/templates/_helpers.tpl delete mode 100644 helm-templates/victoria-metrics-single/templates/clusterrole.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/clusterrolebinding.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/extra-objects.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/pdb.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/podsecuritypolicy.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/role.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/rolebinding.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/scrape-configmap.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/server-deployment.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/server-ingress.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/server-pvc.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/server-service-headless.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/server-service-monitor.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/server-service.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/server-statefulset.yaml delete mode 100644 helm-templates/victoria-metrics-single/templates/serviceaccount.yaml delete mode 100644 helm-templates/victoria-metrics-single/values.yaml create mode 100644 helm-templates/vmagent/Chart.lock create mode 100644 helm-templates/vmagent/Chart.yaml create mode 100644 helm-templates/vmagent/charts/victoria-metrics-agent-0.46.0.tgz diff --git a/helm-overrides/k8s-admin-prd-ase1/node-exporter/custom-values.yaml b/helm-overrides/k8s-admin-prd-ase1/node-exporter/custom-values.yaml new file mode 100644 index 0000000..317966a --- /dev/null +++ b/helm-overrides/k8s-admin-prd-ase1/node-exporter/custom-values.yaml @@ -0,0 +1,16 @@ +prometheus-node-exporter: + # Same resource trim this ran with as a subchart of the (now removed) + # prometheus server chart. One DaemonSet pod, hostNetwork, light enough + # that this is the whole footprint regardless of which TSDB scrapes it. + resources: + requests: + cpu: 20m + memory: 32Mi + limits: + memory: 64Mi + + # rbac.pspEnabled defaults false already (no PodSecurityPolicy on this + # cluster) — nothing to override here. The chart's own Service carries + # `prometheus.io/scrape: true` by default, which is what vmagent's + # already-enabled kubernetes-service-endpoints job picks up — no + # separate scrape config needed on either side. diff --git a/helm-overrides/k8s-admin-prd-ase1/prometheus/custom-values.yaml b/helm-overrides/k8s-admin-prd-ase1/prometheus/custom-values.yaml deleted file mode 100644 index 9d06397..0000000 --- a/helm-overrides/k8s-admin-prd-ase1/prometheus/custom-values.yaml +++ /dev/null @@ -1,66 +0,0 @@ -prometheus: - # alertmanager/kube-state-metrics/node-exporter/pushgateway are all - # enabled by default in this chart. None of the four are needed for - # what actually consumes this deployment — toolshed's per-app CPU/memory - # come straight from kubelet's own cAdvisor endpoint (the - # kubernetes-nodes-cadvisor scrape job below, built into the server - # itself) — but node-exporter earns its keep separately: this box is an - # 8GB single node already near its ceiling, and node-exporter is the one - # thing here that would actually say so (host disk/memory/load, not - # per-container usage cAdvisor already covers). One DaemonSet pod on one - # node, hostNetwork rather than a Service — light enough to justify on - # its own. - # - # alertmanager/kube-state-metrics/pushgateway stay off: nothing here - # defines alerting rules to route (alertmanager), nothing needs - # deployment/rollout-status metrics yet as opposed to raw resource usage - # (kube-state-metrics), and nothing is a short-lived batch job pushing - # its own metrics (pushgateway). Each is a real pod this node has no - # spare room for — turn one on when something concrete needs it, not - # preemptively. - alertmanager: - enabled: false - kube-state-metrics: - enabled: false - prometheus-node-exporter: - enabled: true - resources: - requests: - cpu: 20m - memory: 32Mi - limits: - memory: 64Mi - prometheus-pushgateway: - enabled: false - - server: - persistentVolume: - # local-path-provisioner, this cluster's default StorageClass — - # installed right after Cilium precisely because kubeadm ships no - # default (unlike k3s). 3Gi rather than the chart's 8Gi default: - # `retention: 7d` below on one small cluster's worth of series - # comfortably fits, and the node has no room to spare. Not - # resizable in place with this provisioner, so sized deliberately - # rather than grown later. - size: 3Gi - storageClass: local-path - - # 7 days, not the chart's 15-day default — a homelab whose entire - # purpose is proving a CI/CD pipeline has no use for a month of - # historical series, and every extra day is disk this node does not - # have spare. - retention: 7d - - resources: - requests: - cpu: 50m - memory: 128Mi - limits: - memory: 512Mi - - # The default kubernetes-nodes-cadvisor job (scheme https, bearer token - # from the pod's own ServiceAccount, metrics_path /metrics/cadvisor) is - # left exactly as the chart ships it — this is what - # container_cpu_usage_seconds_total and container_memory_working_set_bytes - # come from, and toolshed's metrics connection (internal/metrics) - # queries exactly those two, summed by namespace. diff --git a/helm-overrides/k8s-admin-prd-ase1/victoria-metrics-single/custom-values.yaml b/helm-overrides/k8s-admin-prd-ase1/victoria-metrics-single/custom-values.yaml new file mode 100644 index 0000000..51cf699 --- /dev/null +++ b/helm-overrides/k8s-admin-prd-ase1/victoria-metrics-single/custom-values.yaml @@ -0,0 +1,24 @@ +victoria-metrics-single: + server: + # 7 days, not the chart's month-long default — a homelab whose entire + # purpose is proving a CI/CD pipeline has no use for that much + # history, and every extra day is disk this node does not have spare. + retentionPeriod: "7d" + + persistentVolume: + # local-path-provisioner, this cluster's default StorageClass — + # installed right after Cilium precisely because kubeadm ships no + # default (unlike k3s). 3Gi, not the chart's 16Gi default: VM's own + # compression is the whole reason it replaced Prometheus here, and + # this cluster's metric volume at a 7-day retention comfortably + # fits well inside that. Not resizable in place with this + # provisioner, so sized deliberately rather than grown later. + storageClassName: local-path + size: 3Gi + + resources: + requests: + cpu: 50m + memory: 128Mi + limits: + memory: 512Mi diff --git a/helm-overrides/k8s-admin-prd-ase1/vmagent/custom-values.yaml b/helm-overrides/k8s-admin-prd-ase1/vmagent/custom-values.yaml new file mode 100644 index 0000000..7c89d79 --- /dev/null +++ b/helm-overrides/k8s-admin-prd-ase1/vmagent/custom-values.yaml @@ -0,0 +1,28 @@ +victoria-metrics-agent: + # Ships to victoria-metrics-single. The write path is /api/v1/write, + # the same endpoint any Prometheus remote_write client uses — this is + # the one config line that actually wires the two components together; + # the chart names don't imply it on their own. + # + # Cluster-internal Service DNS: this call happens from a pod, so + # CoreDNS resolves it. Same reasoning as everywhere else in this + # project that a Service name (not an Ingress hostname) is correct + # here — see claude.md's registry-hostname convention for the one case + # where cluster DNS specifically does NOT work (a node-level pull), + # which does not apply to this pod-to-pod write. + remoteWrite: + - url: http://victoria-metrics-single-server.monitoring.svc.cluster.local:8428/api/v1/write + + # config.scrape_configs is left at the chart's own default — it already + # includes kubernetes-nodes-cadvisor (kubelet's cAdvisor endpoint, + # comment literally says "COPY from Prometheus helm chart") and + # kubernetes-service-endpoints (the prometheus.io/scrape annotation + # convention node-exporter's Service carries). Nothing here needs a + # scrape target the chart doesn't already define out of the box. + + resources: + requests: + cpu: 25m + memory: 64Mi + limits: + memory: 192Mi diff --git a/helm-templates/node-exporter/Chart.lock b/helm-templates/node-exporter/Chart.lock new file mode 100644 index 0000000..cc99f4b --- /dev/null +++ b/helm-templates/node-exporter/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: prometheus-node-exporter + repository: https://prometheus-community.github.io/helm-charts + version: 4.56.3 +digest: sha256:d82c5d706aab138aaf362814f8bc6f49baf3b8d7b1df751f152902a6940258fd +generated: "2026-09-06T08:31:01.815023+05:30" diff --git a/helm-templates/node-exporter/Chart.yaml b/helm-templates/node-exporter/Chart.yaml new file mode 100644 index 0000000..76d9e28 --- /dev/null +++ b/helm-templates/node-exporter/Chart.yaml @@ -0,0 +1,13 @@ +apiVersion: v2 +name: node-exporter +version: 1.0.0 +dependencies: + - name: prometheus-node-exporter + # Same official chart this ran as a subchart of the (now removed) + # prometheus server chart — vendored standalone here since it exposes + # host metrics over HTTP for any scraper to pull, independent of + # which TSDB stores them. vmagent scrapes it via the + # prometheus.io/scrape annotation this chart's Service carries, + # exactly as the Prometheus server used to. + version: 4.56.3 + repository: https://prometheus-community.github.io/helm-charts diff --git a/helm-templates/node-exporter/charts/prometheus-node-exporter-4.56.3.tgz b/helm-templates/node-exporter/charts/prometheus-node-exporter-4.56.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..04442dacd88402ca01289c990c98ae07b33135d0 GIT binary patch literal 15619 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 literal 0 HcmV?d00001 diff --git a/helm-templates/prometheus/Chart.lock b/helm-templates/prometheus/Chart.lock deleted file mode 100644 index e19a075..0000000 --- a/helm-templates/prometheus/Chart.lock +++ /dev/null @@ -1,6 +0,0 @@ -dependencies: -- name: prometheus - repository: https://prometheus-community.github.io/helm-charts - version: 29.27.1 -digest: sha256:1cd0daed07160b46100e5cccade430dadcd2f9a3974bd3667a09787c603a6ad0 -generated: "2026-09-06T07:25:57.847789+05:30" diff --git a/helm-templates/prometheus/Chart.yaml b/helm-templates/prometheus/Chart.yaml deleted file mode 100644 index acee77a..0000000 --- a/helm-templates/prometheus/Chart.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v2 -name: prometheus -version: 1.0.0 -dependencies: - - name: prometheus - # Pinned to the latest stable at the time this was vendored (2026-09). - # Bump deliberately later, with a changelog read first, same as any - # other chart bump in this repo. - version: 29.27.1 - repository: https://prometheus-community.github.io/helm-charts diff --git a/helm-templates/prometheus/charts/prometheus-29.27.1.tgz b/helm-templates/prometheus/charts/prometheus-29.27.1.tgz deleted file mode 100644 index 16597624995bd6243083735787933e4023e48b51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88965 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 O0RR81w`6Gm{09IrL(4$` diff --git a/helm-templates/victoria-metrics-single/.helmignore b/helm-templates/victoria-metrics-single/.helmignore deleted file mode 100644 index 50af031..0000000 --- a/helm-templates/victoria-metrics-single/.helmignore +++ /dev/null @@ -1,22 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/helm-templates/victoria-metrics-single/Chart.lock b/helm-templates/victoria-metrics-single/Chart.lock new file mode 100644 index 0000000..51049c7 --- /dev/null +++ b/helm-templates/victoria-metrics-single/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: victoria-metrics-single + repository: https://victoriametrics.github.io/helm-charts + version: 0.45.0 +digest: sha256:5c84351c76bb8a825b95a11a90cf86f8cd2f2b4565135b1241b35dfa9b4e392e +generated: "2026-09-06T08:34:56.682089+05:30" diff --git a/helm-templates/victoria-metrics-single/Chart.yaml b/helm-templates/victoria-metrics-single/Chart.yaml index 8788843..a0f2956 100644 --- a/helm-templates/victoria-metrics-single/Chart.yaml +++ b/helm-templates/victoria-metrics-single/Chart.yaml @@ -1,30 +1,21 @@ -apiVersion: v1 -appVersion: v1.101.0 -description: Victoria Metrics Single version - high-performance, cost-effective and scalable TSDB, long-term remote storage for Prometheus +apiVersion: v2 name: victoria-metrics-single -version: 0.9.24 -appVersion: v1.101.0 -sources: - - https://github.com/VictoriaMetrics/helm-charts -kubeVersion: ">=1.23.0-0" -keywords: - - victoriametrics - - vmsingle - - single - - monitoring - - kubernetes - - observability - - tsdb - - metrics - - metricsql - - timeseries -annotations: - artifacthub.io/license: Apache-2.0 - artifacthub.io/category: "monitoring-logging" - artifacthub.io/links: | - - name: Sources - url: https://github.com/VictoriaMetrics/helm-charts - - name: Charts repo - url: https://victoriametrics.github.io/helm-charts/ - - name: Docs - url: https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html +version: 1.0.0 +dependencies: + - name: victoria-metrics-single + # Pinned to the latest stable at the time this was vendored (2026-09). + # Bump deliberately later, with a changelog read first, same as any + # other chart bump in this repo. + # + # This directory already existed in this repo before this — a + # leftover from the original Meesho monorepo import (commit b8575bb), + # with its own vendored templates/values.yaml for a different, + # GKE-targeted deployment of this same chart. That entire tree was + # removed rather than adapted (same reasoning as the ~35 charts + # removed outright in devops-helm-charts's own prune — see claude.md) + # and replaced with this thin wrapper, matching every other + # official-chart component in this repo (vault, postgresql's sibling + # entries, etc.): a Chart.yaml dependency plus a committed .tgz, no + # local templates of its own. + version: 0.45.0 + repository: https://victoriametrics.github.io/helm-charts diff --git a/helm-templates/victoria-metrics-single/README.md b/helm-templates/victoria-metrics-single/README.md deleted file mode 100644 index 058dbe4..0000000 --- a/helm-templates/victoria-metrics-single/README.md +++ /dev/null @@ -1,244 +0,0 @@ -# Victoria Metrics Helm Chart for Single Version - - ![Version: 0.9.23](https://img.shields.io/badge/Version-0.9.23-informational?style=flat-square) -[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/victoriametrics)](https://artifacthub.io/packages/helm/victoriametrics/victoria-metrics-single) - -Victoria Metrics Single version - high-performance, cost-effective and scalable TSDB, long-term remote storage for Prometheus - -## Prerequisites - -* Install the follow packages: ``git``, ``kubectl``, ``helm``, ``helm-docs``. See this [tutorial](../../REQUIREMENTS.md). -* PV support on underlying infrastructure. - -## Chart Details - -This chart will do the following: - -* Rollout Victoria Metrics Single. - -## How to install - -Access a Kubernetes cluster. - -Add a chart helm repository with follow commands: - -```console -helm repo add vm https://victoriametrics.github.io/helm-charts/ - -helm repo update -``` - -List versions of ``vm/victoria-metrics-single`` chart available to installation: - -```console -helm search repo vm/victoria-metrics-single -l -``` - -Export default values of ``victoria-metrics-single`` chart to file ``values.yaml``: - -```console -helm show values vm/victoria-metrics-single > values.yaml -``` - -Change the values according to the need of the environment in ``values.yaml`` file. - -Test the installation with command: - -```console -helm install vmsingle vm/victoria-metrics-single -f values.yaml -n NAMESPACE --debug --dry-run -``` - -Install chart with command: - -```console -helm install vmsingle vm/victoria-metrics-single -f values.yaml -n NAMESPACE -``` - -Get the pods lists by running this commands: - -```console -kubectl get pods -A | grep 'single' -``` - -Get the application by running this command: - -```console -helm list -f vmsingle -n NAMESPACE -``` - -See the history of versions of ``vmsingle`` application with command. - -```console -helm history vmsingle -n NAMESPACE -``` - -## How to uninstall - -Remove application with command. - -```console -helm uninstall vmsingle -n NAMESPACE -``` - -## Documentation of Helm Chart - -Install ``helm-docs`` following the instructions on this [tutorial](../../REQUIREMENTS.md). - -Generate docs with ``helm-docs`` command. - -```bash -cd charts/victoria-metrics-single - -helm-docs -``` - -The markdown generation is entirely go template driven. The tool parses metadata from charts and generates a number of sub-templates that can be referenced in a template file (by default ``README.md.gotmpl``). If no template file is provided, the tool has a default internal template that will generate a reasonably formatted README. - -## Parameters - -The following tables lists the configurable parameters of the chart and their default values. - -Change the values according to the need of the environment in ``victoria-metrics-single/values.yaml`` file. - -| Key | Type | Default | Description | -|-----|------|---------|-------------| -| automountServiceAccountToken | bool | `true` | | -| extraObjects | list | `[]` | Add extra specs dynamically to this chart | -| global.compatibility.openshift.adaptSecurityContext | string | `"auto"` | | -| license | object | `{"key":"","secret":{"key":"","name":""}}` | Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise.html, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0 | -| license.key | string | `""` | License key | -| license.secret | object | `{"key":"","name":""}` | Use existing secret with license key | -| license.secret.key | string | `""` | Key in secret with license key | -| license.secret.name | string | `""` | Existing secret name | -| podDisruptionBudget.enabled | bool | `false` | See `kubectl explain poddisruptionbudget.spec` for more. Ref: [https://kubernetes.io/docs/tasks/run-application/configure-pdb/](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) | -| podDisruptionBudget.extraLabels | object | `{}` | | -| printNotes | bool | `true` | Print chart notes | -| rbac.create | bool | `true` | | -| rbac.extraLabels | object | `{}` | | -| rbac.namespaced | bool | `false` | | -| rbac.pspEnabled | bool | `true` | | -| server.affinity | object | `{}` | Pod affinity | -| server.containerWorkingDir | string | `""` | Container workdir | -| server.enabled | bool | `true` | Enable deployment of server component. Deployed as StatefulSet | -| server.env | list | `[]` | Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables | -| server.envFrom | list | `[]` | | -| server.extraArgs."envflag.enable" | string | `"true"` | | -| server.extraArgs."envflag.prefix" | string | `"VM_"` | | -| server.extraArgs.loggerFormat | string | `"json"` | | -| server.extraContainers | list | `[]` | | -| server.extraHostPathMounts | list | `[]` | | -| server.extraLabels | object | `{}` | Sts/Deploy additional labels | -| server.extraVolumeMounts | list | `[]` | | -| server.extraVolumes | list | `[]` | | -| server.fullnameOverride | string | `nil` | Overrides the full name of server component | -| server.image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | -| server.image.repository | string | `"victoriametrics/victoria-metrics"` | Image repository | -| server.image.tag | string | `""` | Image tag | -| server.image.variant | string | `""` | | -| server.ingress.annotations | object | `{}` | Ingress annotations | -| server.ingress.enabled | bool | `false` | Enable deployment of ingress for server component | -| server.ingress.extraLabels | object | `{}` | Ingress extra labels | -| server.ingress.hosts | list | `[]` | Array of host objects | -| server.ingress.pathType | string | `"Prefix"` | pathType is only for k8s >= 1.1= | -| server.ingress.tls | list | `[]` | Array of TLS objects | -| server.initContainers | list | `[]` | | -| server.livenessProbe.failureThreshold | int | `10` | | -| server.livenessProbe.httpGet.path | string | `"/health"` | | -| server.livenessProbe.httpGet.port | int | `8428` | | -| server.livenessProbe.httpGet.scheme | string | `"HTTP"` | | -| server.livenessProbe.initialDelaySeconds | int | `30` | | -| server.livenessProbe.periodSeconds | int | `30` | | -| server.livenessProbe.timeoutSeconds | int | `5` | | -| server.name | string | `"server"` | Server container name | -| server.nodeSelector | object | `{}` | Pod's node selector. Ref: [https://kubernetes.io/docs/user-guide/node-selection/](https://kubernetes.io/docs/user-guide/node-selection/) | -| server.persistentVolume.accessModes | list | `["ReadWriteOnce"]` | Array of access modes. Must match those of existing PV or dynamic provisioner. Ref: [http://kubernetes.io/docs/user-guide/persistent-volumes/](http://kubernetes.io/docs/user-guide/persistent-volumes/) | -| server.persistentVolume.annotations | object | `{}` | Persistant volume annotations | -| server.persistentVolume.enabled | bool | `true` | Create/use Persistent Volume Claim for server component. Empty dir if false | -| server.persistentVolume.existingClaim | string | `""` | Existing Claim name. If defined, PVC must be created manually before volume will be bound | -| server.persistentVolume.matchLabels | object | `{}` | Bind Persistent Volume by labels. Must match all labels of targeted PV. | -| server.persistentVolume.mountPath | string | `"/storage"` | Mount path. Server data Persistent Volume mount root path. | -| server.persistentVolume.size | string | `"16Gi"` | Size of the volume. Should be calculated based on the metrics you send and retention policy you set. | -| server.persistentVolume.storageClass | string | `""` | StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically | -| server.persistentVolume.subPath | string | `""` | Mount subpath | -| server.podAnnotations | object | `{}` | Pod's annotations | -| server.podLabels | object | `{}` | Pod's additional labels | -| server.podManagementPolicy | string | `"OrderedReady"` | Pod's management policy | -| server.podSecurityContext | object | `{"enabled":true}` | Pod's security context. Ref: [https://kubernetes.io/docs/tasks/configure-pod-container/security-context/](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) | -| server.priorityClassName | string | `""` | Name of Priority Class | -| server.readinessProbe.failureThreshold | int | `3` | | -| server.readinessProbe.httpGet.path | string | `"/health"` | | -| server.readinessProbe.httpGet.port | string | `"http"` | | -| server.readinessProbe.initialDelaySeconds | int | `5` | | -| server.readinessProbe.periodSeconds | int | `15` | | -| server.readinessProbe.timeoutSeconds | int | `5` | | -| server.resources | object | `{}` | Resource object. Ref: [http://kubernetes.io/docs/user-guide/compute-resources/](http://kubernetes.io/docs/user-guide/compute-resources/ | -| server.retentionPeriod | int | `1` | Data retention period in month | -| server.scrape | object | `{"config":{"global":{"scrape_interval":"15s"},"scrape_configs":[{"job_name":"victoriametrics","static_configs":[{"targets":["localhost:8428"]}]},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","job_name":"kubernetes-apiservers","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"keep","regex":"default;kubernetes;https","source_labels":["__meta_kubernetes_namespace","__meta_kubernetes_service_name","__meta_kubernetes_endpoint_port_name"]}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","job_name":"kubernetes-nodes","kubernetes_sd_configs":[{"role":"node"}],"relabel_configs":[{"action":"labelmap","regex":"__meta_kubernetes_node_label_(.+)"},{"replacement":"kubernetes.default.svc:443","target_label":"__address__"},{"regex":"(.+)","replacement":"/api/v1/nodes/$1/proxy/metrics","source_labels":["__meta_kubernetes_node_name"],"target_label":"__metrics_path__"}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","honor_timestamps":false,"job_name":"kubernetes-nodes-cadvisor","kubernetes_sd_configs":[{"role":"node"}],"relabel_configs":[{"action":"labelmap","regex":"__meta_kubernetes_node_label_(.+)"},{"replacement":"kubernetes.default.svc:443","target_label":"__address__"},{"regex":"(.+)","replacement":"/api/v1/nodes/$1/proxy/metrics/cadvisor","source_labels":["__meta_kubernetes_node_name"],"target_label":"__metrics_path__"}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"job_name":"kubernetes-service-endpoints","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"kubernetes_node"}]},{"job_name":"kubernetes-service-endpoints-slow","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape_slow"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"kubernetes_node"}],"scrape_interval":"5m","scrape_timeout":"30s"},{"job_name":"kubernetes-services","kubernetes_sd_configs":[{"role":"service"}],"metrics_path":"/probe","params":{"module":["http_2xx"]},"relabel_configs":[{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_probe"]},{"source_labels":["__address__"],"target_label":"__param_target"},{"replacement":"blackbox","target_label":"__address__"},{"source_labels":["__param_target"],"target_label":"instance"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"}]},{"job_name":"kubernetes-pods","kubernetes_sd_configs":[{"role":"pod"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_pod_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_pod_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_pod_name"],"target_label":"kubernetes_pod_name"}]}]},"configMap":"","enabled":false,"extraScrapeConfigs":[]}` | Scrape configuration for victoriametrics | -| server.scrape.config | object | `{"global":{"scrape_interval":"15s"},"scrape_configs":[{"job_name":"victoriametrics","static_configs":[{"targets":["localhost:8428"]}]},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","job_name":"kubernetes-apiservers","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"keep","regex":"default;kubernetes;https","source_labels":["__meta_kubernetes_namespace","__meta_kubernetes_service_name","__meta_kubernetes_endpoint_port_name"]}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","job_name":"kubernetes-nodes","kubernetes_sd_configs":[{"role":"node"}],"relabel_configs":[{"action":"labelmap","regex":"__meta_kubernetes_node_label_(.+)"},{"replacement":"kubernetes.default.svc:443","target_label":"__address__"},{"regex":"(.+)","replacement":"/api/v1/nodes/$1/proxy/metrics","source_labels":["__meta_kubernetes_node_name"],"target_label":"__metrics_path__"}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","honor_timestamps":false,"job_name":"kubernetes-nodes-cadvisor","kubernetes_sd_configs":[{"role":"node"}],"relabel_configs":[{"action":"labelmap","regex":"__meta_kubernetes_node_label_(.+)"},{"replacement":"kubernetes.default.svc:443","target_label":"__address__"},{"regex":"(.+)","replacement":"/api/v1/nodes/$1/proxy/metrics/cadvisor","source_labels":["__meta_kubernetes_node_name"],"target_label":"__metrics_path__"}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"job_name":"kubernetes-service-endpoints","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"kubernetes_node"}]},{"job_name":"kubernetes-service-endpoints-slow","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape_slow"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"kubernetes_node"}],"scrape_interval":"5m","scrape_timeout":"30s"},{"job_name":"kubernetes-services","kubernetes_sd_configs":[{"role":"service"}],"metrics_path":"/probe","params":{"module":["http_2xx"]},"relabel_configs":[{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_probe"]},{"source_labels":["__address__"],"target_label":"__param_target"},{"replacement":"blackbox","target_label":"__address__"},{"source_labels":["__param_target"],"target_label":"instance"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"}]},{"job_name":"kubernetes-pods","kubernetes_sd_configs":[{"role":"pod"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_pod_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_pod_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_pod_name"],"target_label":"kubernetes_pod_name"}]}]}` | Scrape config | -| server.scrape.config.scrape_configs | list | `[{"job_name":"victoriametrics","static_configs":[{"targets":["localhost:8428"]}]},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","job_name":"kubernetes-apiservers","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"keep","regex":"default;kubernetes;https","source_labels":["__meta_kubernetes_namespace","__meta_kubernetes_service_name","__meta_kubernetes_endpoint_port_name"]}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","job_name":"kubernetes-nodes","kubernetes_sd_configs":[{"role":"node"}],"relabel_configs":[{"action":"labelmap","regex":"__meta_kubernetes_node_label_(.+)"},{"replacement":"kubernetes.default.svc:443","target_label":"__address__"},{"regex":"(.+)","replacement":"/api/v1/nodes/$1/proxy/metrics","source_labels":["__meta_kubernetes_node_name"],"target_label":"__metrics_path__"}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"bearer_token_file":"/var/run/secrets/kubernetes.io/serviceaccount/token","honor_timestamps":false,"job_name":"kubernetes-nodes-cadvisor","kubernetes_sd_configs":[{"role":"node"}],"relabel_configs":[{"action":"labelmap","regex":"__meta_kubernetes_node_label_(.+)"},{"replacement":"kubernetes.default.svc:443","target_label":"__address__"},{"regex":"(.+)","replacement":"/api/v1/nodes/$1/proxy/metrics/cadvisor","source_labels":["__meta_kubernetes_node_name"],"target_label":"__metrics_path__"}],"scheme":"https","tls_config":{"ca_file":"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt","insecure_skip_verify":true}},{"job_name":"kubernetes-service-endpoints","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"kubernetes_node"}]},{"job_name":"kubernetes-service-endpoints-slow","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape_slow"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"kubernetes_node"}],"scrape_interval":"5m","scrape_timeout":"30s"},{"job_name":"kubernetes-services","kubernetes_sd_configs":[{"role":"service"}],"metrics_path":"/probe","params":{"module":["http_2xx"]},"relabel_configs":[{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_probe"]},{"source_labels":["__address__"],"target_label":"__param_target"},{"replacement":"blackbox","target_label":"__address__"},{"source_labels":["__param_target"],"target_label":"instance"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"}]},{"job_name":"kubernetes-pods","kubernetes_sd_configs":[{"role":"pod"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_pod_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_pod_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_pod_name"],"target_label":"kubernetes_pod_name"}]}]` | Scrape targets | -| server.scrape.config.scrape_configs[0] | object | `{"job_name":"victoriametrics","static_configs":[{"targets":["localhost:8428"]}]}` | Scrape rule for scrape victoriametrics | -| server.scrape.config.scrape_configs[4] | object | `{"job_name":"kubernetes-service-endpoints","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"kubernetes_node"}]}` | Scrape rule using kubernetes service discovery for endpoints | -| server.scrape.config.scrape_configs[5] | object | `{"job_name":"kubernetes-service-endpoints-slow","kubernetes_sd_configs":[{"role":"endpoints"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scrape_slow"]},{"action":"replace","regex":"(https?)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_scheme"],"target_label":"__scheme__"},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_service_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_service_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"},{"action":"replace","source_labels":["__meta_kubernetes_pod_node_name"],"target_label":"kubernetes_node"}],"scrape_interval":"5m","scrape_timeout":"30s"}` | Scrape config for slow service endpoints; same as above, but with a larger timeout and a larger interval The relabeling allows the actual service scrape endpoint to be configured via the following annotations: * `prometheus.io/scrape-slow`: Only scrape services that have a value of `true` * `prometheus.io/scheme`: If the metrics endpoint is secured then you will need to set this to `https` & most likely set the `tls_config` of the scrape config. * `prometheus.io/path`: If the metrics path is not `/metrics` override this. * `prometheus.io/port`: If the metrics are exposed on a different port to the service then set this appropriately. | -| server.scrape.config.scrape_configs[6] | object | `{"job_name":"kubernetes-services","kubernetes_sd_configs":[{"role":"service"}],"metrics_path":"/probe","params":{"module":["http_2xx"]},"relabel_configs":[{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_service_annotation_prometheus_io_probe"]},{"source_labels":["__address__"],"target_label":"__param_target"},{"replacement":"blackbox","target_label":"__address__"},{"source_labels":["__param_target"],"target_label":"instance"},{"action":"labelmap","regex":"__meta_kubernetes_service_label_(.+)"},{"source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"source_labels":["__meta_kubernetes_service_name"],"target_label":"kubernetes_name"}]}` | Example scrape config for probing services via the Blackbox Exporter. The relabeling allows the actual service scrape endpoint to be configured via the following annotations: * `prometheus.io/probe`: Only probe services that have a value of `true` | -| server.scrape.config.scrape_configs[7] | object | `{"job_name":"kubernetes-pods","kubernetes_sd_configs":[{"role":"pod"}],"relabel_configs":[{"action":"drop","regex":true,"source_labels":["__meta_kubernetes_pod_container_init"]},{"action":"keep_if_equal","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_port","__meta_kubernetes_pod_container_port_number"]},{"action":"keep","regex":true,"source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_scrape"]},{"action":"replace","regex":"(.+)","source_labels":["__meta_kubernetes_pod_annotation_prometheus_io_path"],"target_label":"__metrics_path__"},{"action":"replace","regex":"([^:]+)(?::\\d+)?;(\\d+)","replacement":"$1:$2","source_labels":["__address__","__meta_kubernetes_pod_annotation_prometheus_io_port"],"target_label":"__address__"},{"action":"labelmap","regex":"__meta_kubernetes_pod_label_(.+)"},{"action":"replace","source_labels":["__meta_kubernetes_namespace"],"target_label":"kubernetes_namespace"},{"action":"replace","source_labels":["__meta_kubernetes_pod_name"],"target_label":"kubernetes_pod_name"}]}` | Example scrape config for pods The relabeling allows the actual pod scrape endpoint to be configured via the following annotations: * `prometheus.io/scrape`: Only scrape pods that have a value of `true` * `prometheus.io/path`: If the metrics path is not `/metrics` override this. * `prometheus.io/port`: Scrape the pod on the indicated port instead of the default of `9102`. | -| server.scrape.configMap | string | `""` | Use existing configmap if specified otherwise .config values will be used | -| server.scrape.enabled | bool | `false` | If true scrapes targets, creates config map or use specified one with scrape targets | -| server.scrape.extraScrapeConfigs | list | `[]` | Extra scrape configs that will be appended to `server.scrape.config` | -| server.securityContext | object | `{"enabled":true}` | Security context to be added to server pods | -| server.service.annotations | object | `{}` | Service annotations | -| server.service.clusterIP | string | `""` | Service ClusterIP | -| server.service.externalIPs | list | `[]` | Service External IPs. Ref: [https://kubernetes.io/docs/user-guide/services/#external-ips]( https://kubernetes.io/docs/user-guide/services/#external-ips) | -| server.service.labels | object | `{}` | Service labels | -| server.service.loadBalancerIP | string | `""` | Service load balacner IP | -| server.service.loadBalancerSourceRanges | list | `[]` | Load balancer source range | -| server.service.servicePort | int | `8428` | Service port | -| server.service.type | string | `"ClusterIP"` | Service type | -| server.serviceMonitor.annotations | object | `{}` | Service Monitor annotations | -| server.serviceMonitor.enabled | bool | `false` | Enable deployment of Service Monitor for server component. This is Prometheus operator object | -| server.serviceMonitor.extraLabels | object | `{}` | Service Monitor labels | -| server.serviceMonitor.metricRelabelings | list | `[]` | Service Monitor metricRelabelings | -| server.serviceMonitor.relabelings | list | `[]` | Service Monitor relabelings | -| server.startupProbe | object | `{}` | | -| server.statefulSet.enabled | bool | `true` | Creates statefulset instead of deployment, useful when you want to keep the cache | -| server.statefulSet.podManagementPolicy | string | `"OrderedReady"` | Deploy order policy for StatefulSet pods | -| server.statefulSet.service.annotations | object | `{}` | Headless service annotations | -| server.statefulSet.service.labels | object | `{}` | Headless service labels | -| server.statefulSet.service.servicePort | int | `8428` | Headless service port | -| server.terminationGracePeriodSeconds | int | `60` | Pod's termination grace period in seconds | -| server.tolerations | list | `[]` | Node tolerations for server scheduling to nodes with taints. Ref: [https://kubernetes.io/docs/concepts/configuration/assign-pod-node/](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/) | -| server.vmbackupmanager.destination | string | `""` | backup destination at S3, GCS or local filesystem. Release name will be included to path! | -| server.vmbackupmanager.disableDaily | bool | `false` | disable daily backups | -| server.vmbackupmanager.disableHourly | bool | `false` | disable hourly backups | -| server.vmbackupmanager.disableMonthly | bool | `false` | disable monthly backups | -| server.vmbackupmanager.disableWeekly | bool | `false` | disable weekly backups | -| server.vmbackupmanager.enable | bool | `false` | enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages | -| server.vmbackupmanager.env | list | `[]` | Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables | -| server.vmbackupmanager.eula | bool | `false` | should be true and means that you have the legal right to run a backup manager that can either be a signed contract or an email with confirmation to run the service in a trial period # https://victoriametrics.com/legal/esa/ | -| server.vmbackupmanager.extraArgs."envflag.enable" | string | `"true"` | | -| server.vmbackupmanager.extraArgs."envflag.prefix" | string | `"VM_"` | | -| server.vmbackupmanager.extraArgs.loggerFormat | string | `"json"` | | -| server.vmbackupmanager.extraVolumeMounts | list | `[]` | | -| server.vmbackupmanager.image.repository | string | `"victoriametrics/vmbackupmanager"` | vmbackupmanager image repository | -| server.vmbackupmanager.image.tag | string | `"v1.101.0-enterprise"` | vmbackupmanager image tag | -| server.vmbackupmanager.image.variant | string | `""` | | -| server.vmbackupmanager.livenessProbe.failureThreshold | int | `10` | | -| server.vmbackupmanager.livenessProbe.initialDelaySeconds | int | `30` | | -| server.vmbackupmanager.livenessProbe.periodSeconds | int | `30` | | -| server.vmbackupmanager.livenessProbe.tcpSocket.port | string | `"manager-http"` | | -| server.vmbackupmanager.livenessProbe.timeoutSeconds | int | `5` | | -| server.vmbackupmanager.readinessProbe.failureThreshold | int | `3` | | -| server.vmbackupmanager.readinessProbe.httpGet.path | string | `"/health"` | | -| server.vmbackupmanager.readinessProbe.httpGet.port | string | `"manager-http"` | | -| server.vmbackupmanager.readinessProbe.initialDelaySeconds | int | `5` | | -| server.vmbackupmanager.readinessProbe.periodSeconds | int | `15` | | -| server.vmbackupmanager.readinessProbe.timeoutSeconds | int | `5` | | -| server.vmbackupmanager.resources | object | `{}` | | -| server.vmbackupmanager.restore | object | `{"onStart":{"enabled":false}}` | Allows to enable restore options for pod. Read more: https://docs.victoriametrics.com/vmbackupmanager.html#restore-commands | -| server.vmbackupmanager.retention | object | `{"keepLastDaily":2,"keepLastHourly":2,"keepLastMonthly":2,"keepLastWeekly":2}` | backups' retention settings | -| server.vmbackupmanager.retention.keepLastDaily | int | `2` | keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off | -| server.vmbackupmanager.retention.keepLastHourly | int | `2` | keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off | -| server.vmbackupmanager.retention.keepLastMonthly | int | `2` | keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off | -| server.vmbackupmanager.retention.keepLastWeekly | int | `2` | keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off | -| serviceAccount.automountToken | bool | `true` | Mount API token to pod directly | -| serviceAccount.create | bool | `true` | Create service account. | -| serviceAccount.extraLabels | object | `{}` | | \ No newline at end of file diff --git a/helm-templates/victoria-metrics-single/charts/victoria-metrics-single-0.45.0.tgz b/helm-templates/victoria-metrics-single/charts/victoria-metrics-single-0.45.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b329c3e81c319b5dae7ace5f820e86e8b8b6d10b GIT binary patch literal 21835 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/targets -{{- end }} - -Read Data: - The following url can be used as the datasource url in Grafana:: - http://{{ template "victoria-metrics.server.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.server.service.servicePort }} -{{- end }} -{{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/_helpers.tpl b/helm-templates/victoria-metrics-single/templates/_helpers.tpl deleted file mode 100644 index aab24f6..0000000 --- a/helm-templates/victoria-metrics-single/templates/_helpers.tpl +++ /dev/null @@ -1,260 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "victoria-metrics.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "victoria-metrics.fullname" -}} -{{- if .Values.fullnameOverride -}} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "victoria-metrics.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Create the name of the service account -*/}} -{{- define "victoria-metrics.serviceAccountName" -}} -{{- if .Values.serviceAccount.create -}} - {{ default (include "victoria-metrics.fullname" .) .Values.serviceAccount.name }} -{{- else -}} - {{ default "default" .Values.serviceAccount.name }} -{{- end -}} -{{- end -}} - -{{/* -Create unified labels for victoria-metrics components -*/}} -{{- define "victoria-metrics.common.matchLabels" -}} -app.kubernetes.io/name: {{ include "victoria-metrics.name" . }} -app.kubernetes.io/instance: {{ .Release.Name | trunc 63 | trimSuffix "-" }} -{{- end -}} - -{{- define "victoria-metrics.common.metaLabels" -}} -helm.sh/chart: {{ include "victoria-metrics.chart" . }} -app.kubernetes.io/managed-by: {{ .Release.Service | trunc 63 | trimSuffix "-" }} -{{- end -}} - -{{- define "victoria-metrics.server.labels" -}} -{{ include "victoria-metrics.server.matchLabels" . }} -{{ include "victoria-metrics.common.metaLabels" . }} -{{- end -}} - -{{- define "victoria-metrics.server.matchLabels" -}} -app: {{ .Values.server.name }} -{{ include "victoria-metrics.common.matchLabels" . }} -{{- end -}} - -{{/* -Create a fully qualified server name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -*/}} -{{- define "victoria-metrics.server.fullname" -}} -{{- if .Values.server.fullnameOverride -}} -{{- .Values.server.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- printf "%s-%s" .Release.Name .Values.server.name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s-%s" .Release.Name $name .Values.server.name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} - - -{{- define "split-host-port" -}} -{{- $hp := split ":" . -}} -{{- printf "%s" $hp._1 -}} -{{- end -}} - -{{/* -Defines the name of scrape configuration map -*/}} -{{- define "victoria-metrics.server.scrape.configname" -}} -{{- if .Values.server.scrape.configMap -}} -{{- .Values.server.scrape.configMap -}} -{{- else -}} -{{- include "victoria-metrics.server.fullname" . -}}-scrapeconfig -{{- end -}} -{{- end -}} - -{{/* -Return the appropriate apiVersion for ingress. -*/}} -{{- define "victoria-metrics.ingress.apiVersion" -}} - {{- if and (.Capabilities.APIVersions.Has "networking.k8s.io/v1") -}} - {{- print "networking.k8s.io/v1" -}} - {{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}} - {{- print "networking.k8s.io/v1beta1" -}} - {{- else -}} - {{- print "extensions/v1beta1" -}} - {{- end -}} -{{- end -}} - -{{/* -Return if ingress is stable. -*/}} -{{- define "victoria-metrics.ingress.isStable" -}} - {{- eq (include "victoria-metrics.ingress.apiVersion" .) "networking.k8s.io/v1" -}} -{{- end -}} - -{{/* -Return if ingress supports ingressClassName. -*/}} -{{- define "victoria-metrics.ingress.supportsIngressClassName" -}} - {{- or (eq (include "victoria-metrics.ingress.isStable" .) "true") (and (eq (include "victoria-metrics.ingress.apiVersion" .) "networking.k8s.io/v1beta1")) -}} -{{- end -}} - -{{/* -Return if ingress supports pathType. -*/}} -{{- define "victoria-metrics.ingress.supportsPathType" -}} - {{- or (eq (include "victoria-metrics.ingress.isStable" .) "true") (and (eq (include "victoria-metrics.ingress.apiVersion" .) "networking.k8s.io/v1beta1")) -}} -{{- end -}} - -{{- define "victoria-metrics.hasInitContainer" -}} - {{- or (gt (len .Values.server.initContainers) 0) .Values.server.vmbackupmanager.restore.onStart.enabled -}} -{{- end -}} - -{{- define "victoria-metrics.initContiners" -}} -{{- if eq (include "victoria-metrics.hasInitContainer" . ) "true" -}} -{{- with .Values.server.initContainers -}} -{{ toYaml . }} -{{- end -}} -{{- if .Values.server.vmbackupmanager.restore.onStart.enabled }} -- name: {{ template "victoria-metrics.name" . }}-vmbackupmanager-restore - image: "{{ .Values.server.vmbackupmanager.image.repository }}:{{ .Values.server.vmbackupmanager.image.tag }}" - imagePullPolicy: "{{ .Values.server.image.pullPolicy }}" - args: - - restore - - {{ printf "%s=%t" "--eula" .Values.server.vmbackupmanager.eula | quote}} - - {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}} - {{- range $key, $value := .Values.server.vmbackupmanager.extraArgs }} - - --{{ $key }}={{ $value }} - {{- end }} - {{- with .Values.server.securityContext }} - securityContext: {{- toYaml . | nindent 4 }} - {{- end }} - {{- with .Values.server.vmbackupmanager.resources }} - resources: {{ toYaml . | nindent 4 }} - {{- end }} - {{- with .Values.server.vmbackupmanager.env }} - env: {{ toYaml . | nindent 4 }} - {{- end }} - ports: - - name: manager-http - containerPort: 8300 - volumeMounts: - - name: server-volume - mountPath: {{ .Values.server.persistentVolume.mountPath }} - subPath: {{ .Values.server.persistentVolume.subPath }} - {{- with .Values.server.vmbackupmanager.extraVolumeMounts }} - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end -}} -{{- else -}} -[] -{{- end -}} -{{- end -}} - -{{/* -Return license flag if necessary. -*/}} -{{- define "victoria-metrics.license.flag" -}} -{{- if .Values.license.key -}} ---license={{ .Values.license.key }} -{{- end }} -{{- if and .Values.license.secret.name .Values.license.secret.key -}} ---licenseFile=/etc/vm-license-key/{{ .Values.license.secret.key }} -{{- end -}} -{{- end -}} - - -{{/* -Return license volume mount -*/}} -{{- define "victoria-metrics.license.volume" -}} -{{- if and .Values.license.secret.name .Values.license.secret.key -}} -- name: license-key - secret: - secretName: {{ .Values.license.secret.name }} -{{- end -}} -{{- end -}} - -{{/* -Return license volume mount for container -*/}} -{{- define "victoria-metrics.license.mount" -}} -{{- if and .Values.license.secret.name .Values.license.secret.key -}} -- name: license-key - mountPath: /etc/vm-license-key - readOnly: true -{{- end -}} -{{- end -}} - -{{/* -Enforce license for vmbackupmanager -*/}} -{{- define "victoria-metrics.vmbackupmanager.enforce_license" -}} -{{ if and .Values.server.vmbackupmanager.enable (not (or .Values.server.vmbackupmanager.eula .Values.license.key .Values.license.secret.name)) }} -{{ fail `Pass -eula command-line flag or valid license at .Values.license if you have an enterprise license for running this software. - See https://victoriametrics.com/legal/esa/ for details. - Documentation - https://docs.victoriametrics.com/enterprise.html - for more information, visit https://victoriametrics.com/products/enterprise/ - To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/`}} -{{- end -}} -{{- end -}} - -{{/* -Return true if the detected platform is Openshift -Usage: -{{- include "common.compatibility.isOpenshift" . -}} -*/}} -{{- define "common.compatibility.isOpenshift" -}} -{{- if .Capabilities.APIVersions.Has "security.openshift.io/v1" -}} -{{- true -}} -{{- end -}} -{{- end -}} - -{{/* -Render a compatible securityContext depending on the platform. By default it is maintained as it is. In other platforms like Openshift we remove default user/group values that do not work out of the box with the restricted-v1 SCC -Usage: -{{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.containerSecurityContext "context" $) -}} -*/}} -{{- define "common.compatibility.renderSecurityContext" -}} -{{- $adaptedContext := .secContext -}} -{{- if .context.Values.global.compatibility -}} - {{- if .context.Values.global.compatibility.openshift -}} - {{- if or (eq .context.Values.global.compatibility.openshift.adaptSecurityContext "force") (and (eq .context.Values.global.compatibility.openshift.adaptSecurityContext "auto") (include "common.compatibility.isOpenshift" .context)) -}} - {{/* Remove incompatible user/group values that do not work in Openshift out of the box */}} - {{- $adaptedContext = omit $adaptedContext "fsGroup" "runAsUser" "runAsGroup" -}} - {{- if not .secContext.seLinuxOptions -}} - {{/* If it is an empty object, we remove it from the resulting context because it causes validation issues */}} - {{- $adaptedContext = omit $adaptedContext "seLinuxOptions" -}} - {{- end -}} - {{- end -}} - {{- end -}} -{{- end -}} -{{- omit $adaptedContext "enabled" | toYaml -}} -{{- end -}} diff --git a/helm-templates/victoria-metrics-single/templates/clusterrole.yaml b/helm-templates/victoria-metrics-single/templates/clusterrole.yaml deleted file mode 100644 index 44a8655..0000000 --- a/helm-templates/victoria-metrics-single/templates/clusterrole.yaml +++ /dev/null @@ -1,50 +0,0 @@ -{{- if and .Values.rbac.create (not .Values.rbac.namespaced) }} -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: {{ template "victoria-metrics.fullname" . }}-clusterrole - labels: - {{- include "victoria-metrics.common.metaLabels" . | nindent 4 }} - {{- if .Values.rbac.extraLabels }} -{{ toYaml .Values.rbac.extraLabels | indent 4}} - {{- end }} -{{- with .Values.rbac.annotations }} - annotations: -{{ toYaml . | indent 4 }} -{{- end }} -{{- if or .Values.rbac.pspEnabled .Values.server.scrape.enabled }} -rules: - {{- if .Values.server.scrape.enabled }} - - apiGroups: - - discovery.k8s.io - resources: - - endpointslices - verbs: ["get", "list", "watch"] - - apiGroups: [ "" ] - resources: - - nodes - - nodes/proxy - - nodes/metrics - - services - - endpoints - - pods - verbs: [ "get", "list", "watch" ] - - apiGroups: - - extensions - - networking.k8s.io - resources: - - ingresses - verbs: [ "get", "list", "watch" ] - - nonResourceURLs: [ "/metrics" ] - verbs: [ "get" ] - {{- end }} - {{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }} - - apiGroups: ['extensions'] - resources: ['podsecuritypolicies'] - verbs: ['use'] - resourceNames: [{{ template "victoria-metrics.fullname" . }}] - {{- end }} -{{- else }} -rules: [] -{{- end }} -{{- end -}} diff --git a/helm-templates/victoria-metrics-single/templates/clusterrolebinding.yaml b/helm-templates/victoria-metrics-single/templates/clusterrolebinding.yaml deleted file mode 100644 index bee3ea1..0000000 --- a/helm-templates/victoria-metrics-single/templates/clusterrolebinding.yaml +++ /dev/null @@ -1,23 +0,0 @@ -{{- if and .Values.rbac.create (not .Values.rbac.namespaced) }} -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: {{ template "victoria-metrics.fullname" . }}-clusterrolebinding - labels: - {{- include "victoria-metrics.common.metaLabels" . | nindent 4 }} - {{- if .Values.rbac.extraLabels }} -{{ toYaml .Values.rbac.extraLabels | indent 4}} - {{- end }} -{{- with .Values.rbac.annotations }} - annotations: -{{ toYaml . | indent 4 }} -{{- end }} -subjects: - - kind: ServiceAccount - name: {{ template "victoria-metrics.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} -roleRef: - kind: ClusterRole - name: {{ template "victoria-metrics.fullname" . }}-clusterrole - apiGroup: rbac.authorization.k8s.io -{{- end -}} diff --git a/helm-templates/victoria-metrics-single/templates/extra-objects.yaml b/helm-templates/victoria-metrics-single/templates/extra-objects.yaml deleted file mode 100644 index a9bb3b6..0000000 --- a/helm-templates/victoria-metrics-single/templates/extra-objects.yaml +++ /dev/null @@ -1,4 +0,0 @@ -{{ range .Values.extraObjects }} ---- -{{ tpl (toYaml .) $ }} -{{ end }} diff --git a/helm-templates/victoria-metrics-single/templates/pdb.yaml b/helm-templates/victoria-metrics-single/templates/pdb.yaml deleted file mode 100644 index acdb390..0000000 --- a/helm-templates/victoria-metrics-single/templates/pdb.yaml +++ /dev/null @@ -1,26 +0,0 @@ -{{- if .Values.podDisruptionBudget.enabled }} -{{- if .Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget" }} -apiVersion: policy/v1 -{{- else -}} -apiVersion: policy/v1beta1 -{{- end }} -kind: PodDisruptionBudget -metadata: - name: {{ template "victoria-metrics.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "victoria-metrics.common.metaLabels" . | nindent 4 }} - {{- if .Values.podDisruptionBudget.extraLabels }} -{{ toYaml .Values.podDisruptionBudget.extraLabels | indent 4}} - {{- end }} -spec: -{{- if .Values.podDisruptionBudget.minAvailable }} - minAvailable: {{ .Values.podDisruptionBudget.minAvailable }} -{{- end }} -{{- if .Values.podDisruptionBudget.maxUnavailable }} - maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }} -{{- end }} - selector: - matchLabels: - {{- include "victoria-metrics.server.matchLabels" . | nindent 6 }} -{{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/podsecuritypolicy.yaml b/helm-templates/victoria-metrics-single/templates/podsecuritypolicy.yaml deleted file mode 100644 index 27affe2..0000000 --- a/helm-templates/victoria-metrics-single/templates/podsecuritypolicy.yaml +++ /dev/null @@ -1,42 +0,0 @@ -{{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }} -apiVersion: policy/v1beta1 -kind: PodSecurityPolicy -metadata: - name: {{ template "victoria-metrics.fullname" . }} - labels: - {{- include "victoria-metrics.common.metaLabels" . | nindent 4 }} - {{- if .Values.rbac.extraLabels }} -{{ toYaml .Values.rbac.extraLabels | indent 4}} - {{- end }} - annotations: - seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default' - seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default' - {{- if .Values.rbac.annotations }} - {{ toYaml .Values.rbac.annotations | indent 4}} - {{- end }} -spec: - privileged: false - allowPrivilegeEscalation: false - requiredDropCapabilities: - # Default set from Docker, with DAC_OVERRIDE and CHOWN - - ALL - volumes: - - 'configMap' - - 'emptyDir' - - 'projected' - - 'secret' - - 'downwardAPI' - - 'persistentVolumeClaim' - hostNetwork: false - hostIPC: false - hostPID: false - runAsUser: - rule: 'RunAsAny' - seLinux: - rule: 'RunAsAny' - supplementalGroups: - rule: 'RunAsAny' - fsGroup: - rule: 'RunAsAny' - readOnlyRootFilesystem: false -{{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/role.yaml b/helm-templates/victoria-metrics-single/templates/role.yaml deleted file mode 100644 index 27fd2b8..0000000 --- a/helm-templates/victoria-metrics-single/templates/role.yaml +++ /dev/null @@ -1,23 +0,0 @@ -{{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }} -{{- if .Values.rbac.create -}} -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: {{ template "victoria-metrics.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "victoria-metrics.common.metaLabels" . | nindent 4 }} - {{- if .Values.rbac.extraLabels }} -{{ toYaml .Values.rbac.extraLabels | indent 4}} - {{- end }} -{{- with .Values.rbac.annotations }} - annotations: -{{ toYaml . | indent 4 }} -{{- end }} -rules: -- apiGroups: ['extensions'] - resources: ['podsecuritypolicies'] - verbs: ['use'] - resourceNames: [{{ template "victoria-metrics.fullname" . }}] -{{- end }} -{{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/rolebinding.yaml b/helm-templates/victoria-metrics-single/templates/rolebinding.yaml deleted file mode 100644 index df9d185..0000000 --- a/helm-templates/victoria-metrics-single/templates/rolebinding.yaml +++ /dev/null @@ -1,26 +0,0 @@ -{{- if and .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }} -{{- if .Values.rbac.create -}} -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: {{ template "victoria-metrics.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "victoria-metrics.common.metaLabels" . | nindent 4 }} - {{- if .Values.rbac.extraLabels }} -{{ toYaml .Values.rbac.extraLabels | indent 4}} - {{- end }} -{{- with .Values.rbac.annotations }} - annotations: -{{ toYaml . | indent 4 }} -{{- end }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: {{ template "victoria-metrics.fullname" . }} -subjects: -- kind: ServiceAccount - name: {{ template "victoria-metrics.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} -{{- end }} -{{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/scrape-configmap.yaml b/helm-templates/victoria-metrics-single/templates/scrape-configmap.yaml deleted file mode 100644 index 7d09eae..0000000 --- a/helm-templates/victoria-metrics-single/templates/scrape-configmap.yaml +++ /dev/null @@ -1,17 +0,0 @@ -{{- if and .Values.server.scrape.enabled (eq .Values.server.scrape.configMap "") }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ template "victoria-metrics.server.fullname" . }}-scrapeconfig - namespace: {{ .Release.Namespace }} - labels: {{- include "victoria-metrics.server.labels" . | nindent 4 }} -data: - scrape.yml: | - {{- range $k, $v := .Values.server.scrape.config }} - {{- if and (eq $k "scrape_configs") ($.Values.server.scrape.extraScrapeConfigs) }} - {{ dict $k (concat $v $.Values.server.scrape.extraScrapeConfigs) | toYaml | nindent 4 }} - {{- else }} - {{ dict $k $v | toYaml | nindent 4 }} - {{- end }} - {{- end }} -{{- end }} \ No newline at end of file diff --git a/helm-templates/victoria-metrics-single/templates/server-deployment.yaml b/helm-templates/victoria-metrics-single/templates/server-deployment.yaml deleted file mode 100644 index d636e98..0000000 --- a/helm-templates/victoria-metrics-single/templates/server-deployment.yaml +++ /dev/null @@ -1,257 +0,0 @@ -{{- if and .Values.server.enabled (not .Values.server.statefulSet.enabled) -}} -{{ include "victoria-metrics.vmbackupmanager.enforce_license" . }} -apiVersion: apps/v1 -kind: Deployment -metadata: -{{- if .Values.server.annotations }} - annotations: -{{ toYaml .Values.server.annotations | indent 4 }} -{{- end }} - labels: - {{- include "victoria-metrics.server.labels" . | nindent 4 }} - {{- with .Values.server.extraLabels }} - {{ toYaml .}} - {{- end }} - name: {{ template "victoria-metrics.server.fullname" . }} - namespace: {{ .Release.Namespace }} -spec: - selector: - matchLabels: - {{- include "victoria-metrics.server.matchLabels" . | nindent 6 }} - replicas: 1 -{{- if .Values.server.persistentVolume.enabled }} - strategy: - # Must be "Recreate" when we have a persistent volume - type: Recreate -{{- end }} - template: - metadata: - {{- if .Values.server.podAnnotations }} - annotations: -{{ toYaml .Values.server.podAnnotations | indent 8 }} - {{- end }} - labels: - {{- include "victoria-metrics.server.labels" . | nindent 8 }} - {{- range $key, $value := .Values.server.podLabels }} - {{ $key }}: {{ $value | quote }} - {{- end }} - spec: -{{- if .Values.server.priorityClassName }} - priorityClassName: "{{ .Values.server.priorityClassName }}" -{{- end }} -{{- if .Values.server.schedulerName }} - schedulerName: "{{ .Values.server.schedulerName }}" -{{- end }} - automountServiceAccountToken: {{ .Values.serviceAccount.automountToken }} - {{- if eq (include "victoria-metrics.hasInitContainer" . ) "true" -}} - initContainers: - {{- include "victoria-metrics.initContiners" . | nindent 8 }} - {{- end }} - containers: - - name: {{ template "victoria-metrics.name" . }}-{{ .Values.server.name }} - {{- if .Values.server.securityContext.enabled }} - securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.server.securityContext "context" $) | nindent 12 }} - {{- end }} - image: "{{ .Values.server.image.repository }}:{{ default .Chart.AppVersion .Values.server.image.tag }}{{- with .Values.server.image.variant }}-{{ . }}{{- end }}" - imagePullPolicy: "{{ .Values.server.image.pullPolicy }}" - {{- if .Values.server.containerWorkingDir }} - workingDir: {{ .Values.server.containerWorkingDir }} - {{- end }} - args: - - {{ printf "%s=%s" "--retentionPeriod" (toString .Values.server.retentionPeriod) | quote}} - - {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}} - {{- if .Values.server.scrape.enabled }} - - --promscrape.config=/scrapeconfig/scrape.yml - {{- end }} - {{- range $key, $value := .Values.server.extraArgs }} - {{- if kindIs "slice" $value }} - {{- range $v := $value }} - - --{{ $key }}={{ $v }} - {{- end }} - {{- else }} - - --{{ $key }}={{ $value }} - {{- end }} - {{- end }} - {{- with (include "victoria-metrics.license.flag" .) }} - - {{ . }} - {{- end }} - {{- if .Values.server.envFrom }} - envFrom: - {{- with .Values.server.envFrom -}} - {{ toYaml . | nindent 12 }} - {{- end }} - {{- end }} - {{- with .Values.server.env }} - env: {{ toYaml . | nindent 10 }} - {{- end }} - ports: - - name: http - containerPort: 8428 - {{- if .Values.server.extraArgs.graphiteListenAddr }} - - name: graphite-tcp - protocol: TCP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.graphiteListenAddr }} - - name: graphite-udp - protocol: UDP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.influxListenAddr }} - - name: influx-tcp - protocol: TCP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.influxListenAddr }} - - name: influx-udp - protocol: UDP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.opentsdbHTTPListenAddr }} - - name: opentsdbhttp - protocol: TCP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbHTTPListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.opentsdbListenAddr }} - - name: opentsdb-tcp - protocol: TCP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.opentsdbListenAddr }} - - name: opentsdb-udp - protocol: UDP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }} - {{- end }} - {{- with $.Values.server.livenessProbe }} - livenessProbe: - {{- toYaml . | nindent 12 }} - {{- end }} - {{- with $.Values.server.readinessProbe }} - readinessProbe: - {{- toYaml . | nindent 12 }} - {{- end }} - {{- with $.Values.server.startupProbe }} - startupProbe: - {{- toYaml . | nindent 12 }} - {{- end }} - resources: -{{ toYaml .Values.server.resources | indent 12 }} - volumeMounts: - - name: server-volume - mountPath: {{ .Values.server.persistentVolume.mountPath }} - subPath: {{ .Values.server.persistentVolume.subPath }} - {{- if .Values.server.scrape.enabled }} - - name: scrapeconfig - mountPath: /scrapeconfig - {{- end }} - {{- range .Values.server.extraHostPathMounts }} - - name: {{ .name }} - mountPath: {{ .mountPath }} - subPath: {{ .subPath }} - readOnly: {{ .readOnly }} - {{- end }} - {{- range .Values.server.extraConfigmapMounts }} - - name: {{ $.Values.server.name }}-{{ .name }} - mountPath: {{ .mountPath }} - subPath: {{ .subPath }} - readOnly: {{ .readOnly }} - {{- end }} - {{- range .Values.server.extraSecretMounts }} - - name: {{ .name }} - mountPath: {{ .mountPath }} - subPath: {{ .subPath }} - readOnly: {{ .readOnly }} - {{- end }} - {{- include "victoria-metrics.license.mount" . | nindent 12 }} - {{- with .Values.server.extraVolumeMounts }} - {{- toYaml . | nindent 12 }} - {{- end }} - {{- if .Values.server.vmbackupmanager.enable }} - - name: {{ template "victoria-metrics.name" . }}-vmbackupmanager - image: "{{ .Values.server.vmbackupmanager.image.repository }}:{{ default .Chart.AppVersion .Values.server.vmbackupmanager.image.tag }}{{- with .Values.server.vmbackupmanager.image.variant }}-{{ . }}{{- end }}" - imagePullPolicy: "{{ .Values.server.image.pullPolicy }}" - args: - - {{ printf "%s=%t" "--eula" .Values.server.vmbackupmanager.eula | quote}} - - {{ printf "%s=%t" "--disableHourly" .Values.server.vmbackupmanager.disableHourly | quote}} - - {{ printf "%s=%t" "--disableDaily" .Values.server.vmbackupmanager.disableDaily | quote}} - - {{ printf "%s=%t" "--disableWeekly" .Values.server.vmbackupmanager.disableWeekly | quote}} - - {{ printf "%s=%t" "--disableMonthly" .Values.server.vmbackupmanager.disableMonthly | quote}} - - {{ printf "%s=%d" "--keepLastHourly" (int .Values.server.vmbackupmanager.retention.keepLastHourly) | quote}} - - {{ printf "%s=%d" "--keepLastDaily" (int .Values.server.vmbackupmanager.retention.keepLastDaily) | quote}} - - {{ printf "%s=%d" "--keepLastWeekly" (int .Values.server.vmbackupmanager.retention.keepLastWeekly) | quote}} - - {{ printf "%s=%d" "--keepLastMonthly" (int .Values.server.vmbackupmanager.retention.keepLastMonthly) | quote}} - - {{ printf "%s=%s" "--dst" (printf "%s/%s" .Values.server.vmbackupmanager.destination (include "victoria-metrics.name" .) ) | quote}} - - {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}} - - "--snapshot.createURL=http://localhost:8428/snapshot/create" - - "--snapshot.deleteURL=http://localhost:8428/snapshot/delete" - {{- range $key, $value := .Values.server.vmbackupmanager.extraArgs }} - - --{{ $key }}={{ $value }} - {{- end }} - {{- with (include "victoria-metrics.license.flag" .) }} - - {{ . }} - {{- end }} - {{- with .Values.server.vmbackupmanager.resources }} - resources: {{ toYaml . | nindent 12 }} - {{- end }} - {{- with $.Values.server.vmbackupmanager.livenessProbe }} - livenessProbe: {{- toYaml . | nindent 12 }} - {{- end }} - {{- with $.Values.server.vmbackupmanager.readinessProbe }} - readinessProbe: {{- toYaml . | nindent 12 }} - {{- end }} - {{- with .Values.server.vmbackupmanager.env }} - env: {{ toYaml . | nindent 12 }} - {{- end }} - ports: - - name: manager-http - containerPort: 8300 - volumeMounts: - - name: server-volume - mountPath: {{ .Values.server.persistentVolume.mountPath }} - subPath: {{ .Values.server.persistentVolume.subPath }} - {{- with .Values.server.vmbackupmanager.extraVolumeMounts }} - {{- toYaml . | nindent 12 }} - {{- end }} - {{- include "victoria-metrics.license.mount" . | nindent 12 }} - {{- end }} - {{- with .Values.server.extraContainers }} - {{- toYaml . | nindent 8 }} - {{- end }} - {{- if .Values.imagePullSecrets }} - imagePullSecrets: - {{ toYaml .Values.imagePullSecrets | indent 2 }} - {{- end }} - {{- if .Values.server.nodeSelector }} - nodeSelector: -{{ toYaml .Values.server.nodeSelector | indent 8 }} - {{- end }} - {{- if .Values.server.podSecurityContext.enabled }} - securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.server.podSecurityContext "context" $) | nindent 8 }} - {{- end }} - serviceAccountName: {{ template "victoria-metrics.serviceAccountName" . }} - {{- if .Values.server.tolerations }} - tolerations: -{{ toYaml .Values.server.tolerations | indent 8 }} - {{- end }} - {{- with .Values.server.affinity }} - affinity: {{ toYaml . | nindent 8 }} - {{- end }} - terminationGracePeriodSeconds: {{ .Values.server.terminationGracePeriodSeconds }} - volumes: - {{- if .Values.server.scrape.enabled }} - - name: scrapeconfig - configMap: - name: {{ include "victoria-metrics.server.scrape.configname" . }} - {{- end }} - {{- with .Values.server.extraVolumes }} - {{- toYaml . | nindent 6 }} - {{- end }} - - name: server-volume -{{- if .Values.server.persistentVolume.enabled }} - persistentVolumeClaim: - claimName: {{ if .Values.server.persistentVolume.existingClaim }}{{ .Values.server.persistentVolume.existingClaim }}{{- else }}{{ template "victoria-metrics.server.fullname" . }}{{- end }} -{{- else }} - emptyDir: {} -{{- end }} - {{- include "victoria-metrics.license.volume" . | nindent 8 }} -{{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/server-ingress.yaml b/helm-templates/victoria-metrics-single/templates/server-ingress.yaml deleted file mode 100644 index e353b9e..0000000 --- a/helm-templates/victoria-metrics-single/templates/server-ingress.yaml +++ /dev/null @@ -1,50 +0,0 @@ -{{- if and .Values.server.enabled .Values.server.ingress.enabled }} -{{- $ingressApiIsStable := eq (include "victoria-metrics.ingress.isStable" .) "true" -}} -{{- $ingressSupportsIngressClassName := eq (include "victoria-metrics.ingress.supportsIngressClassName" .) "true" -}} -{{- $ingressSupportsPathType := eq (include "victoria-metrics.ingress.supportsPathType" .) "true" -}} -{{- $servicePort := .Values.server.service.servicePort -}} -{{- $ingressPathType := .Values.server.ingress.pathType -}} -apiVersion: {{ include "victoria-metrics.ingress.apiVersion" . }} -kind: Ingress -metadata: -{{- if .Values.server.ingress.annotations }} - annotations: -{{ toYaml .Values.server.ingress.annotations | indent 4 }} -{{- end }} - labels: - {{- include "victoria-metrics.server.labels" . | nindent 4 }} - {{ if .Values.server.ingress.extraLabels }} -{{ toYaml .Values.server.ingress.extraLabels | indent 4 }} - {{ end }} - name: {{ template "victoria-metrics.server.fullname" . }} - namespace: {{ .Release.Namespace }} -spec: - {{- if and $ingressSupportsIngressClassName .Values.server.ingress.ingressClassName }} - ingressClassName: {{ .Values.server.ingress.ingressClassName }} - {{- end }} - rules: - {{- $serviceName := include "victoria-metrics.server.fullname" . }} - {{- range .Values.server.ingress.hosts }} - - host: {{ .name }} - http: - paths: - - path: {{ .path }} - {{- if $ingressSupportsPathType }} - pathType: {{ $ingressPathType }} - {{- end }} - backend: - {{- if $ingressApiIsStable }} - service: - name: {{ $serviceName }} - port: - number: {{ $servicePort }} - {{- else }} - serviceName: {{ $serviceName }} - servicePort: {{ .port | default "http"}} - {{- end }} - {{- end -}} -{{- if .Values.server.ingress.tls }} - tls: -{{ toYaml .Values.server.ingress.tls | indent 4 }} -{{- end -}} -{{- end -}} diff --git a/helm-templates/victoria-metrics-single/templates/server-pvc.yaml b/helm-templates/victoria-metrics-single/templates/server-pvc.yaml deleted file mode 100644 index 35b3204..0000000 --- a/helm-templates/victoria-metrics-single/templates/server-pvc.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.server.persistentVolume.enabled -}} -{{- if not .Values.server.statefulSet.enabled -}} -{{- if not .Values.server.persistentVolume.existingClaim -}} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: {{ template "victoria-metrics.server.fullname" . }} - namespace: {{ .Release.Namespace }} -{{- with .Values.server.persistentVolume.annotations }} - annotations: -{{ toYaml . | indent 4 }} -{{- end }} - labels: -{{- include "victoria-metrics.server.labels" . | nindent 4 }} -spec: -{{- with .Values.server.persistentVolume.accessModes }} - accessModes: -{{ toYaml . | indent 4 }} -{{- end }} - resources: - requests: - storage: {{ .Values.server.persistentVolume.size | quote }} -{{- if .Values.server.persistentVolume.storageClass }} - storageClassName: {{ .Values.server.persistentVolume.storageClass | quote }} -{{- end }} -{{- with .Values.server.persistentVolume.matchLabels }} - selector: - matchLabels: - {{- toYaml . | nindent 6 }} -{{- end }} -{{- end }} -{{- end }} -{{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/server-service-headless.yaml b/helm-templates/victoria-metrics-single/templates/server-service-headless.yaml deleted file mode 100644 index 9d6f222..0000000 --- a/helm-templates/victoria-metrics-single/templates/server-service-headless.yaml +++ /dev/null @@ -1,72 +0,0 @@ -{{- if and .Values.server.enabled .Values.server.statefulSet.enabled -}} -apiVersion: v1 -kind: Service -metadata: - namespace: {{ .Release.Namespace }} -{{- if .Values.server.statefulSet.service.annotations }} - annotations: -{{ toYaml .Values.server.statefulSet.service.annotations | indent 4}} -{{- end }} - labels: - {{- include "victoria-metrics.server.labels" . | nindent 4 }} -{{- if .Values.server.statefulSet.service.labels }} -{{ toYaml .Values.server.statefulSet.service.labels | indent 4}} -{{- end }} - name: {{ template "victoria-metrics.server.fullname" . }} -spec: - clusterIP: None - {{- with .Values.server.statefulSet.service.healthCheckNodePort }} - healthCheckNodePort: {{ . }} - {{- end }} - {{- with .Values.server.statefulSet.service.externalTrafficPolicy }} - externalTrafficPolicy: {{ . }} - {{- end }} - ports: - - name: http - port: {{ .Values.server.statefulSet.service.servicePort }} - protocol: TCP - targetPort: http -{{- if .Values.server.extraArgs.graphiteListenAddr }} - - name: graphite-tcp - protocol: TCP - port: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }} - targetPort: graphite-tcp -{{- end }} -{{- if .Values.server.extraArgs.graphiteListenAddr }} - - name: graphite-udp - protocol: UDP - port: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }} - targetPort: graphite-udp -{{- end }} -{{- if .Values.server.extraArgs.influxListenAddr }} - - name: influx-tcp - protocol: TCP - port: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }} - targetPort: influx-tcp -{{- end }} -{{- if .Values.server.extraArgs.influxListenAddr }} - - name: influx-udp - protocol: UDP - port: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }} - targetPort: influx-udp -{{- end }} -{{- if .Values.server.extraArgs.opentsdbHTTPListenAddr }} - - name: opentsdbhttp - port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbHTTPListenAddr }} - targetPort: opentsdbhttp -{{- end }} -{{- if .Values.server.extraArgs.opentsdbListenAddr }} - - name: opentsdb-udp - protocol: UDP - port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }} - targetPort: opentsdb-udp -{{- end }} -{{- if .Values.server.extraArgs.opentsdbListenAddr }} - - name: opentsdb-tcp - protocol: TCP - port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }} - targetPort: opentsdb-tcp -{{- end }} - selector: - {{- include "victoria-metrics.server.matchLabels" . | nindent 4 }} -{{- end -}} diff --git a/helm-templates/victoria-metrics-single/templates/server-service-monitor.yaml b/helm-templates/victoria-metrics-single/templates/server-service-monitor.yaml deleted file mode 100644 index 398535e..0000000 --- a/helm-templates/victoria-metrics-single/templates/server-service-monitor.yaml +++ /dev/null @@ -1,48 +0,0 @@ -{{- if and .Values.server.enabled .Values.server.serviceMonitor.enabled -}} -apiVersion: monitoring.coreos.com/v1 -kind: ServiceMonitor -metadata: - {{- if .Values.server.serviceMonitor.annotations }} - annotations: -{{ toYaml .Values.server.serviceMonitor.annotations | indent 4 }} - {{- end }} - labels: - {{- include "victoria-metrics.server.labels" . | nindent 4 }} - {{- if .Values.server.serviceMonitor.extraLabels }} -{{ toYaml .Values.server.serviceMonitor.extraLabels | indent 4 }} - {{- end }} - name: {{ template "victoria-metrics.server.fullname" . }} - {{- if .Values.server.serviceMonitor.namespace }} - namespace: {{ .Values.server.serviceMonitor.namespace }} - {{- end }} -spec: - namespaceSelector: - matchNames: - - {{ .Release.Namespace }} - selector: - matchLabels: - {{- include "victoria-metrics.server.matchLabels" . | nindent 6 }} - endpoints: - - port: http - {{- if .Values.server.serviceMonitor.scheme }} - scheme: {{ .Values.server.serviceMonitor.scheme }} - {{- end }} - {{- if .Values.server.serviceMonitor.interval }} - interval: {{ .Values.server.serviceMonitor.interval }} - {{- end }} - {{- if .Values.server.serviceMonitor.scrapeTimeout }} - scrapeTimeout: {{ .Values.server.serviceMonitor.scrapeTimeout }} - {{- end }} - {{- with .Values.server.serviceMonitor.tlsConfig }} - tlsConfig: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.server.serviceMonitor.relabelings }} - relabelings: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.server.serviceMonitor.metricRelabelings }} - metricRelabelings: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/server-service.yaml b/helm-templates/victoria-metrics-single/templates/server-service.yaml deleted file mode 100644 index b58e7df..0000000 --- a/helm-templates/victoria-metrics-single/templates/server-service.yaml +++ /dev/null @@ -1,91 +0,0 @@ -{{- if and .Values.server.enabled (not .Values.server.statefulSet.enabled) -}} -apiVersion: v1 -kind: Service -metadata: - namespace: {{ .Release.Namespace }} -{{- if .Values.server.service.annotations }} - annotations: -{{ toYaml .Values.server.service.annotations | indent 4}} -{{- end }} - labels: - {{- include "victoria-metrics.server.labels" . | nindent 4 }} -{{- if .Values.server.service.labels }} -{{ toYaml .Values.server.service.labels | indent 4}} -{{- end }} - name: {{ template "victoria-metrics.server.fullname" . }} -spec: -{{- if .Values.server.service.clusterIP }} - clusterIP: {{ .Values.server.service.clusterIP }} -{{- end }} -{{- if .Values.server.service.externalIPs }} - externalIPs: -{{ toYaml .Values.server.service.externalIPs | indent 4 }} -{{- end }} -{{- if .Values.server.service.loadBalancerIP }} - loadBalancerIP: {{ .Values.server.service.loadBalancerIP }} -{{- end }} -{{- if .Values.server.service.loadBalancerSourceRanges }} - loadBalancerSourceRanges: - {{- range $cidr := .Values.server.service.loadBalancerSourceRanges }} - - {{ $cidr }} - {{- end }} -{{- end }} - ports: - - name: http - port: {{ .Values.server.service.servicePort }} - protocol: TCP - targetPort: http - {{- with .Values.server.service.nodePort }} - nodePort: {{ . }} - {{- end }} -{{- if .Values.server.extraArgs.graphiteListenAddr }} - - name: graphite-tcp - protocol: TCP - port: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }} - targetPort: graphite-tcp -{{- end }} -{{- if .Values.server.extraArgs.graphiteListenAddr }} - - name: graphite-udp - protocol: UDP - port: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }} - targetPort: graphite-udp -{{- end }} -{{- if .Values.server.extraArgs.influxListenAddr }} - - name: influx-tcp - protocol: TCP - port: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }} - targetPort: influx-tcp -{{- end }} -{{- if .Values.server.extraArgs.influxListenAddr }} - - name: influx-udp - protocol: UDP - port: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }} - targetPort: influx-udp -{{- end }} -{{- if .Values.server.extraArgs.opentsdbHTTPListenAddr }} - - name: opentsdbhttp - port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbHTTPListenAddr }} - targetPort: opentsdbhttp -{{- end }} -{{- if .Values.server.extraArgs.opentsdbListenAddr }} - - name: opentsdb-udp - protocol: UDP - port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }} - targetPort: opentsdb-udp -{{- end }} -{{- if .Values.server.extraArgs.opentsdbListenAddr }} - - name: opentsdb-tcp - protocol: TCP - port: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }} - targetPort: opentsdb-tcp -{{- end }} - selector: - {{- include "victoria-metrics.server.matchLabels" . | nindent 4 }} - type: "{{ .Values.server.service.type }}" - {{- with .Values.server.service.healthCheckNodePort }} - healthCheckNodePort: {{ . }} - {{- end }} - {{- with .Values.server.service.externalTrafficPolicy }} - externalTrafficPolicy: {{ . }} - {{- end }} -{{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/server-statefulset.yaml b/helm-templates/victoria-metrics-single/templates/server-statefulset.yaml deleted file mode 100644 index f5fcaa0..0000000 --- a/helm-templates/victoria-metrics-single/templates/server-statefulset.yaml +++ /dev/null @@ -1,289 +0,0 @@ -{{- if and .Values.server.enabled .Values.server.statefulSet.enabled -}} -{{ include "victoria-metrics.vmbackupmanager.enforce_license" . }} -apiVersion: apps/v1 -kind: StatefulSet -metadata: - namespace: {{ .Release.Namespace }} - name: {{ template "victoria-metrics.server.fullname" . }} - labels: - {{- include "victoria-metrics.server.labels" . | nindent 4 }} - {{- with .Values.server.extraLabels }} - {{ toYaml . | nindent 4 }} - {{- end }} - {{- with .Values.server.annotations }} - annotations: - {{ toYaml . | nindent 4 }} - {{- end }} -spec: - serviceName: {{ template "victoria-metrics.server.fullname" . }} - selector: - matchLabels: - {{- include "victoria-metrics.server.matchLabels" . | nindent 6 }} - replicas: 1 - podManagementPolicy: {{ .Values.server.podManagementPolicy }} - template: - metadata: - {{- if .Values.server.podAnnotations }} - annotations: -{{ toYaml .Values.server.podAnnotations | indent 8 }} - {{- end }} - labels: - {{- include "victoria-metrics.server.labels" . | nindent 8 }} - {{- range $key, $value := .Values.server.podLabels }} - {{ $key }}: {{ $value | quote }} - {{- end }} - spec: -{{- if .Values.server.priorityClassName }} - priorityClassName: "{{ .Values.server.priorityClassName }}" -{{- end }} -{{- if .Values.server.schedulerName }} - schedulerName: "{{ .Values.server.schedulerName }}" -{{- end }} - automountServiceAccountToken: {{ .Values.serviceAccount.automountToken }} - {{- if eq (include "victoria-metrics.hasInitContainer" . ) "true" }} - initContainers: - {{- include "victoria-metrics.initContiners" . | nindent 8 }} - {{- end }} - containers: - - name: {{ template "victoria-metrics.name" . }}-{{ .Values.server.name }} - {{- if .Values.server.securityContext.enabled }} - securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.server.securityContext "context" $) | nindent 12 }} - {{- end }} - image: "{{ .Values.server.image.repository }}:{{ default .Chart.AppVersion .Values.server.image.tag }}{{- with .Values.server.image.variant }}-{{ . }}{{- end }}" - imagePullPolicy: "{{ .Values.server.image.pullPolicy }}" - {{- if .Values.server.containerWorkingDir }} - workingDir: {{ .Values.server.containerWorkingDir }} - {{- end }} - args: - - {{ printf "%s=%s" "--retentionPeriod" (toString .Values.server.retentionPeriod) | quote}} - - {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}} - {{- if .Values.server.scrape.enabled }} - - --promscrape.config=/scrapeconfig/scrape.yml - {{- end }} - {{- range $key, $value := .Values.server.extraArgs }} - {{- if kindIs "slice" $value }} - {{- range $v := $value }} - - --{{ $key }}={{ $v }} - {{- end }} - {{- else }} - - --{{ $key }}={{ $value }} - {{- end }} - {{- end }} - {{- with (include "victoria-metrics.license.flag" .) }} - - {{ . }} - {{- end }} - {{- if .Values.server.envFrom }} - envFrom: - {{- with .Values.server.envFrom -}} - {{ toYaml . | nindent 12 }} - {{- end }} - {{- end }} - {{- with .Values.server.env }} - env: {{ toYaml . | nindent 10 }} - {{- end }} - ports: - - name: http - containerPort: 8428 - {{- if .Values.server.extraArgs.graphiteListenAddr }} - - name: graphite-tcp - protocol: TCP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.graphiteListenAddr }} - - name: graphite-udp - protocol: UDP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.graphiteListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.influxListenAddr }} - - name: influx-tcp - protocol: TCP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.influxListenAddr }} - - name: influx-udp - protocol: UDP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.influxListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.opentsdbHTTPListenAddr }} - - name: opentsdbhttp - protocol: TCP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbHTTPListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.opentsdbListenAddr }} - - name: opentsdb-tcp - protocol: TCP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }} - {{- end }} - {{- if .Values.server.extraArgs.opentsdbListenAddr }} - - name: opentsdb-udp - protocol: UDP - containerPort: {{ include "split-host-port" .Values.server.extraArgs.opentsdbListenAddr }} - {{- end }} - {{- with $.Values.server.livenessProbe }} - livenessProbe: - {{- toYaml . | nindent 12 }} - {{- end }} - {{- with $.Values.server.readinessProbe }} - readinessProbe: - {{- toYaml . | nindent 12 }} - {{- end }} - {{- with $.Values.server.startupProbe }} - startupProbe: - {{- toYaml . | nindent 12 }} - {{- end }} - resources: - {{- toYaml .Values.server.resources | nindent 12 }} - volumeMounts: - - name: server-volume - mountPath: {{ .Values.server.persistentVolume.mountPath }} - subPath: {{ .Values.server.persistentVolume.subPath }} - {{- if .Values.server.scrape.enabled }} - - name: scrapeconfig - mountPath: /scrapeconfig - {{- end }} - {{- range .Values.server.extraHostPathMounts }} - - name: {{ .name }} - mountPath: {{ .mountPath }} - subPath: {{ .subPath }} - readOnly: {{ .readOnly }} - {{- end }} - {{- range .Values.server.extraConfigmapMounts }} - - name: {{ $.Values.server.name }}-{{ .name }} - mountPath: {{ .mountPath }} - subPath: {{ .subPath }} - readOnly: {{ .readOnly }} - {{- end }} - {{- range .Values.server.extraSecretMounts }} - - name: {{ .name }} - mountPath: {{ .mountPath }} - subPath: {{ .subPath }} - readOnly: {{ .readOnly }} - {{- end }} - {{- include "victoria-metrics.license.mount" . | nindent 12 }} - {{- with .Values.server.extraVolumeMounts }} - {{- toYaml . | nindent 12 }} - {{- end }} - {{- if .Values.server.vmbackupmanager.enable }} - - name: {{ template "victoria-metrics.name" . }}-vmbackupmanager - image: "{{ .Values.server.vmbackupmanager.image.repository }}:{{ default .Chart.AppVersion .Values.server.vmbackupmanager.image.tag }}{{- with .Values.server.vmbackupmanager.image.variant }}-{{ . }}{{- end }}" - imagePullPolicy: "{{ .Values.server.image.pullPolicy }}" - args: - - {{ printf "%s=%t" "--eula" .Values.server.vmbackupmanager.eula | quote}} - - {{ printf "%s=%t" "--disableHourly" .Values.server.vmbackupmanager.disableHourly | quote}} - - {{ printf "%s=%t" "--disableDaily" .Values.server.vmbackupmanager.disableDaily | quote}} - - {{ printf "%s=%t" "--disableWeekly" .Values.server.vmbackupmanager.disableWeekly | quote}} - - {{ printf "%s=%t" "--disableMonthly" .Values.server.vmbackupmanager.disableMonthly | quote}} - - {{ printf "%s=%d" "--keepLastHourly" (int .Values.server.vmbackupmanager.retention.keepLastHourly) | quote}} - - {{ printf "%s=%d" "--keepLastDaily" (int .Values.server.vmbackupmanager.retention.keepLastDaily) | quote}} - - {{ printf "%s=%d" "--keepLastWeekly" (int .Values.server.vmbackupmanager.retention.keepLastWeekly) | quote}} - - {{ printf "%s=%d" "--keepLastMonthly" (int .Values.server.vmbackupmanager.retention.keepLastMonthly) | quote}} - - {{ printf "%s=%s" "--dst" (printf "%s/%s" .Values.server.vmbackupmanager.destination (include "victoria-metrics.name" .) ) | quote}} - - {{ printf "%s=%s" "--storageDataPath" .Values.server.persistentVolume.mountPath | quote}} - - "--snapshot.createURL=http://localhost:8428/snapshot/create" - - "--snapshot.deleteURL=http://localhost:8428/snapshot/delete" - {{- range $key, $value := .Values.server.vmbackupmanager.extraArgs }} - - --{{ $key }}={{ $value }} - {{- end }} - {{- with (include "victoria-metrics.license.flag" .) }} - - {{ . }} - {{- end }} - {{- with .Values.server.vmbackupmanager.resources }} - resources: {{ toYaml . | nindent 12 }} - {{- end }} - {{- if .Values.server.securityContext.enabled }} - securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.server.securityContext "context" $) | nindent 12 }} - {{- end }} - {{- with $.Values.server.vmbackupmanager.livenessProbe }} - livenessProbe: {{- toYaml . | nindent 12 }} - {{- end }} - {{- with $.Values.server.vmbackupmanager.readinessProbe }} - readinessProbe: {{- toYaml . | nindent 12 }} - {{- end }} - {{- with .Values.server.vmbackupmanager.env }} - env: {{ toYaml . | nindent 12 }} - {{- end }} - ports: - - name: manager-http - containerPort: 8300 - volumeMounts: - - name: server-volume - mountPath: {{ .Values.server.persistentVolume.mountPath }} - subPath: {{ .Values.server.persistentVolume.subPath }} - {{- with .Values.server.vmbackupmanager.extraVolumeMounts }} - {{- toYaml . | nindent 12 }} - {{- end }} - {{- include "victoria-metrics.license.mount" . | nindent 12 }} - {{- end }} - {{- with .Values.server.extraContainers }} - {{- toYaml . | nindent 8 }} - {{- end }} - {{- if .Values.imagePullSecrets }} - imagePullSecrets: - {{ toYaml .Values.imagePullSecrets | indent 2 }} - {{- end }} - {{- if .Values.server.nodeSelector }} - nodeSelector: -{{ toYaml .Values.server.nodeSelector | indent 8 }} - {{- end }} - {{- if .Values.server.podSecurityContext.enabled }} - securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.server.podSecurityContext "context" $) | nindent 8 }} - {{- end }} - serviceAccountName: {{ template "victoria-metrics.serviceAccountName" . }} - {{- if .Values.server.tolerations }} - tolerations: -{{ toYaml .Values.server.tolerations | indent 8 }} - {{- end }} - {{- with .Values.server.affinity }} - affinity: {{ toYaml . | nindent 8 }} - {{- end }} - terminationGracePeriodSeconds: {{ .Values.server.terminationGracePeriodSeconds }} - volumes: - {{- if .Values.server.scrape.enabled }} - - name: scrapeconfig - configMap: - name: {{ include "victoria-metrics.server.scrape.configname" . }} - {{- end }} - {{- if not .Values.server.persistentVolume.enabled }} - - name: server-volume - emptyDir: {} - {{- else }} - {{- if .Values.server.persistentVolume.existingClaim }} - - name: server-volume - persistentVolumeClaim: - claimName: {{ .Values.server.persistentVolume.existingClaim }} - {{- end }} - {{- end }} - {{- with .Values.server.extraVolumes }} - {{- toYaml . | nindent 8 }} - {{- end }} - {{- include "victoria-metrics.license.volume" . | nindent 8 }} - {{- if and .Values.server.persistentVolume.enabled (not .Values.server.persistentVolume.existingClaim) }} - volumeClaimTemplates: - - apiVersion: v1 - kind: PersistentVolumeClaim - metadata: - name: server-volume - {{- if .Values.server.persistentVolume.annotations }} - annotations: -{{ toYaml .Values.server.persistentVolume.annotations | indent 10 }} - {{- end }} - spec: - accessModes: -{{ toYaml .Values.server.persistentVolume.accessModes | indent 10 }} - resources: - requests: - storage: "{{ .Values.server.persistentVolume.size }}" - {{- if .Values.server.persistentVolume.storageClass }} - {{- if (eq "-" .Values.server.persistentVolume.storageClass) }} - storageClassName: "" - {{- else }} - storageClassName: "{{ .Values.server.persistentVolume.storageClass }}" - {{- end }} - {{- end }} - {{- with .Values.server.persistentVolume.matchLabels }} - selector: - matchLabels: - {{- toYaml . | nindent 12 }} - {{- end }} -{{- end }} -{{- end }} diff --git a/helm-templates/victoria-metrics-single/templates/serviceaccount.yaml b/helm-templates/victoria-metrics-single/templates/serviceaccount.yaml deleted file mode 100644 index ebb6168..0000000 --- a/helm-templates/victoria-metrics-single/templates/serviceaccount.yaml +++ /dev/null @@ -1,16 +0,0 @@ -{{- if .Values.serviceAccount.create }} -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - {{- include "victoria-metrics.common.metaLabels" . | nindent 4 }} - {{- if .Values.serviceAccount.extraLabels }} -{{ toYaml .Values.serviceAccount.extraLabels | indent 4}} - {{- end }} -{{- with .Values.serviceAccount.annotations }} - annotations: -{{ toYaml . | indent 4 }} -{{- end }} - name: {{ template "victoria-metrics.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} -{{- end }} \ No newline at end of file diff --git a/helm-templates/victoria-metrics-single/values.yaml b/helm-templates/victoria-metrics-single/values.yaml deleted file mode 100644 index ca0a85e..0000000 --- a/helm-templates/victoria-metrics-single/values.yaml +++ /dev/null @@ -1,710 +0,0 @@ -# Default values for victoria-metrics. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. -global: - compatibility: - openshift: - adaptSecurityContext: "auto" - -rbac: - create: true - # Note: The PSP will only be deployed, if Kubernetes (<1.25) supports the resource. - pspEnabled: true - namespaced: false - extraLabels: {} - # annotations: {} - -# -- Print chart notes -printNotes: true - -serviceAccount: - # -- Create service account. - create: true - # name: - extraLabels: {} - # annotations: {} - # -- Mount API token to pod directly - automountToken: true - -automountServiceAccountToken: true - -podDisruptionBudget: - # -- See `kubectl explain poddisruptionbudget.spec` for more. Ref: [https://kubernetes.io/docs/tasks/run-application/configure-pdb/](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) - enabled: false - # minAvailable: 1 - # maxUnavailable: 1 - extraLabels: {} - -server: - # -- Enable deployment of server component. Deployed as StatefulSet - enabled: true - # -- Server container name - name: server - image: - # -- Image repository - repository: victoriametrics/victoria-metrics - # -- Image tag - tag: "" # rewrites Chart.AppVersion - # Variant of the image tag to use. - # e.g. enterprise. - variant: "" - # -- Image pull policy - pullPolicy: IfNotPresent - # -- Name of Priority Class - priorityClassName: "" - # -- Overrides the full name of server component - fullnameOverride: - # -- Data retention period in month - retentionPeriod: 1 - # Extra command line arguments for container of component - extraArgs: - envflag.enable: "true" - envflag.prefix: VM_ - loggerFormat: json - - # Additional hostPath mounts - extraHostPathMounts: - [] - #- name: certs-dir - # mountPath: /etc/kubernetes/certs - # subPath: "" - # hostPath: /etc/kubernetes/certs - # readOnly: true - - # Extra Volumes for the pod - extraVolumes: - [] - #- name: example - # configMap: - # name: example - - # Extra Volume Mounts for the container - extraVolumeMounts: - [] - # - name: example - # mountPath: /example - - extraContainers: - [] - #- name: config-reloader - # image: reloader-image - - initContainers: - [] - # - name: vmrestore - # image: victoriametrics/vmrestore:latest - # volumeMounts: - # - mountPath: /storage - # name: vmstorage-volume - # - mountPath: /etc/vm/creds - # name: secret-remote-storage-keys - # readOnly: true - # args: - # - -storageDataPath=/storage - # - -src=s3://your_bucket/folder/latest - # - -credsFilePath=/etc/vm/creds/credentials - - # -- Node tolerations for server scheduling to nodes with taints. Ref: [https://kubernetes.io/docs/concepts/configuration/assign-pod-node/](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/) - tolerations: - [] - # - key: "key" - # operator: "Equal|Exists" - # value: "value" - # effect: "NoSchedule|PreferNoSchedule" - - # -- Pod's node selector. Ref: [https://kubernetes.io/docs/user-guide/node-selection/](https://kubernetes.io/docs/user-guide/node-selection/) - nodeSelector: {} - - # -- Pod affinity - affinity: {} - - # -- Env variables - # -- Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables - env: [] - - envFrom: [] - #- configMapRef: - # name: special-config - - # -- Container workdir - containerWorkingDir: "" - - ## Use an alternate scheduler, e.g. "stork". - ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ - ## - # schedulerName: - - persistentVolume: - # -- Create/use Persistent Volume Claim for server component. Empty dir if false - enabled: true - - # -- Array of access modes. Must match those of existing PV or dynamic provisioner. Ref: [http://kubernetes.io/docs/user-guide/persistent-volumes/](http://kubernetes.io/docs/user-guide/persistent-volumes/) - accessModes: - - ReadWriteOnce - # -- Persistant volume annotations - annotations: {} - - # -- StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically - storageClass: "" - - # -- Existing Claim name. If defined, PVC must be created manually before volume will be bound - existingClaim: "" - - # -- Bind Persistent Volume by labels. Must match all labels of targeted PV. - matchLabels: {} - - # -- Mount path. Server data Persistent Volume mount root path. - mountPath: /storage - # -- Mount subpath - subPath: "" - # -- Size of the volume. Should be calculated based on the metrics you send and retention policy you set. - size: 16Gi - - # -- Sts/Deploy additional labels - extraLabels: {} - # -- Pod's additional labels - podLabels: {} - # -- Pod's annotations - podAnnotations: {} - # -- Pod's management policy - podManagementPolicy: OrderedReady - - # -- Resource object. Ref: [http://kubernetes.io/docs/user-guide/compute-resources/](http://kubernetes.io/docs/user-guide/compute-resources/ - resources: - {} - # limits: - # cpu: 500m - # memory: 512Mi - # requests: - # cpu: 500m - # memory: 512Mi - - # Indicates whether the Container is ready to service requests. If the readiness probe fails, the endpoints controller removes the Pod's IP address from the endpoints of all Services that match the Pod. The default state of readiness before the initial delay is Failure. If a Container does not provide a readiness probe, the default state is Success. - readinessProbe: - httpGet: - path: /health - port: http - initialDelaySeconds: 5 - periodSeconds: 15 - timeoutSeconds: 5 - failureThreshold: 3 - - # Indicates whether the Container is running. If the liveness probe fails, the kubelet kills the Container, and the Container is subjected to its restart policy. If a Container does not provide a liveness probe, the default state is Success. - livenessProbe: - httpGet: - scheme: HTTP - path: /health - port: 8428 - initialDelaySeconds: 30 - periodSeconds: 30 - timeoutSeconds: 5 - failureThreshold: 10 - - # Indicates whether the Container is done with potentially costly initialization. If set it is executed first. If it fails Container is restarted. If it succeeds liveness and readiness probes takes over. - startupProbe: {} - #tcpSocket: - # port: http - #failureThreshold: 30 - #periodSeconds: 15 - #successThreshold: 1 - #timeoutSeconds: 5 - - # -- Security context to be added to server pods - securityContext: - enabled: true - # -- Pod's security context. Ref: [https://kubernetes.io/docs/tasks/configure-pod-container/security-context/](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) - podSecurityContext: - enabled: true - ingress: - # -- Enable deployment of ingress for server component - enabled: false - # -- Ingress annotations - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: 'true' - - # -- Ingress extra labels - extraLabels: {} - # -- Array of host objects - hosts: [] - # - name: vmselect.local - # path: /select - # port: http - - # -- Array of TLS objects - tls: [] - # - secretName: vmselect-ingress-tls - # hosts: - # - vmselect.local - # For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName - # See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress - # ingressClassName: nginx - # -- pathType is only for k8s >= 1.1= - pathType: Prefix - - vmbackupmanager: - # -- enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages - enable: false - # -- should be true and means that you have the legal right to run a backup manager - # that can either be a signed contract or an email with confirmation to run the service in a trial period - # # https://victoriametrics.com/legal/esa/ - eula: false - image: - # -- vmbackupmanager image repository - repository: victoriametrics/vmbackupmanager - # -- vmbackupmanager image tag - tag: v1.101.0-enterprise - # Variant of the image tag to use. - # e.g. enterprise. - variant: "" - # -- disable hourly backups - disableHourly: false - # -- disable daily backups - disableDaily: false - # -- disable weekly backups - disableWeekly: false - # -- disable monthly backups - disableMonthly: false - # -- backup destination at S3, GCS or local filesystem. Release name will be included to path! - destination: "" - # -- backups' retention settings - retention: - # -- keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off - keepLastHourly: 2 - # -- keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off - keepLastDaily: 2 - # -- keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off - keepLastWeekly: 2 - # -- keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off - keepLastMonthly: 2 - extraArgs: - envflag.enable: "true" - envflag.prefix: VM_ - loggerFormat: json - # Extra Volume Mounts for the container - extraVolumeMounts: - [] - # - name: example - # mountPath: /example - # -- Allows to enable restore options for pod. - # Read more: https://docs.victoriametrics.com/vmbackupmanager.html#restore-commands - restore: - onStart: - enabled: false - resources: {} - # -- Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables - env: [] - readinessProbe: - httpGet: - path: /health - port: manager-http - initialDelaySeconds: 5 - periodSeconds: 15 - timeoutSeconds: 5 - failureThreshold: 3 - livenessProbe: - tcpSocket: - port: manager-http - initialDelaySeconds: 30 - periodSeconds: 30 - timeoutSeconds: 5 - failureThreshold: 10 - service: - # -- Service annotations - annotations: {} - # -- Service labels - labels: {} - # -- Service ClusterIP - clusterIP: "" - # -- Service External IPs. Ref: [https://kubernetes.io/docs/user-guide/services/#external-ips]( https://kubernetes.io/docs/user-guide/services/#external-ips) - externalIPs: [] - # -- Service load balacner IP - loadBalancerIP: "" - # -- Load balancer source range - loadBalancerSourceRanges: [] - # -- Service port - servicePort: 8428 - # -- Node port - # nodePort: 30000 - # -- Service type - type: ClusterIP - # Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip - # externalTrafficPolicy: "local" - # healthCheckNodePort: 0 - - statefulSet: - # -- Creates statefulset instead of deployment, useful when you want to keep the cache - enabled: true - # -- Deploy order policy for StatefulSet pods - podManagementPolicy: OrderedReady - # Headless service for statefulset - service: - # -- Headless service annotations - annotations: {} - # -- Headless service labels - labels: {} - # -- Headless service port - servicePort: 8428 - # Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip - # externalTrafficPolicy: "local" - # healthCheckNodePort: 0 - # -- Pod's termination grace period in seconds - terminationGracePeriodSeconds: 60 - serviceMonitor: - # -- Enable deployment of Service Monitor for server component. This is Prometheus operator object - enabled: false - # -- Service Monitor labels - extraLabels: {} - # -- Service Monitor annotations - annotations: {} - # -- Commented. Prometheus scrape interval for server component -# interval: 15s - # -- Commented. Prometheus pre-scrape timeout for server component -# scrapeTimeout: 5s - # -- Commented. HTTP scheme to use for scraping. -# scheme: https - # -- Commented. TLS configuration to use when scraping the endpoint -# tlsConfig: -# insecureSkipVerify: true - # -- Service Monitor relabelings - relabelings: [] - # -- Service Monitor metricRelabelings - metricRelabelings: [] - - # -- Scrape configuration for victoriametrics - scrape: - # -- If true scrapes targets, creates config map or use specified one with scrape targets - enabled: false - # -- Use existing configmap if specified - # otherwise .config values will be used - configMap: "" - # -- Scrape config - config: - global: - scrape_interval: 15s - - # -- Scrape targets - scrape_configs: - # -- Scrape rule for scrape victoriametrics - - job_name: victoriametrics - static_configs: - - targets: [ "localhost:8428" ] - - ## COPY from Prometheus helm chart https://github.com/helm/charts/blob/master/stable/prometheus/values.yaml - - # -- Scrape config for API servers. - # - # Kubernetes exposes API servers as endpoints to the default/kubernetes - # service so this uses `endpoints` role and uses relabelling to only keep - # the endpoints associated with the default/kubernetes service using the - # default named port `https`. This works for single API server deployments as - # well as HA API server deployments. - - job_name: "kubernetes-apiservers" - kubernetes_sd_configs: - - role: endpoints - # Default to scraping over https. If required, just disable this or change to - # `http`. - scheme: https - # This TLS & bearer token file config is used to connect to the actual scrape - # endpoints for cluster components. This is separate to discovery auth - # configuration because discovery & scraping are two separate concerns in - # Prometheus. The discovery auth config is automatic if Prometheus runs inside - # the cluster. Otherwise, more config options have to be provided within the - # . - tls_config: - ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt - # If your node certificates are self-signed or use a different CA to the - # master CA, then you need to disable certificate verification. Note that - # certificate verification is an integral part of a secure infrastructure - # so this should only be disabled in a controlled environment. You can - # enable certificate verification by commenting the line below. - # - insecure_skip_verify: true - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token - # Keep only the default/kubernetes service endpoints for the https port. This - # will add targets for each API server which Kubernetes adds an endpoint to - # the default/kubernetes service. - relabel_configs: - - source_labels: - [ - __meta_kubernetes_namespace, - __meta_kubernetes_service_name, - __meta_kubernetes_endpoint_port_name, - ] - action: keep - regex: default;kubernetes;https - # -- Scrape rule using kubernetes service discovery for nodes - - job_name: "kubernetes-nodes" - # Default to scraping over https. If required, just disable this or change to - # `http`. - scheme: https - # This TLS & bearer token file config is used to connect to the actual scrape - # endpoints for cluster components. This is separate to discovery auth - # configuration because discovery & scraping are two separate concerns in - # Prometheus. The discovery auth config is automatic if Prometheus runs inside - # the cluster. Otherwise, more config options have to be provided within the - # . - tls_config: - ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt - # If your node certificates are self-signed or use a different CA to the - # master CA, then you need to disable certificate verification. Note that - # certificate verification is an integral part of a secure infrastructure - # so this should only be disabled in a controlled environment. You can - # enable certificate verification by commenting the line below. - # - insecure_skip_verify: true - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token - kubernetes_sd_configs: - - role: node - relabel_configs: - - action: labelmap - regex: __meta_kubernetes_node_label_(.+) - - target_label: __address__ - replacement: kubernetes.default.svc:443 - - source_labels: [ __meta_kubernetes_node_name ] - regex: (.+) - target_label: __metrics_path__ - replacement: /api/v1/nodes/$1/proxy/metrics - # -- Scrape rule using kubernetes service discovery for cadvisor - - job_name: "kubernetes-nodes-cadvisor" - # Default to scraping over https. If required, just disable this or change to - # `http`. - scheme: https - # This TLS & bearer token file config is used to connect to the actual scrape - # endpoints for cluster components. This is separate to discovery auth - # configuration because discovery & scraping are two separate concerns in - # Prometheus. The discovery auth config is automatic if Prometheus runs inside - # the cluster. Otherwise, more config options have to be provided within the - # . - tls_config: - ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt - # If your node certificates are self-signed or use a different CA to the - # master CA, then you need to disable certificate verification. Note that - # certificate verification is an integral part of a secure infrastructure - # so this should only be disabled in a controlled environment. You can - # enable certificate verification by commenting the line below. - # - insecure_skip_verify: true - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token - kubernetes_sd_configs: - - role: node - # This configuration will work only on kubelet 1.7.3+ - # As the scrape endpoints for cAdvisor have changed - # if you are using older version you need to change the replacement to - # replacement: /api/v1/nodes/$1:4194/proxy/metrics - # more info here https://github.com/coreos/prometheus-operator/issues/633 - relabel_configs: - - action: labelmap - regex: __meta_kubernetes_node_label_(.+) - - target_label: __address__ - replacement: kubernetes.default.svc:443 - - source_labels: [ __meta_kubernetes_node_name ] - regex: (.+) - target_label: __metrics_path__ - replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor - # ignore timestamps of cadvisor's metrics by default - # more info here https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4697#issuecomment-1656540535 - honor_timestamps: false - # -- Scrape config for service endpoints. - # - # The relabeling allows the actual service scrape endpoint to be configured - # via the following annotations: - # - # * `prometheus.io/scrape`: Only scrape services that have a value of `true` - # * `prometheus.io/scheme`: If the metrics endpoint is secured then you will need - # to set this to `https` & most likely set the `tls_config` of the scrape config. - # * `prometheus.io/path`: If the metrics path is not `/metrics` override this. - # * `prometheus.io/port`: If the metrics are exposed on a different port to the - # service then set this appropriately. - # -- Scrape rule using kubernetes service discovery for endpoints - - job_name: "kubernetes-service-endpoints" - kubernetes_sd_configs: - - role: endpoints - relabel_configs: - - action: drop - source_labels: [ __meta_kubernetes_pod_container_init ] - regex: true - - action: keep_if_equal - source_labels: [ __meta_kubernetes_service_annotation_prometheus_io_port, __meta_kubernetes_pod_container_port_number ] - - source_labels: - [ __meta_kubernetes_service_annotation_prometheus_io_scrape ] - action: keep - regex: true - - source_labels: - [ __meta_kubernetes_service_annotation_prometheus_io_scheme ] - action: replace - target_label: __scheme__ - regex: (https?) - - source_labels: - [ __meta_kubernetes_service_annotation_prometheus_io_path ] - action: replace - target_label: __metrics_path__ - regex: (.+) - - source_labels: - [ - __address__, - __meta_kubernetes_service_annotation_prometheus_io_port, - ] - action: replace - target_label: __address__ - regex: ([^:]+)(?::\d+)?;(\d+) - replacement: $1:$2 - - action: labelmap - regex: __meta_kubernetes_service_label_(.+) - - source_labels: [ __meta_kubernetes_namespace ] - action: replace - target_label: kubernetes_namespace - - source_labels: [ __meta_kubernetes_service_name ] - action: replace - target_label: kubernetes_name - - source_labels: [ __meta_kubernetes_pod_node_name ] - action: replace - target_label: kubernetes_node - # -- Scrape config for slow service endpoints; same as above, but with a larger - # timeout and a larger interval - # - # The relabeling allows the actual service scrape endpoint to be configured - # via the following annotations: - # - # * `prometheus.io/scrape-slow`: Only scrape services that have a value of `true` - # * `prometheus.io/scheme`: If the metrics endpoint is secured then you will need - # to set this to `https` & most likely set the `tls_config` of the scrape config. - # * `prometheus.io/path`: If the metrics path is not `/metrics` override this. - # * `prometheus.io/port`: If the metrics are exposed on a different port to the - # service then set this appropriately. - - job_name: "kubernetes-service-endpoints-slow" - scrape_interval: 5m - scrape_timeout: 30s - kubernetes_sd_configs: - - role: endpoints - relabel_configs: - - action: drop - source_labels: [ __meta_kubernetes_pod_container_init ] - regex: true - - action: keep_if_equal - source_labels: [ __meta_kubernetes_service_annotation_prometheus_io_port, __meta_kubernetes_pod_container_port_number ] - - source_labels: - [ __meta_kubernetes_service_annotation_prometheus_io_scrape_slow ] - action: keep - regex: true - - source_labels: - [ __meta_kubernetes_service_annotation_prometheus_io_scheme ] - action: replace - target_label: __scheme__ - regex: (https?) - - source_labels: - [ __meta_kubernetes_service_annotation_prometheus_io_path ] - action: replace - target_label: __metrics_path__ - regex: (.+) - - source_labels: - [ - __address__, - __meta_kubernetes_service_annotation_prometheus_io_port, - ] - action: replace - target_label: __address__ - regex: ([^:]+)(?::\d+)?;(\d+) - replacement: $1:$2 - - action: labelmap - regex: __meta_kubernetes_service_label_(.+) - - source_labels: [ __meta_kubernetes_namespace ] - action: replace - target_label: kubernetes_namespace - - source_labels: [ __meta_kubernetes_service_name ] - action: replace - target_label: kubernetes_name - - source_labels: [ __meta_kubernetes_pod_node_name ] - action: replace - target_label: kubernetes_node - # -- Example scrape config for probing services via the Blackbox Exporter. - # - # The relabeling allows the actual service scrape endpoint to be configured - # via the following annotations: - # - # * `prometheus.io/probe`: Only probe services that have a value of `true` - - job_name: "kubernetes-services" - metrics_path: /probe - params: - module: [ http_2xx ] - kubernetes_sd_configs: - - role: service - relabel_configs: - - source_labels: - [ __meta_kubernetes_service_annotation_prometheus_io_probe ] - action: keep - regex: true - - source_labels: [ __address__ ] - target_label: __param_target - - target_label: __address__ - replacement: blackbox - - source_labels: [ __param_target ] - target_label: instance - - action: labelmap - regex: __meta_kubernetes_service_label_(.+) - - source_labels: [ __meta_kubernetes_namespace ] - target_label: kubernetes_namespace - - source_labels: [ __meta_kubernetes_service_name ] - target_label: kubernetes_name - # -- Example scrape config for pods - # - # The relabeling allows the actual pod scrape endpoint to be configured via the - # following annotations: - # - # * `prometheus.io/scrape`: Only scrape pods that have a value of `true` - # * `prometheus.io/path`: If the metrics path is not `/metrics` override this. - # * `prometheus.io/port`: Scrape the pod on the indicated port instead of the default of `9102`. - - job_name: "kubernetes-pods" - kubernetes_sd_configs: - - role: pod - relabel_configs: - - action: drop - source_labels: [ __meta_kubernetes_pod_container_init ] - regex: true - - action: keep_if_equal - source_labels: [ __meta_kubernetes_pod_annotation_prometheus_io_port, __meta_kubernetes_pod_container_port_number ] - - source_labels: [ __meta_kubernetes_pod_annotation_prometheus_io_scrape ] - action: keep - regex: true - - source_labels: [ __meta_kubernetes_pod_annotation_prometheus_io_path ] - action: replace - target_label: __metrics_path__ - regex: (.+) - - source_labels: - [ __address__, __meta_kubernetes_pod_annotation_prometheus_io_port ] - action: replace - regex: ([^:]+)(?::\d+)?;(\d+) - replacement: $1:$2 - target_label: __address__ - - action: labelmap - regex: __meta_kubernetes_pod_label_(.+) - - source_labels: [ __meta_kubernetes_namespace ] - action: replace - target_label: kubernetes_namespace - - source_labels: [ __meta_kubernetes_pod_name ] - action: replace - target_label: kubernetes_pod_name - ## End of COPY - - # -- Extra scrape configs that will be appended to `server.scrape.config` - extraScrapeConfigs: [] - -# -- Add extra specs dynamically to this chart -extraObjects: [] - -# -- Enterprise license key configuration for VictoriaMetrics enterprise. -# Required only for VictoriaMetrics enterprise. -# Documentation - https://docs.victoriametrics.com/enterprise.html, -# for more information, visit https://victoriametrics.com/products/enterprise/ . -# To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ -# Supported starting from VictoriaMetrics v1.94.0 -license: - # -- License key - key: "" - - # -- Use existing secret with license key - secret: - # -- Existing secret name - name: "" - # -- Key in secret with license key - key: "" diff --git a/helm-templates/vmagent/Chart.lock b/helm-templates/vmagent/Chart.lock new file mode 100644 index 0000000..d701a2f --- /dev/null +++ b/helm-templates/vmagent/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: victoria-metrics-agent + repository: https://victoriametrics.github.io/helm-charts + version: 0.46.0 +digest: sha256:83bcccc6caa7dafc428ba1189bb9f6943d829ec9bbc7c7954a9186809a409579 +generated: "2026-09-06T08:29:36.022454+05:30" diff --git a/helm-templates/vmagent/Chart.yaml b/helm-templates/vmagent/Chart.yaml new file mode 100644 index 0000000..7fc570a --- /dev/null +++ b/helm-templates/vmagent/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v2 +name: vmagent +version: 1.0.0 +dependencies: + - name: victoria-metrics-agent + version: 0.46.0 + repository: https://victoriametrics.github.io/helm-charts diff --git a/helm-templates/vmagent/charts/victoria-metrics-agent-0.46.0.tgz b/helm-templates/vmagent/charts/victoria-metrics-agent-0.46.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..26f904f37c75cf0d80ffbe919091ae5b5ca4ceb3 GIT binary patch literal 20975 zcmV)^K!Cp=iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0POwidK)*gC=9RPeHB=gJrO--^PqzruI)8jk?q7gv8~T?JkQ!$ z*%H_dk{C4`9RN*P2YGOsGKnQ+sTcUN)@4`vtGhxGn&pCO3!gRBVvqx4-i7AhbH+VLrcO1Whr7)^x-v%*dk*oNu@xN zp*-=9$c7qLbEgQ3mWnlx*_IY|f>MD!(|^(~}s9j}B&Bo$C9_lGxkTE)CIgf~dcL?P?8KVvGoRehHi_{7deaQ*wFR+k=_sy&3 zC0A+}mY+bJWUQ%e3&8*g4K9?Gnl3?n&Z5R{#4HkF6`tx;rnMW!G%1+K*BL6&m0K$Er0=1UslQvFJ#lh<+f+0>KyuP!1*w#VpDf zB-LvPQGxIh(*#cvf_|A3P6`UY*0^*-+m^;&wQw77i{a>o0nX?Ly;{d;ISO!=6+g}L z3SyFxG$v_8i5LfVernJowpg$6DgjR3-`{&O8ay5B{Y5+*4F-Q&KHCp2$kip|F$`>F zc+?xc1cM&3|C7JGPU&5k`TWDjA{x{e=+^^|>2ZMY4?=GG%!p?^WK}=^v$T1RgJUTcWfBSTQ ze-t0!;kQpFc=$A)PQTs%b`m{}_lHjp_9mmjx1;^h({H2cXn$|-2|kDp4x)p@!^0Tw z4Gy1ti-Q?S3CEJeW7HW9Mu)w@lipzTemETO561_?a5Neo?mZbE?Eml1JrnVsmi52H zNlwHq8Gx(T|C7D_VRii<4o3I(-<>===sB6% z=ML)i&?}|ppe#=kBuK=G6pxXdV~HZ1Do|pMIf)UDI1>Ub@Z|`0&-S49W0~kxH zl`-{pN@qFO+72pz)p#-sYi#Tu9OF!$8o0+A>=<=$E?LJE0VIxc$rdb6C7^R^&;cC} z2|7z@Izz`tdP?M+pp3<~1zYn}7eCddkB_`&q9j*Ftv8lGJ{9&YirE6w6p4H~r5_)o zTo}rlR7!QqoFBynvsZ3uhhVy zgic9x6(uBae|aE(76joG;Y1RiVo8vQ<|NJ&!XG0N&O+2tlW@@q(ea!_7brHve}kd7 zYx%6D4Y6jeoH=t&8ItJAbueAxcU@;k^7?TA{Pl2qQU33`pP~;ER9GeMgNlVi-h4AUP-PjDlYmO2SH@Niv$cgjS8j~I20BA ztMA^pYa|?MH^Ra}X+gt%cX$-*u|NR{sdS^+m7VJKQ@lB1I~I5sR=A-eK*N493k48U z5NJC4Ig7D0oEYsOw7?%vb3P+uG&*?bzx_FNj+D|jZ7aU>q50!~S`f=k`e|vdl@L6l zbOJ2mL@hVV3)$3K?xJP|8 zY<==19NmhqRRQW2V&FBb$0<$(v7=zv7r4WwSV7aeh3*2PsT&}*n6+tPE4+mAis{v; z+M8IE!?fQ%b^EivqZ{d&Mko;_I@fMFUFNh#?rn7H)Q|=xBxqJCY$0oYRcx^qN-5Wt zc=i|xB9&}9*Czgv^YNXd$rXyVG8iCLRyD6yEV<-V5`n5UEbtF%HKbAzy3!-4Zi^|Y zuf-}z89GXs+x+UANv-(El=)&`5Pv{W^gkWAtkJhRG97gzBGGx0Zx+ z8WW2?C|j7Oge!$=fzvnyX?Qs&DWF(&AWmqC`Bm9#izUKH>k%l!avm5^ph*TTnrhIf zck0qdajaAWst6n>==qydH71;D9a$+tXwHNbT9>x8%%)QsQJj<=%o~X3lt@M0ecc86 zchUpsJq2AU?mg9FzZWsE24aM#FDM;qdTjI1GpCB?9b};1*;3TNRW< z$dG)*i!33EkrZEW%H*7I_c0|_O1tR-EgD=7;8C>iJ;lHkb!rrv=1Bro>>mx)j@|sL zAyE2eOgT78uL4IKf7PF!Q$9wWekTa{1V?UBzDTwC@{T2>um1Utrl7e3cQ@KPF#0i) zJSTyzSgYV|u?5KgrFDk3Y6<9=4H~CgCsSw`{MqLU_mBY2@%dwPNt48=M+nzp(^N=; zW3^&2I@W9$3VDBgYG9;YtCIK@V3;z5=mfCJc!8a{@iK?5v84 z&)8l~QOYE+R5c4m@KXUeJw{jqq5?Vh6v~B~00r36uQP?sP`iQA#@o@!Dsy%jZLK~tm^9EDm&c%(3y!Sn#n^iB4> zP!5RAFxWvaa5P6$l7%H3Be&3b&XaSLVUA(rGQ&bBpfm=I!@xt%$n##YRX*ti1bpPp~umA23`Wa^n#eQ=EGCb$WI|3tk44twvzlU(7cVRCG$*j0Ho2zGb$bTW} z@>lnflNtFqMxB@}J2iZYcH0rsGw{Rv_a`t+BvqUp$fM*y3t>InXg_>M)$Zv=dbW|0 zz7J>zMQDQh4cb1;>==!o?vK8O7a6Autdw()En80q$VRK3qJ*XdVLk&kD+28&;xnNa z&{7eY5$;ah+1D8-Q~Gg?KD<6tB+q6u!e4@0c8vZejFPUE8T9I8d5A=wWsFPEh^Ki1 zo#T0$YP|r;^jMl)p&uPLu$G$8+B^Vze|&Q2$zC;CV3d+jney=0DgC=r%7%weo;(>1 z4+kBsH~gHcZmU6nop|HV(jG`I5uKtdmZM9oWvxLM;q=N%(Q=vn(f+7h zrs=yg5v)E%(k10Ag>fpJ>AU1(I5x(H)(XU9&40Q#^)2jpE%scC-9j^PD}ba+HS(4d zn|1Kv^_j6r`5N9eOm{@M6up>oGfq%h)fl5bk&&lM^r5IJCi00cWbA$9nqOUy6CA%ylQJ{a z!|{P7`NG&9b{_-!U_LY;Z){Qn+f92xd*x#F){q_-*QPTn{gzwDuH1ZS>k%g*w3#(Xhj(9Iqv3BxhrMmlR(6tZu7@H+^snntDHzUROTXiBBm z+PYqvcFarLj8S4Mdt`dc&~2lr3C&ns-SYC4ODBh>;(N~WY>Y;O!C-Uv-w3apf!L&_ z2xmH^iV|T7C+5r%Q4byc^b`DTY4;st@+D1(xDt{qJWxDOkHj06ssh#5KMTUgXb8PA ztGeQ&(9vLS$+xN8r`C>L>5ixrZgoOb${D}GtCPYd{OZJa>e+(iBe3QKy*g?0hHqj2C{;l*Q)7-ayTLrKYkN0%V-a{@|BNy*fctyr9XIaireTfX6vb zdP3spqQ7Im*PP-sdkIZjudO$H#?TQJEGfAyir5B0+B`LmP9?|FDUG%sL9<61MMMbS z8&d3*g0raSh*l9!&r(%?C*!blP19LV&PgvysM5y7f`F9i!p(jgO*3EZY-k@2Aos>CXhXGN$<;p8lrHKA4PAS+&=%%*p$7{D|}a;qpS zN^d00isHmmx7&r9D*ru}Il5lPj{xSmQ7DlaV4Oc*6th%riMH2v6EP$r^>Bc<+sqx80Kf@<4qNv@HIEZrG8 za)WBZbF~VtBbUrbmWR8C`pA9&=3~56wZ`86bn3MwlVa`_5N&n8@f+=#q3Ov)ICIJ2 zxZ~O{<5(S)Vz(W^5bI4q=LbGk?}`|qN@dkms{yIM-)q{^bY;V-j9RAqc5SbB$-UTL z;1thD&+SF_3Y($d4cu!r5QeV)N>DCxoFrF>6YchjVarG|=lODLiufl~Btr?oOM;~0 z2v{I61VuzyuE#x^Gin?g$^y*=;f8(SL@-2CCDH^DD4HuFCQQsC7?3RW{Y%DIolq%_ zx#m!Lj6@#IRr9ZDO4Ue(=#_TR#jNnrnVxvna_8iOtuB@%>{9P0?tr&bJVrSFTP~zN zfrAA~i4xA3UpKhxkIXLhH3{+5ptbD!xK8_B-Q<{w3 zcIsmx=q&AJEbggB`a9}h+fp}BzfR3B4=bhFAjuNKy}cA2ZHbCjRObMkCNi~Lq`0N^ zSjD>=c<6YM7bi@OamErhyE@I3IeyGiAvxd@w0Cu6J-wZ z2@~L2aZvc*iU^JqPMP-EfOs&g1?Ib0a2bntMK{Py*|OBoH0o{S|MD(RC0!6GwlTR` z{?2vf9^ljO0_N5qXK=A$wX-D^jCTU=wO0vvHM)(e2;$yo>=2A&wj*7vh2CI(b80L# z>*o!t(Fa~#r9m34=&_YAFo?!g@RD*N|4QZj2VEx&cF_N{a;Vo+c*d#lj56zbdaVx` zuGZ14sc8!Pe8C<6E;QW}M_!0!YVk5|r1n}@mTh2DFO@C7l?%*P;(9lfrZWMtckY+3 zEq{jvjbO(@@6c+dSOFCv)-~bg6-AqppOu%fV0)L`M#)VkMgwtoIqbkVZj3IyrYEvL%*vW>W~yS65bx}H{5^izGT3NTm_qmvJz^}EzIczV{zsbSt34Oi8&bS4c6YVx`^Jkk`NrX(&!u?!`iGMv_^1zx6w#48?(m2{LDM-h z$1A}F(K!FkwbcOLj$F9`XT_YD&6vVd*DF41S^3SQZ#*~Nf~H4F!Y)bdJNN3&5>vY7 zWHImY#}!Z-K^zPQB@oVE7{7ClAM{Hn%JR-*)X}v%zgDbdtz%Zs*hZdGR~RtHIyI5l z+EJAY@;*xnk|~ZUBLn)((`yGpv3B!bgLBgRZ)|c_^4uENtWd%%Dwj6LDl|V+eFO)p zvh5(SP<7HAE!siHZ%_V9=eY5VsN#HbQ~DK%eKZN8CJCF^+*CrUaqwa;{S*MMNp$KD zDUjaL$t$D5nX^y`?YQDz2qF2HF=dE&;kXzU zhlx!S0D{H{cczemE`q|uwG4?LBXH~*%SO)?94o*n91L?XVR+6h*;Fk#T?R%@8F7C? z6M{J?85bmlLsFIwH7$VV60tNTk+jr=BbnpGEK3Kom~=H6_84N3nyzq82%^k*tyR0k zNMPSPU}bY}LL#i>aZ&hB#ds+*L0+-~Dp&+O6^Nz|Ua^!zIEzwl*6Xq}e3U`wF#w(e zKtW?tB6TaE(Oc`4d#nRH4M>)0H|`vE9dym*=Qu9Xb^FGhhzBx5lF_z2{GY4+^5e_3R9h4oj0l~FHJW|@gltvJluLf9e93L6l@BnHah>njQs}CtyDJjteWvSR}2Q8KPZz2f7Lfi2mwv~o? zOF`G3ah#w`v1vGkrJW0irc;iE?&D~gp3$a&n@xywALy9CLQMMmJ0bcnmZJ!# z9ypS&?3J=Z%m$A2jzEn1ge2@TEa14mtas#0T+r-n>H9}?0lj$7VDVmy44`HqSqRDW zAgtlj<+TnDSH)k97fY@4g4rtL4UUXy>8pc=aWwaNueO3b!G_})=F~RiGq}~b*>N<2 zs)-wyk5#x2>iMPg3!$^K1(Ep7Tb1tI-s81J4MtF9eQDd(Gc||}b$<1Jl}?Kkug#GV zGdTZI0RNAI{kKUq*iP!)OQw6tbT66iCDYd>nKsm~Q|6Yy3hr-tClpxV2L9Q=^jU1= z#o2E7=k9t&+KX^(HZ1Qs>ODuj=cxA_^$*Tb4I?QpR#5ICHUfr|r2se~5)H#A;ohHJ z-6Nqr(c05hVIN1DRqA!4nOy8@nv<)FFtvAxB{AVH0lrUZmOsuRrB8w*qGRO>e(Aj) zqdv}Pe>v;}!|p#Aj`xS(?)Nj!K3?^0HfKlROp_KvbHYiJ4=`e!FyZ<7dN%N)Pld>d z=pXLw8F&WzS*FjYxh(2NX55_&g8`nUs&kOFTH-|pyI~fUZ;G_vrKpBYM`c|GEHgCw zhu=Qgfxpd~=?xDL4iEMR2YUymwK+=}KP#{-T*%EX)S9WP7u`-^iJ5reCI}}9yA&mf zXZ@mOk~MtYW#5Pmyd}lupiES`1fppA5jroZ1lB1uaXv@;?GIghO1fwbxa`|+3ca7+XZqC`VxdtD6HB+GA`>N6$jD&a@bq< zMH;x3J)u^3#ifbBF#*F_##zQGmL$2d&977j4V<2%!t1(>6IxuEu>oU$|@@u5Tk=T?Q$k+86PZ9loN*{@t3?5V!r>x6$uop3vq5N5jLe0Y@@n1e<6i?q?* zdjoN=Oa8HS$ul+c_X_3B@V-|l?-k0X{@yE;|MCju3!N9Mtaa!!9Gp$y#uTejS%vMp z1VRS)zFstqz~j3+;G9-TqzsBD87F- z`uOqJ?Ua-RI@we?q3n7T**aPEVg408H?Al2Fnx-%v;-0DAI6mXE}a8Ys?t@=A^ehu0qoo z_ESx`x0hDmi~Iw$za0)n=bPAEs_R>N-V62NpT|T}t=@%sv~}CJ>RR8v=U;;b;hPLC zv#@gNHtWDGsQa7P71t9Qs*m^Pz|Do+?WxdkAnHX5%=h^1$$ynICj0WxNEUlk7iXC} z_j+!8fI641=K05lm%=eh(7ndRQ9K;e6jD+dJ(JrvddVow@_QoPg;0unQk*;|3BEcd z5ldq+MmlUDBb-8xTm5o)P#jWRl2RLqd7+z-QFh9ri|aRntnay0*50+nWuCc~h5lVm zBW*IAiHt8tXg)LWftOphhjX97)p#S825)4BCsSc}b34%2bgI+ulUPr_((T~DVRhV= z!|>bva1fY=#|8De*$Pb3cJC1U&wdsmlhxkjBJ->1FWx0^FDi9RItni#g)90axk5Bu z0ldKKOW(!&C7zaRFx>6D{j)hqGQveDv+G_3z2^S+gW=wweE;)kFgzIE-~W6U&!s$<7a3$oRehH4b7Y1o$X`a6t(CS zL8=>DJ@jskFvWDiDW(bPoWQ-47Dp_R`YjPl3GyoX=#n({kvvoQ2_j85I^InsT6}a+ z$K;hW#;Ex(yjmokRgnB^faD^3jwL?9a<1T+pQY;j@|7eD7%sT$r}zZ9!_fo!SQS#= z*9{HTnZF+J%P{AO`{a$=ZpLXUr>LW^3o_QPLSBg={|2LTMB|U>VcbCvXt&f#F_5MQ zkT1MqS^ z_NV2c=oqxRMFBh8{IdTr?mg6J+*S8o(K5y)5#;90yHTkCuMBc+&@I_KGn#7gMmO9_ z_&}u3(1P$8+>r>kc$(L{N{Ig#UL4`=hj6JVbYhszU1rx5kA zOMY`T7ED3&?iTKJ-8b)T=-s}He7sljJaaN+K^7Cj1>7#)@fc2V=XiN2HUL?>z_-(g zbgkId4Qbrp)*|TVcahHpnlJ&FyyMXLg)j!N;S;YIKejzg!LMGbFRbfAIkQ zuB@Cz6}p5-}hSCkV&`Fnr?6-Ix1-+p)z4^fuP*&qT^@CCw90ZGPGYi zD6BUXx`eD=6UESpo~3%%NVnF}FRj7go!)+E`=%jrI;lRr_!MaCC3~ z-NggTK9V1u?CB^Lqu7F3&>J%nfMP49qFUVfhs!0M@&jsFSY<%n$}3O#i>5O`nvm?6 zW!1XKSFb`}r7U@MTeKzxyHn2P)j_)vOCv1NZn>qfT+U;e%F64mXuOL`BBbbAj3xHO z=`LGPiQhCO7I2LGgulaDi@jbiz!^0+`j63a7%0I%M#pvvf(4OS)gHTq zub)2oQ`;`Y>_mH4h(l#X9`M@T&|3l+>er_J?wmaE zs_6g2C!@o?`}Kbp4`>#)I*hiG6;vjLKv{Us>9+p3ROPC+QDFfe6J5|afS{>D zu?d;uC1qTHv%h?3VKay(CHPCP$h&>k@_&01;tgcLI{(k%Ud{hAd~(14e(o$1j~1!Y{KZ80vYOZ$Dipx zg0!m-RrL;04WxdvDEJAQN2m-?+TKgkb!`ke3+Ta`F^B7Z$JI?bxc5yhE!zxSqFVCb zWmwLE(yZaN3xOk0HB=wF-rt_D$rxgOIRmx_x5T+l0NDcmzvWDN`*m|Evm)vn@EBLN z=u9`DY1IvlY-uOYTmlTU2IWd$n}*t6=UOdUT=QDYS{Y7d_fI_&99@t!E=RAs>-MX! z+v%_T=v&e%3&7#exHJRr5ykLneTUP-x5BCJ)Mj2Q{}=l5x6dg5_x7ID;{Qg2!+ZIE z7Z326^5u@cDOmZ^^F)97lN0Z~FKiBK#>qJF){f$19fwod(*;){mcnpCdrM*|AO(Ou zGrV%O1Kk(-X5lE2uM;ln0C6k!PfNqsBK<34e0NGfb#lK7J)m`592qp}3w0T9RR>qj zU2Y7M4)>|Oft&jSE64ne2~jWoQ}b{{Y_VYJPtAjJsG$-6+yg?rpehgU?B5i^HP(2EefXeq7gxNwP{h-zwNY{|>dWRn%l_YR?_gNn|JxrO-0OdL@l+yY%xvrX18W}s)OQn=%dT~^ zZ0HSn;{#nAdeW*dR+WG?O5-LfQJNX`W~BzCFm4g}TWUcCe@wGm()_IAld-r# zD^5tQ4Tj%9!oZN;r7PBB>C32Oh1`M}QUM-CM2OccCf39$UR=+3P*9gJbw^TiI>{xe zYzkMtZm>Jd-SzW<_JKj(73V1yl5spU6RX-6^zSwAHN4jaEBI93HlfjLfaZz9O(bQ* zNFLtXPXCh6TKUf>_@)ZLy8Yk7>i+NW$^PDb{MVg475^X1cEkxb2}eGcac3o9Tsm;2 z8uvckNQ?t8oJ$C1*0(oSeT|9}n!uXQJC=~|Xc|M{Oy^i98YsPdP{wQ%Q_@<@<(exM zfX(-4OQZIMw1N^2x8tMaEFmV;7-#f*&hl)Q|sF37?2D`lT}?vhx^q5-Q;TOQqa(el4|ue(7|6t;4j*(#s9NFOwg7n?|5sZ7ZkV zs@VY8s1wa|0dw|F4W*U|#n{*5d~N7)nR+)E9JpJx_{+Ojb^V~EEPZF7{rv8yGJTki zv}C)i9#pNg_G`6!w|z=sz5d5?Np7Y9uG9Yp`}@9^OM{MVg4tNcGO_09vNe|h@= znlh}@=Syz|RAr}Gc3s^z6zW6qCqe?`D(zZ-#&mJ-oHP2r@nMH6|C3x z`?%r%V%{G!l51t+Hi7YVH;`^6!uOOCDmRRrLI?W9P^h6h72jYKtFBi^t#mqcr{=}(mV(CANBbA;$wNK zs@FEI){rs;-mVIWuSO~wx+n)I?v_p$ng35JWlB7TaT!iITbLw-yP8Gm9}fL)w_8SI zrcIDM~f1|-*?>_$HP9A;!LvK60F^XA7F0vT17h4VN1{;JA zV6V@XvWLO_twVUXJICTja;2MsSKShXx0y6rU`#%GrM|S<*>o7bauD9(`Pp^EyVnjI zaXKor!osmr(;YuGC7be#Y5cm)n&#$5Txy*tq1UK~T7nDJrvhGsfF89qZBlAzeWxh_ z1x;tZf3US2;U%veB+CN_hnIq*i*{2>XPp?61xt0#V6$cEr+ENd!q4*C+ySNZ{boV> ziHPm~BB(xZR=5ybqINd+1eQa1tder`NY%{=+zLUniR!K1jXI*)B8$r%XkC=9WDW6( zhPDanD-kR$fL%y#ZI$6@PNEBuFZwpwn_HYZ^&AS{n?VV`!-AY(Id}QgZH~}R7nX>a zS^Z^|8nEP)aVoDWd-PzMR6lKT zh6fg4o=Uo??*6N%`ejSNBASypPY5qVExq0dq)A`6a(kootJy#-nlF8SQ;M3|dI!ai zqydu2C0nQ}<$ap>?1E@FP;&#Js|O|54~M1PQxfGc_bipDsJsW;uNEk&K%fy!fh3z)~2%I|Mvk!sVNF7S+;~?8MrBy_Ey_E zlJ?7&$I;w>TSw7+xJ3+&pUy-mRcFlxF5RRlefHtCvVcXi8V5;Yysd$no&e^v*39gU zhmC-Ax)XD4&+K4`@p-loY_y^Q^`CGgF~$On%$n~HBh^DCQcx|wjHZ^By- z)32ocZF63XSod2NVY&sPgOW5q{G*evQn59B;OiSyuwaB*sOHBfWvh_u6$AmNqoLO}hwH;|8Eec>*H!>P`KuZ5gVcx^BaR zxTQHLWyw6{q5Zz;996ZGo6G2ST|_VW&T3ej=^>3kK2@$AZoF@Jqa*zQ zZdt5cyFF~vS)$6(dX4_71NOQ^b+>(^!}cEMsxR|Tr4!S&P#OIsD-THz2OASh^|-uO zXoG`9YZ~(RtZR){kI|b(*B_?evUklV*bRa!&arO@zILSDKyDDx8ys)1tKOByE9d&{ z%kt^|Qs>&v`2Vqv&uRlY0{asH2 z{?%mvZcXN5WA#_&*}mSP&+5wGBs9#8+gFiTd&3JhEYjv0{#Pfuw)?q3Vlc1Ygr_)p zbz(C+7B8-M%Ev-Z7>>Wg2~MK|!}7Z=(DW;wf_!+Vv{O+B>wn#*1JYh<;o6k$`inX~ zI%C@LoJ1FISWJp6;0+(HF&pnWo=$1xdmkD?K~%qsTW4>>5^jIc%20qVE|UXtfz zRS-hE&GyN^xZxJ#4csv@cZtq})rZCaiLSv#dpg|35JjmeP6RQY7TenfxTUS4rajF{ z?tT~j;RvY6_iv&uuY*wmrG$`Y2ReYRPFmtH$T*Bos`m#pl>5|rzfDQcuTk!bFpm}C z9ZjR!cuCL3o3Z|!)EZn7+|jg8{24H@4Q@WJZBZSq(Hx(5Oe@W`Msj@K@vJnr`Dm^V z;8+p3aeKJefNziedd%-^CTb0?h!6R^lv!(VJH1{Xrg*y~{E|~iymJrDr&>xUBMRwJ zDq=7d{zlyvTM%2B2!9Z##r<<@&!+w#Y)(yF#|^Z`|1)^9SG)iJVDJ9^|2ug;mGl2q z&dA(BCcteE*;YL|HZ5CwUfvs>FlsrEdu=yONhnuOB;88Nu}@oNiCVkzL(_QFT+SPve*Qx_hSgMY60yaCq_K-$^WSXc5(RzS9R_O3 zuz--C_Y<-#*nzXj7SM_deao2VS&StqT}|P=xt{w^kBHt<^dXnuZO_ziT`_Or|Djr3 zbe1wsZr;W^{qJzUn*aIW$>IJz|G$f82c2Lk2~P!*4Cxuy7wk`Rn#79lXE?gRGa|xZ z2fd$Dfkd8xM;eJaNfI8j z`S)&!AlR6tP*b6VGQv?pQxXQ@^V73a$v6pi&@tSqias2lqL^|KgflAp@UKQc2q%B% zefZbDn9us^ANx}*(|!SHf}@K(LsOa%5j+aTWfnXNC-@?G6v~DAn{he|9{t~72YtYt zvRt57&tHfj%sBfSiDVGcnBcxH&e`9Ba48}d6ZK{hhchM@SrQ!oaP;Q;7eBrIK3v4X zSv1G#j3jIZzaXiN`iqQ6KS*dQ`++1vivDLe!&}z>yB9~#U%vLN%skTQD6{xr*>X$j;E6bS>5=|ApVsyN(~G0i7iVwY zzJGCg(>B)Ge}n4%ufv1G!F~R>J9&1{JCYDA2uhhG0!_ zO{a`6fScgtFA+-^e^z?;r-aSeGqt||l+g6z8NhzHcl2=d^5N*^jLLaFQ7qu$=%p%D z{Kqx6;^F9}#IuK^m(XT7=%RoBP?`In5p3)hT*LoIqx~lp|Nq|M=$`-I z$>Y121B5V_bc!Qj7L@fPEXj=Vt1(*W%lTm_V9qv@=n^xTBM{cdCbu4~tmjtUfJqdDiv7;V6jl^E-p z6(~6&{RI}1@HLCF)G#bifjG%nQ{z=3WRRh()ONj-oZwi2*S)OU4#uMPjR#fmGaC?w zDRo2J*lk%625`xYDD6d!f|!Vi(@cl&wG2nkCW#P8%rPgi%Pgt&Eu18-Dthg%9htjP z6u||#x@0_tt7Izp2R(0b20e6ln_p6|Xq=+Y~LQz%!^;@Do(ghKO zQz8Nd#C7wV|9mzKM|f=aZAs{X4unnUgkydcEN$C^a4#Gl+-o17 z>$!>iPgr!ZNgM0@KcnG6P5uw={Xci|#3UnWOwtGr_nx7ji8CR)s zh)N@~YGC|J3Oj4@_V{;91%%s`@HdcuBv;Ufrfen9<*?gOODAn#Ro7=UD?r$*iB`eT zOQHmXaTKQPh3leCT%-@j6v z4)~xcrU^Pf!9t)VPH2n_ZU`3$=r{G1E z5dXub@)C0r+O!y_gtWRABev)#WQLPI5x5V)Vj?k3gsc9%fvfMW{)RxYeLf6Fh?iek3A7V15;@ z9Bh52@1I3zDaFL=fYnXhE|f>vKl;k4pCEGM>2+F<8bfyhpeg#2CXRFX@(Kq0R9+-n0hHl0d!MKmO53SN+T7>)Z2y~0*;eC!t^L0@ z7!7Ln|7dXU|GSf?!co1$FCIhk*cWJ;SQ2v)P3SW}8ztu1I`)-k?ATW~wq1=r>rj5X zB%IT@WI|T$q*aA2{^1*2Xsu>n84V9Pz2)uoNWbtpq+j?|ymL~en*Mtqfd9TEJ_K1T z2|s3w40D1y|3inrb;?bIKagZ$_IN{kLB7Y0!Mx}|z&~&U(0wT#w^VgD4FCkI! z!L%3rUFnT!gbw#ig6GqGI;9^`r?(+R1jqX9GA{Dtz}rZIz>DqGGx)I}US=Ux=CBQk?h6UTm11c)Iqbd!lB-p&0 z$7(1ymaCyyuc+^aoubY|(R(O56+jR4nfgY>zy8aIE3?G=9o_-6@)KmYPLC^eJtozl zM?}1F{a$lny7R>$>M%nhKPp?bQ){5@%(TtTXKdUWbbXw-3cuGN?JFZ%pJcz;Vi3ZA zVFGE=G|i^OJ(+AwCRF@HW;g;bPSwYr3!*>10qN}f*L&rY+-}M3?R?^#!b@S4sVqYOdR@viqW|?JT;=q1`8o@D}X83d=xf zp2L4_UhgZUI>eo0$#{4{(-?7ZdJ0e#?H89Jpa-p*p`9|W&6%8YlFGoH_d&ZPoP~;5 z1WjiN={#1nL{mYy)PLiIaH+Wm?{vf9U7iqucHyFT5+j--#$&>};{c&ysFdO#$rZv0 zCpf-Bb1cwu(O)M0rL@TWzyJULM=7QVi=NVTP5NK&3{p2hXcU^2Z2&TkI)d<}G7yVL zfr<&IOM<4HEj%qaKxi*SOwI|1-!T&Tq*wI21VUFc=>6F=*`g+45lksTz%1d zitu)tFeKcDWnUt6f3aKNTf*SV-?GtWfIQQD!n`Q2t`=~T`Ll zL3$rbE6oglT?dDIZnTte5Xo<@f+edmxPnJ%7KL^>nURn0NS5G;93=_r{2w^#FByK$?=kKVPF}=AUy+3kx>kUvR$!68R6bCGth zVvy=zvUEfHpf-Z`f}aa}u|O3uIz_g{1ob}URbR)~U`jLu+B6ygX2vR{#y!8)ddF3Fouj3qK<`#=a`N?)uv@ggg^Iq~T0-cW z7S2|dMYXl9sQO>WGVs=Dc@1pu$Mu#5~fTA5N=rwZX#uV zH|Ljl!(g*bpGMV#0gUNyjHam5`_DpWUnQzG60eof^GLKouwH5})EEnc(Q6N*lJ_?YvGaS*Z<_-<0zdjZ}PLVa=qm>%Ov( zyC`f}yuP}aU?I`2g35BK!E}@@(P`2t8w@67cK5t(Gd0F`QyL4sb!PVAbScQt(zX{2 zMZW62v&dGd3S574NdIkj^M6NN+q-a1(j>2jHF zKYQ2SkkolsLGJjeS{n_Ivbt=mLjKxN%=?D)N?M?KR}L<$gTPr97U%s#%KB!Xpf|bl zw&6^wY!8;b&ei~0Ydo;{3yksgmX@aEpWOVo3l{39CfaAN+dS7(&K59myQ^+sD9xJA z2dhCS23lSVn@p+m#;n}#F!i6I$`usl@vy~qH|_hEqd6}#&E4^3Jy=IxBK8d^$S=NP zC~+BT^E~;mcDDf!cg%YweKK>GSJ%F8YMES+s}K6pFW-laDHjd?CZk+mJVp91DN(b>aa;t6GNOJ?eOfL2-KQ-NU9?}J#kx-T|<=L3^7=^FX;NIU2A9Z*Crq;Yc19V%? z7DY@oSLhZo5q?o?&FT9OeWJ=LOQYiE>|VpuSt(Vt-NyA!jefG4?^U&!+f{b!OIHu* zZuRPg>nOc66%waW6`Wh5b%m@{uAqdlyMcPPN)21VM4H0BN{sj>8YlYfDrcSc%42d( zw)&;dKm4mdH$MMkp4?GJi-Vp%6KepOw7lZ*)}882@-=o2Op7(mF}YNnB} zKFD*g>bdE0+|Jg#FaVJ8h4nH9>!pT`>QhPV{=W1x&Mph}L# zlN%dDs{&K1JBgo~H$JR8r)?W^_3p=t{m05M-)}%}y8*eD zovmr9+G7(YZ4@}&sm}Ni6G3N0oQ`Sy&u8P0?)`esBYI#;fh%QLbI2= zRM5APZ!LMpgVpyX3lim=$}8`>6n$lKdB?ZB4YBIz$ve2A7hyQSg(aON1ldN8^&t|Z zv&7SMhFA)tYzH@N8_)`bj@9mJ@9i-Vmsahx(zdEKaQFytqq_VzuNoGRD91_o^?=%=joC7S%AQXzwHM>exhmq@oiR% z>u8qK)i%};amLw%w9p8A^IPmcLV0Q&eF&^NyEEoAmn13susTp|jMSG-H`JAUUZvX5 zdeRJq@+u?Fx`tgQ{k?tbzW)dTyVD6qI9s5M(}hxil&*!SB#R1;mMa@&tXB!bfM&ZP z)b5py%+P|am~@6|hufXxr2H89Cfb17b}b zZ3q=gh`&(W*giuY*FdN4PpQ_!a;|qbV)AkQ641jJs#^LGZKo^^%3%=wnv15nTUgFJ zrJaO1!HIeY=yg#?L~{aG-Vg8JpL8}K2shU&Xw*2F9DR9%w~oU4kG#3mWaQ1{cJsKw zEH*5u3izrQ6`J#)mdY1CQCFZ_mml@ut5Tb#)#EvnFUZwn<9r3La_b`7O?BxK7A1>X zL+Kiiw$04eK^->v8;O+ZzQ9?h=8G-419kHcE-HTWm5#tHQS8o`=z74ywR;5Z_XggA zCbzhz5|>K`IdV-H?5Vzm@c77IyP%3SYjcYhMQ*X34ri11Hr;y|AQah44|V$F_OfBb zB@|(qzI1Vuw7wfo((78LB3z1oONDLnFPFpO_^i{QyJ@x+TE0-* z-m)JQPcIY}#XhXkQVQ;@+}>d&LRsB0Fe^Gw@6)H^oOK5R|I~o*CL{&0T{KipefosT zcXyOT@zy||c@=gg`(J{k20`>Y62Ik4Dqf{ul%11hRtl%lIwGNpT)J!Xk%Ms)vBg47 zLZapf^BE+|7cFK^EfcAFu_8#jEHuKZya0vvqP97y<0)PMQK+vpMO7>Xq5`VpBw?3@ zS>3ExduRUj;8>)}?Ha5hth`ph?{E=b4nNEBeu~76KLWxq_4%`<4sd_4L>)C&I+k<& zeq)1%cVi5IWH#SQFK?h}3V>GEZ=c=R|7*C;_4j{2Gm*osf1V zyxwO?(;0B`8w!Qa6>km-RRWuA-DhhP-Fafdf`qgdD*?7AzNkf+Yp!NMTSkk-oaIT3 zCIk@*`KZnTu$uPY?7D{#Qu`|Y*wC+P;7uGt?2S&1pljKL zo2>|4Ga0d{-DTiq3oi$4D>5n{RSh4CP%I;h>Vwh=B;y;Y1}d1$V%;!K#dEf(UF!s` zR2u1+*Q@eJs_$#npg88%aa0zkam;IEZp0FOj2_IBb~!pv!X}|s4uv^~BIj0mDqCu* zC`}pG=ZMB1(Zjfd9?&-NP;4a3lNKKzoE203sLD>g0H!QYV|{y$oZ}R+lsG@6sz!u( zj4tOinzxGhI#T}dJ!=?>wXQ6O@EYw^gb;HHW=f+XRE;Z~FqZsCt{T4q6%U$c8oaUf z<86v0aU7!u6b&2PmBq0*4WKqNRt-{Ufi_Z8aEfRjhx&tybaKs*Q2ll|R@(7`BG*A!)(RH0V#m~!y}m=)QjCIp0i)%{tweIm z%_nrlaHeKBm!+XJ4HN^gG}Bq>gO5+cP%KwC)HuuR`df37RKqKKoU!;|trvgep<*x8 z2)ZGukps2mPC$jpTPRgOtnFqolJDu;g1;2DJV6;G#xsjj|Y; zcHJ}GNF1GOi$V3I+oWoF;m|gLtxR-sg6&(?O|`dk9f+Y#mC)XW+H|x`(CQ`H!gP$M ztGZvMJzmX6e_EDScm2uyjbv2LlUvwKum)@ibL|`nt2=g*H3nd~eO_gjzhk-d13!v= z+E3N!iL%lReBXNCahB9D2&Z^BGg=~T6t7~k_#>+ZThoi$-G zo1tbSom`Ol{{Eg?M6RLoOzR_YO=JA2Ijca)gA_Jc%BFq4QZ@e8xb*dp5OrK?KB&C; zS*UW0x)<=nzda1z8h?J*{&BLpR0T*qz+$CavoaAIkHoqKQX8l>i&k@Sj}(BL3wOq$ zg(NhK_kx^CQ9Al-71b5de`TrXoha`2AByqArMYZFp{fOx9=P2~{Evy?sS3(w|Nr&& ze?XGbS;{!sV2@$l`JcnVlgj?j{$O+;|9>aX4m!b7QN2KtAw8w&a!yh-$!P*1-x-cB z@QjEs*gZ`0&TJDW91C?g!UlfxiXD!J|+vvf$DG4R+86%qhzS zdiDH;2*QlBzmZ4=A&m*{>vEj^EeMw)Vlh!~7I8RZa*-v$@efCDzJKx4+wa3g9GpdS zC99S4u6}{mq5k?}^MAed|L(=n^VcuJMZ8fP>(>9?!9ivH?+p(|_v`;Io*iV9f7sj~ zW>x$^5_2C<5a{#{F^gbBRIgtu5ME-M;7LNzFLT1lue%^L$NhfHA`x2JF{BelY|&R@ zqm`(-p=wC44h8;JfV%ajz<=q%{tBP#uK%B29G$*6d-L}Fi_^7jtd;-!Rr$Ync)$Md z=Gj3u&tS?V5#a5!S+ob?UN}4mf=7>RnHWnle)I?pM(BU#2^tMXhe7b~zbIZYM$5fo zvC_pX6mz&CH>9jT!SRgrRk7Z3FC6Ya9DUcL>6GyW)?T2$L@Z(aS?S%M5;kMc)aw3I zLeq<90Q=$I(ZkWphohG>D(Cq`F@T4om#R?lpUL|s9*$m0JbO5Lxzv|bcY~mZa2%5u zov#c@JqK%fbr}d-JxAvHd!;-@ERBs*E4k7Un{Za{ZAQ{l1p^rvNaz?-bbN$%&)ec{ i&(X0B&+XoGuKVZyxqoi|`Tqg{0RR8fY%}@*+5rGz>>|Yg literal 0 HcmV?d00001