Repository: cortexproject/cortex-helm-chart Branch: master Commit: e06ea29fe785 Files: 163 Total size: 450.2 KB Directory structure: gitextract_m7b_vaw8/ ├── .github/ │ ├── pull_request_template.md │ ├── stale.yml │ └── workflows/ │ ├── lint-test.yml │ ├── release.yaml │ └── renovate-config-validator.yml ├── .gitignore ├── .helmignore ├── .prettierignore ├── CHANGELOG.md ├── Chart.yaml ├── LICENSE ├── MAINTAINERS.md ├── Makefile ├── README.md ├── README.md.gotmpl ├── charts/ │ └── memcached-6.14.0.tgz ├── ci/ │ ├── test-configmap-values.yaml │ ├── test-deployment-values.yaml │ └── test-sts-values.yaml ├── ct.yaml ├── docs/ │ ├── .gitignore │ ├── 404.html │ ├── Gemfile │ ├── _config.yml │ ├── _layouts/ │ │ ├── home.html │ │ └── page.html │ ├── cortex-0.2.0.tgz │ ├── cortex-0.3.0.tgz │ ├── cortex-0.4.0.tgz │ ├── cortex-0.4.1.tgz │ ├── cortex-0.5.0.tgz │ ├── cortex-0.6.0.tgz │ ├── cortex-0.7.0.tgz │ ├── cortex-1.0.0.tgz │ ├── cortex-1.0.1.tgz │ ├── cortex-1.1.0.tgz │ ├── cortex-1.2.0.tgz │ ├── cortex-1.3.0.tgz │ ├── cortex-1.4.0.tgz │ ├── cortex-1.5.0.tgz │ ├── cortex-1.5.1.tgz │ ├── cortex-1.6.0.tgz │ ├── cortex-1.7.0.tgz │ ├── cortex-2.0.0.tgz │ ├── cortex-2.0.1.tgz │ ├── cortex-2.1.0.tgz │ ├── cortex-2.2.0.tgz │ ├── cortex-2.3.0.tgz │ ├── cortex-2.4.0.tgz │ ├── cortex-2.5.0.tgz │ ├── cortex-2.6.0.tgz │ ├── cortex-3.0.0.tgz │ ├── cortex-3.1.0.tgz │ ├── cortex-3.2.0.tgz │ ├── cortex-3.2.1.tgz │ ├── cortex-3.3.0.tgz │ ├── cortex-3.3.1.tgz │ ├── development/ │ │ └── developing_the_docs.md │ ├── development.md │ ├── guides/ │ │ ├── configure_configmap.markdown │ │ ├── configure_memberlist.markdown │ │ ├── configure_memcached.markdown │ │ ├── configure_ruler_and_alertmanager_with_configmap.markdown │ │ ├── configure_rules_via_configmap.markdown │ │ ├── configure_rules_via_sidecar.markdown │ │ ├── getting_started_with_block_storage.markdown │ │ └── upgrade-v1.markdown │ ├── guides.md │ ├── index.markdown │ └── index.yaml ├── renovate.json ├── templates/ │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── alertmanager/ │ │ ├── _helpers-alertmanager.tpl │ │ ├── alertmanager-dep.yaml │ │ ├── alertmanager-poddisruptionbudget.yaml │ │ ├── alertmanager-servicemonitor.yaml │ │ ├── alertmanager-statefulset.yaml │ │ ├── alertmanager-svc-headless.yaml │ │ └── alertmanager-svc.yaml │ ├── clusterrole.yaml │ ├── clusterrolebinding.yaml │ ├── compactor/ │ │ ├── _helpers-compactor.tpl │ │ ├── compactor-poddisruptionbudget.yaml │ │ ├── compactor-servicemonitor.yaml │ │ ├── compactor-statefulset.yaml │ │ └── compactor-svc.yaml │ ├── configmap.yaml │ ├── distributor/ │ │ ├── _helpers-distributor.tpl │ │ ├── distributor-dep.yaml │ │ ├── distributor-hpa.yaml │ │ ├── distributor-poddisruptionbudget.yaml │ │ ├── distributor-servicemonitor.yaml │ │ ├── distributor-svc-headless.yaml │ │ └── distributor-svc.yaml │ ├── ingester/ │ │ ├── _helpers-ingester.tpl │ │ ├── ingester-dep.yaml │ │ ├── ingester-hpa.yaml │ │ ├── ingester-poddisruptionbudget.yaml │ │ ├── ingester-servicemonitor.yaml │ │ ├── ingester-statefulset.yaml │ │ ├── ingester-svc-headless.yaml │ │ └── ingester-svc.yaml │ ├── nginx/ │ │ ├── _helpers-nginx.tpl │ │ ├── nginx-config.yaml │ │ ├── nginx-dep.yaml │ │ ├── nginx-hpa.yaml │ │ ├── nginx-ingress.yaml │ │ ├── nginx-poddisruptionbudget.yaml │ │ └── nginx-svc.yaml │ ├── overrides-exporter/ │ │ ├── _helpers-overrides-exporter.tpl │ │ ├── overrides-exporter-dep.yaml │ │ ├── overrides-exporter-poddisruptionbudget.yaml │ │ ├── overrides-exporter-servicemonitor.yaml │ │ └── overrides-exporter-svc.yaml │ ├── parquet-converter/ │ │ ├── _helpers-parquet-converter.tpl │ │ ├── parquet-converter-dep.yaml │ │ ├── parquet-converter-servicemonitor.yaml │ │ └── parquet-converter-svc.yaml │ ├── purger/ │ │ ├── _helpers-purger.tpl │ │ ├── purger-dep.yaml │ │ ├── purger-servicemonitor.yaml │ │ ├── purger-svc-headless.yaml │ │ └── purger-svc.yaml │ ├── querier/ │ │ ├── _helpers-querier.tpl │ │ ├── querier-dep.yaml │ │ ├── querier-hpa.yaml │ │ ├── querier-poddisruptionbudget.yaml │ │ ├── querier-servicemonitor.yaml │ │ └── querier-svc.yaml │ ├── query-frontend/ │ │ ├── _helpers-query-frontend.tpl │ │ ├── query-frontend-dep.yaml │ │ ├── query-frontend-servicemonitor.yaml │ │ ├── query-frontend-svc-headless.yaml │ │ ├── query-frontend-svc.yaml │ │ └── query-poddisruptionbudget.yaml │ ├── query-scheduler/ │ │ ├── _helpers-query-scheduler.tpl │ │ ├── query-scheduler-dep.yaml │ │ ├── query-scheduler-poddisruptionbudget.yaml │ │ ├── query-scheduler-servicemonitor.yaml │ │ ├── query-scheduler-svc-headless.yaml │ │ └── query-scheduler-svc.yaml │ ├── ruler/ │ │ ├── _helpers-ruler.tpl │ │ ├── ruler-configmap.yaml │ │ ├── ruler-dep.yaml │ │ ├── ruler-hpa.yaml │ │ ├── ruler-poddisruptionbudget.yaml │ │ ├── ruler-servicemonitor.yaml │ │ └── ruler-svc.yaml │ ├── runtime-configmap.yaml │ ├── secret.yaml │ ├── serviceaccount.yaml │ ├── store-gateway/ │ │ ├── _helpers-store-gateway.tpl │ │ ├── store-gateway-hpa.yaml │ │ ├── store-gateway-poddisruptionbudget.yaml │ │ ├── store-gateway-servicemonitor.yaml │ │ ├── store-gateway-statefulset.yaml │ │ ├── store-gateway-svc-headless.yaml │ │ └── store-gateway-svc.yaml │ └── svc-memberlist-headless.yaml ├── tools/ │ ├── bump-version.sh │ └── chart-version-tag.sh └── values.yaml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/pull_request_template.md ================================================ **What this PR does**: **Which issue(s) this PR fixes**: Fixes # **Checklist** - [ ] `CHANGELOG.md` updated - the order of entries should be `[CHANGE]`, `[FEATURE]`, `[ENHANCEMENT]`, `[BUGFIX]`, `[DEPENDENCY]` ================================================ FILE: .github/stale.yml ================================================ # Days without any activity until an issue is labeled as stale daysUntilStale: 60 # Days after having the stale label that the issue will be closed daysUntilClose: 30 # Labels that prevent issues from being marked as stale exemptLabels: - dependencies - keepalive - bug - help wanted # Label to use to identify a stale issue staleLabel: stale # Comment to post when marking an issue as stale. Leave as false # to disable. markComment: > This issue has been automatically marked as stale because it has not had any activity in the past 60 days. It will be closed in 30 days if no further activity occurs. Thank you for your contributions. # Comment to post when closing a stale issue. Leave as # false to disable. closeComment: false ================================================ FILE: .github/workflows/lint-test.yml ================================================ name: Lint and Test Charts on: pull_request: jobs: update-readme: # Only runs on PRs from the same repo (not forks), where the CI token can push. if: github.event.pull_request.head.repo.full_name == github.repository runs-on: ubuntu-latest outputs: updated: ${{ steps.commit.outputs.updated }} steps: - name: Checkout PR branch uses: actions/checkout@v6 with: token: ${{ secrets.CORTEX_HELM_CHART_CI_TOKEN }} ref: ${{ github.event.pull_request.head.ref }} fetch-depth: 0 - name: Regenerate README.md run: make README.md - name: Commit and push if changed id: commit run: | if git diff --quiet -- README.md; then echo "updated=false" >> "$GITHUB_OUTPUT" else git config user.name "$(git log -1 --format='%an')" git config user.email "$(git log -1 --format='%ae')" git add README.md git commit -s -m "Auto-update README.md" \ -m "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>" git push echo "updated=true" >> "$GITHUB_OUTPUT" fi lint-test: needs: update-readme # Run unless update-readme pushed a new commit (which will re-trigger CI). # Also runs when update-readme is skipped (fork PRs) or fails unexpectedly. if: "!cancelled() && needs.update-readme.outputs.updated != 'true'" runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 with: fetch-depth: 0 - name: Set up Helm uses: azure/setup-helm@v5 with: version: v3.12.1 # Python is required because `ct lint` runs Yamale (https://github.com/23andMe/Yamale) and # yamllint (https://github.com/adrienverge/yamllint) which require Python - uses: actions/setup-python@v6 with: python-version: '3.14' check-latest: true - name: Set up chart-testing uses: helm/chart-testing-action@v2.8.0 - name: Run chart-testing (lint) run: ct lint --config ct.yaml - name: Check README.md is up to date run: | make README.md git diff --exit-code -- README.md - name: Create kind cluster uses: helm/kind-action@v1.14.0 - name: Run chart-testing (install) run: | kubectl create namespace cortex ct install --config ct.yaml --namespace cortex ================================================ FILE: .github/workflows/release.yaml ================================================ name: Release Chart on: push: branches: - master workflow_dispatch: inputs: version: description: 'New version (e.g. 1.2.3). If omitted, bumps based on changelog.' required: false type: string permissions: contents: write pull-requests: write jobs: release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 with: fetch-depth: 0 token: ${{ secrets.CORTEX_HELM_CHART_CI_TOKEN }} - name: Configure Git run: | git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - name: Install Helm uses: azure/setup-helm@v5 with: version: v3.12.1 - name: Bump Version run: make bump-version VERSION="${{ inputs.version }}" - name: Get New Version id: version run: | new_version=$(grep '^version:' Chart.yaml | awk '{print $2}') echo "new_version=$new_version" >> $GITHUB_OUTPUT - name: Update README run: make README.md - name: Package Chart run: | helm repo add bitnami https://charts.bitnami.com/bitnami helm dependency build helm package . -d docs helm repo index ./docs/ --url https://cortexproject.github.io/cortex-helm-chart - name: Create or Update Pull Request env: GITHUB_TOKEN: ${{ secrets.CORTEX_HELM_CHART_CI_TOKEN }} run: | git checkout -b release-${{ steps.version.outputs.new_version }} git add Chart.yaml README.md CHANGELOG.md docs/ git commit -s -m "Release ${{ steps.version.outputs.new_version }}" git push --force origin release-${{ steps.version.outputs.new_version }} # Check if a PR already exists for this head branch existing_pr=$(gh pr list --head release-${{ steps.version.outputs.new_version }} --json number --jq '.[0].number') if [ -n "$existing_pr" ]; then echo "PR #$existing_pr already exists — updating title/body" gh pr edit "$existing_pr" \ --title "Release ${{ steps.version.outputs.new_version }}" \ --body "Automated release PR for version ${{ steps.version.outputs.new_version }}" else gh pr create \ --title "Release ${{ steps.version.outputs.new_version }}" \ --body "Automated release PR for version ${{ steps.version.outputs.new_version }}" \ --base ${{ github.ref_name }} \ --head release-${{ steps.version.outputs.new_version }} fi ================================================ FILE: .github/workflows/renovate-config-validator.yml ================================================ name: Validate renovate config on: push: paths: - renovate.json jobs: validate: name: validate runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 - name: Validate uses: rinchsan/renovate-config-validator@v0.2.1 ================================================ FILE: .gitignore ================================================ ./*.tgz cortex ================================================ FILE: .helmignore ================================================ # Git .git/ .gitignore .github/ # IDE .project .idea/ *.tmproj # Common backup files *.swp *.bak *.tmp *~ # Cortex ignore docs/ tools/ ct.yaml ci/ README.md.gotmpl .prettierignore CHANGELOG.md MAINTAINERS.md LICENSE Makefile renovate.json ================================================ FILE: .prettierignore ================================================ *.yaml ================================================ FILE: CHANGELOG.md ================================================ # Changelog ## master / unreleased ## 3.3.1 / 2026-05-21 * [DEPENDENCY] update kiwigrid/k8s-sidecar docker tag to v2.7.3 #628 * [DEPENDENCY] update nginx docker tag to v1.31 #629 * [DEPENDENCY] update memcached docker tag to v1.6.42 #631 ## 3.3.0 / 2026-04-27 * [FEATURE] Add a parquet labels cache. #621 * [DEPENDENCY] update quay.io/cortexproject/cortex docker tag to v1.21.0 #622 * [DEPENDENCY] update kiwigrid/k8s-sidecar docker tag to v2.7.1 #623 ## 3.2.1 / 2026-04-20 * [BUGFIX] Don't configure alertmanager in ruler if alertmanager is disabled #618 * [DEPENDENCY] update memcached docker tag to v1.6.41 #603 * [DEPENDENCY] update prom/memcached-exporter docker tag to v0.16.0 #612 * [DEPENDENCY] update kiwigrid/k8s-sidecar docker tag to v2.6.0 #610 ## 3.2.0 / 2026-02-26 * [ENHANCEMENT] enable readiness probe on kiwigrid/k8s-sidecar #597 * [DEPENDENCY] update kiwigrid/k8s-sidecar docker tag to v2.5.0 #568 * [DEPENDENCY] update memcached docker tag to v1.6.40 #580 * [DEPENDENCY] update prom/memcached-exporter docker tag to v0.15.5 #581 * [BUGFIX] override kiwigrid/k8s-sidecar health port to avoid conflict #597 ## 3.1.0 / 2026-02-24 * [FEATURE] Add a parquet converter. #579 * [ENHANCEMENT] Avoid scheduling queriers and ingesters on the same node #583 * [ENHANCEMENT] Allow for the nginx service port and container port to be different #589 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.20.1 #577 * [BUGFIX] Ruler is using the wrongly generated Alertmanager URL #593 ## 3.0.0 / 2025-11-27 * [CHANGE] Replace bitnami images with community images. Config via .extraEnvVars must be migrated to .args. See memcached docs for standard args. #571 * [CHANGE] Memcacheds are now enabled by default #551 * [CHANGE] Change default config: distributors, rulers, queriers, query-frontend, nginx and compactors can be disrupted until 30% * [CHANGE] Remove startup probes from compactors from default values. It's not recommended in general #542 * [CHANGE] Use default value for num_tokens in ingester configuration #544 * [BUGFIX] Fix discovering memcached instances #551 * [BUGFIX] Fix restarting query-schedulers when config changes #559 * [ENHANCEMENT] Run overrides-exporter with high availability #557 * [ENHANCEMENT] Persist subchart #572 * [ENHANCEMENT] Expose query frontend GRPC port on service for ruler #574 * [DEPENDENCY] Update dependency nginx to v1.29 #540 * [DEPENDENCY] Update kiwigrid/k8s-sidecar docker tag to v1.30.11 #547 * [DEPENDENCY] Update kiwigrid/k8s-sidecar docker tag to v1.30.5 #531 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.20.0 #566 ## 2.6.0 / 2025-05-07 * [DEPENDENCY] Update Helm release memcached to v6.14.0 #528 * [DEPENDENCY] Update dependency nginx to v1.27 #532 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.19.0 #521 * [ENHANCEMENT] Add `nginx.config.override_push_endpoint` field to override push endpoint in the nginx configuration #522 ## 2.5.0 / 2025-01-17 * [CHANGE] Updated default `align_queries_with_step` to **false** to match documentation #513 * [ENHANCEMENT] Add `nginx.config.upstream_protocol` field to configure the upstream protocol in the nginx configuration #506 * [ENHANCEMENT] Add ability to set `persistentVolumeClaimRetentionPolicy` on alertmanager, ingester, compactor, and store-gateway StatefulSets #517 * [BUGFIX] fix: upstream_protocol reference in auth_orgs #509 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.18.1 #510 ## 2.4.0 / 2024-07-18 * [CHANGE] Removed the default `livenessProbe` for store-gateway and compactor. You can still use a `livenessProbe` but we advise against it #502 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.17.1 #501 ## 2.3.0 / 2024-04-12 * [ENHANCEMENT] Alertmanager: Add `grpc` port #494 * [ENHANCEMENT] Alertmanager: Expose 9094 TCP and UDP for gossip cluster #494 * If the AlertManager headless service existed prior to applying the change, it will have only one port set, which is a known issue. See [kubernetes/kubernetes#39188](https://github.com/kubernetes/kubernetes/issues/39188). Re-creating the headless service can resolve this issue ## 2.2.0 / 2024-01-16 * [CHANGE] Removed `config.storage.engine` and any reference of it #488 * [ENHANCEMENT] Add `appProtocol` field to templates/svc-memberlist-headless.yaml to fix issues wirth Istio #485 * [ENHANCEMENT] Add option to autoscale on multiple metrics and custom metrics metrics #467 * [ENHANCEMENT] Add control on store-gateway statefulset when autoscale (HPA) enabled or disabled #472 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.15.0 #453 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.15.1 #456 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.15.2 #459 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.15.3 #471 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.16.0 #489 * [BUGFIX] Correctly interpret .Capabilities.KubeVersion when it looks like a prerelease #457 * [BUGFIX] Removed non-existent `purger.enable` flags in some components #488 * [BUGFIX] Fix podTargetLabels in all Prometheus ServiceMonitor CRDs #487 ## 2.1.0 / 2023-03-17 * [FEATURE] add autoscaler for the ruler #430 * [ENHANCEMENT] Add annotations and labels to memberlist service #433 * [ENHANCEMENT] Add podTargetLabels to all Prometheus servicemonitor CRs #439 * [DEPENDENCY] Update Helm release memcached to v6.3.12 #441 # 2.0.1 / 2023-01-06 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.14.1 #422 * [DEPENDENCY] Update Helm release memcached to v6.3.3 #424 * [BUGFIX] Fix memcache dependency condition #425 # 2.0.0 / 2022-12-15 * [FEATURE] add purger components to cortex #407 * [CHANGE] With the release of memcached v6 bitnami renamed `extraEnv` to `extraEnvVars`. Use `extraEnvVars` if you want to alter MEMCACHED_CACHE_SIZE, MEMCACHED_MAX_CONNECTIONS, etc... #303 * [CHANGE] Caching for block storage can now be individually enabled. For example use `memcached-blocks.enabled` to enable caching for blocks. #417 * [CHANGE] Drop cortex chunk support. #417 * [CHANGE] Drop cortex configdb support. #417 * [CHANGE] Removed legacy ruler and alertmanager storage configuration. Please use `ruler_storage` and `alertmanager_storage`. #417 * [CHANGE] Dropped `storage.index_queries_cache_config`. #417 * [ENHANCEMENT] Add verboseLogging option to nginx config #402 * [ENHANCEMENT] Start using autoscaling/v2 for HorizontalPodAutoscaler in v1.23+ #414 * [ENHANCEMENT] Add pod topology spread constrant option to Ingester/Alertmanager statefulset #403 * [ENHANCEMENT] Add HPA to store gateways #406 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.13.1 #401 * [DEPENDENCY] Update Helm release memcached to v6 #303 * [DEPENDENCY] Update Helm release memcached to v6.3.2 #418 * [DEPENDENCY] Update Cortex to v1.14 #417 # 1.7.0 / 2022-09-23 * [BUGFIX] Fix nginx extraContainers to indent correctly #373 * [DEPENDENCY] Update dependency nginx to v1.23 #375 * [DEPENDENCY] Update dependency kiwigrid/k8s-sidecar to v1.19.2 #370 * [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.13.0 #381 * [DEPENDENCY] Update kiwigrid/k8s-sidecar Docker tag to v1.19.4 #387 * [DEPENDENCY] Update kiwigrid/k8s-sidecar Docker tag to v1.19.5 #392 ## 1.6.0 / 2022-06-10 * [CHANGE] move from omegavvweapon/kopf-k8s-sidecar to kiwigrid/k8s-sidecar #365 * [FEATURE] Add Overrides-Exporter #360 * [ENHANCEMENT] Add dnsTTL option to nginx config #366 * [BUGFIX] Fix query-scheduler address for query-frontend to use correct address #364 * [DEPENDENCY] Update dependency nginx to v1.22 #357 ## 1.5.1 / 2022-05-25 * [BUGFIX] Fix mounting cortex config when using configmap #355 * [DEPENDENCY] Update dependency omegavveapon/kopf-k8s-sidecar to v1.4.1 #353 ## 1.5.0 / 2022-05-24 * [FEATURE] Add Query-Scheduler #268 * [ENHANCEMENT] Allow StoreGateway podManagementPolicy to be changed #332 * [ENHANCEMENT] Add pod topology spread constrant option #343 * [BUGFIX] Correct a typo in enabling distributor HPA #334 * [BUGFIX] Frontend memcached address did not match the Service #337 * [BUGFIX] Add service discovery method for query-scheduler addresses #338 ## 1.4.0 / 2022-03-08 * [ENHANCEMENT] Upgrade to Cortex v1.11.1 #331 * [ENHANCEMENT] Includes enable flags for each component #319 * [ENHANCEMENT] Exclude cortex components endpoint from nginx config when disabled #326 ## 1.3.0 / 2022-02-10 * [CHANGE] move from quay.io/kiwigrid/k8s-sidecar to omegavvweapon/kopf-k8s-sidecar image #302 * [CHANGE] undo querier store optimization #304 * config.querier.query_ingesters_within: 13h -> 0s (default) * config.querier.query_store_after: 12h -> 0s (default) * [CHANGE] Change sidecar default values to match values in documentation #317 * [CHANGE] Remove ruler.persistentVolume.subPath since it was never persistent to begin with #317 * [ENHANCEMENT] Fix the indentation of memcached guide #309 * [ENHANCEMENT] Added api endpoints for Grafana 8 unified alerting #291 * [ENHANCEMENT] Add guide on how to configure alertmanager/ruler with configmap #313 * [DEPENDENCY] Update Helm release memcached to v5.15.14 #301 ## 1.2.0 / 2021-12-29 * [CHANGE] Use port number for prometheus port annotations. #288 * [CHANGE] Disable ingester startup probes by default. #286 * [CHANGE] Moved HPA memory specification to be the first item in the list. #284 * [FEATURE] Optionally manage cortex config as configmap. #280 * [ENHANCEMENT] Upgrade to Cortex v1.11.0 #272 * [DEPENDENCY] Update Helm release memcached to v5.15.12 #274 ## 1.1.0 / 2021-12-01 * [FEATURE] Allow different service accounts per dep/statefulset. #264 * [CHANGE] Enable bucket index by default #275 * [CHANGE] Disable ingester liveness probes by default. #263 * [BUGFIX] workaround for .Capabilities.APIVersions. #277 * [DEPENDENCY] Update Helm release memcached to v5.15.9 #273 ## 1.0.1 / 2021-11-26 * [BUGFIX] alertmanager/ruler deployment: fix indentation #266 ## 1.0.0 / 2021-11-25 ### This Release includes BREAKING CHANGES * [FEATURE] Add autoscaler for nginx #249 * [FEATURE] Add in lifecycle for querier, querier-frontend, and distributor #243 * [FEATURE] Add ingressClass to ingressResource #227 * [ENHANCEMENT] Allow overriding cortex Version #227 * [ENHANCEMENT] Update policy k8 Version #227 * [ENHANCEMENT] Improved default values for bitnami/memcached #227 * [ENHANCEMENT] Update container names to match cortex-mixin expectations #233 * [CHANGE] Deprecate *.persistence #227 * [CHANGE] Remove legacy clusterPort from alertmanager #227 * [CHANGE] Remove useless nginx.serviceMonitor section #227 * [CHANGE] Configure blocks storage engine by default instead of chunks #227 * [CHANGE] Adjusted cortex default configuration #227 * server.grpc_server_max_recv_msg_size: 104857600 -> 10485760 * server.grpc_server_max_send_msg_size: 104857600 -> 10485760 * server.grpc_server_max_concurrent_streams: 1000 -> 10000 * server.ingester_client.grpc_client_config.max_recv_msg_size: 104857600 -> 10485760 * server.ingester_client.grpc_client_config.max_send_msg_size: 104857600 -> 10485760 * config.limits.enforce_metric_name: false -> true * config.ruler.enable_api: false -> true * configure memberlist automatically * config.ingester.lifecycler.final_sleep: 0s -> 30s * config.querier.query_ingesters_within: 12h -> 13h * config.querier.query_store_after: 0 -> 12h * [BUGFIX] Fix nil pointer evaluation when using `ruler.dictonaries` option #242 * [BUGFIX] Fixed hardcoding of containerSecurityContext in Ingester statefulset #258 * [BUGFIX] Don't create nginx resources unless nginx is enabled. #261 * [DEPENDENCY] Update Helm release memcached to v5.15.5 #241 * [DEPENDENCY] Update Helm release memcached to v5.15.8 #247 ## 0.7.0 / 2021-10-05 * [FEATURE] Support runtime configuration #209 * [FEATURE] Add autoscaler for queriers #190 * [FEATURE] Add autoscaler for distributors #189 * [FEATURE] Add autoscaler for ingesters #182 * [ENHANCEMENT] Support customizing the nginx config with values #213 * [ENHANCEMENT] Upgrade to Cortex v1.10.0 #204 * [ENHANCEMENT] Populate config.querier.store_gateway_addresses automatically based on other config #201 * [ENHANCEMENT] Graceful shutdown of ingesters #195 * [ENHANCEMENT] Define namespace in templates #184 * [ENHANCEMENT] Use FQDN for memcached addresses #175 * [ENHANCEMENT] Optionally generate endpoints for `X-Scope-OrgID` injection (multi-tenancy) #180 * [ENHANCEMENT] Optionally configure Basic Auth within Nginx #205 * [ENHANCEMENT] Add extraEndpointSpec to all servicemonitors for specifying things like TLS #216 * [ENHANCEMENT] Add option to specify `podManagementPolicy` when using ingesters as statefulset #236 * [BUGFIX] Fix whitespace in runtime-config annotations, introduced in #209, fixed in #212 * [BUGFIX] Correcting nginx config for auth orgs to right proxy_pass #192 * [DEPENDENCY] Update Helm release memcached to v5.15.4 #228 ## 0.6.0 / 2021-06-28 * [CHANGE] Removed dnssrvnoa resolution from block memcached (probably oversight) and moved back to simple dns resolution #164 * [CHANGE] Removed http-metrics port from every headless service and added ClusterIP service with http-metrics port to every component who before only had an headless service before #169 * [FEATURE] Support dynamic configuration of Ruler and AlertManager using sidecar #150 * [ENHANCEMENT] Enable/Disable security & container security context #158 * [ENHANCEMENT] ServiceMonitors: add options to configure metricRelabelings and relabelings #165 * [ENHANCEMENT] Support specification of whether service accounts should automount token by adding value for Cortex service account and upgrading memcached dependency to version which includes same change #142 * [BUGFIX] Fixed the default label used in pod affinity expression #162 * [BUGFIX] Fix label and annotation overrides for services (thanks @kwangil-ha) #164 * [BUGFIX] Fix store gateway service name regression introduced in (#144) #166 * [BUGFIX] Fix querier-frontend memcached arg #170 ## 0.5.0 / 2021-06-08 * [CHANGE] **Labels has been updated to latest best practices**. This means that **you cannot do a rolling update from an older version of this chart**. Either change the labels of your existing deployment by hand to make the transition as seamless as possible or uninstall the old release and install the new release with a short downtime. #144 * [CHANGE] Minimum Kubernetes Version of this Chart is now 1.19 #144 * [CHANGE] A new dedicated service is now available for the memberlist. Check `config.memberlist.join_members` in the default `values.yaml` for more information. #144 * [CHANGE] Ingress is now disabled by default. You can re-enable it by setting `ingress.enabled` to `true` #144 * [CHANGE] Configs is now disabled by default. You can re-enable it by setting `configs.enabled` to `true` #144 * [CHANGE] PodDisruptionBudget is now enabled by default for all microservices once you have more than 1 replicas #144 * [ENHANCEMENT] startupProbe has been added to all Pods and the default values for `livenessProbe` and `readinessProbe` has been adjusted #144 * [ENHANCEMENT] You can now disable the alertmanager and ruler deployment by setting `ruler.enabled` or `alertmanager.enabled` to `false` #144 * [ENHANCEMENT] Rules for the ruler can now be provisioned via values. Check `ruler.directories` in the default `values.yaml` for more information. #144 * [ENHANCEMENT] Expose `client_max_body_size` config for nginx max request body size #137 * [ENHANCEMENT] Adding option to add custom headers (ex. X-Scope-OrgID) to NGINX from values.yaml (key `nginx.config.setHeaders`). #127 * [ENHANCEMENT] Headless service for distributor to allow GRPC load balancing #148 * [BUGFIX] Fixed `priorityClassName` in alertmanager deployment configuration. #155 * [BUGFIX] Replacing deprecated (in Cortex 1.9) configuration with appropriate replacements (max_look_back_period -> max_query_lookback & compress_responses -> response_compression_enabled). #154 * [BUGFIX] Added missing ServiceMonitors `additionalLabels` placeholders in `values.yaml`. #146 ## 0.4.1 / 2021-03-22 * [BUGFIX] Fix dependencies in charts dir to reflect recent update in 0.4.0 #139 ## 0.4.0 / 2021-03-01 * [CHANGE] Resource requests and limits have been removed from the values.yaml file. The default resources assigned will be based on the particular k8s cluster configuration, if they are not overridden. #112 * [CHANGE] Change memcached chart references from deprecated stable repo to bitnami source. #124 * [BUGFIX] Corrected structural issues found in ingress resource yaml for kube versions 1.19+. #112 ## 0.3.0 / 2021-01-21 * [ENHANCEMENT] Expose new HTTP API paths for remote-write and Query frontend to nginx #103 * [ENHANCEMENT] Compactor service is no longer created if compactor is disabled. #82 * [ENHANCEMENT] Headless service for alert manager is only enabled when the alert manager is deployed as a stateful set. #91 * [ENHANCEMENT] Improved memcached configuration template, with support for both chunks & block storage caches. #92 * [ENHANCEMENT] Update apiVersion: networking.k8s.io/v1beta1 -> networking.k8s.io/v1 for Kubernetes versions 1.19+ #94 * [ENHANCEMENT] Service Monitors and Compactor Service #68, #80 * [ENHANCEMENT] Updated default replication factor to match documentation #102 * [BUGFIX] Update repository URL for memcache dependency charts. #96 * [BUGFIX] nginx config using non-default clusterDomain #78 * [BUGFIX] Add cluster DNS domain value #63 * [BUGFIX] Fix grpc port for querier #71 ## 0.2.0 / 2020-10-25 * [FEATURE] Add support for Blocks storage backend of Cortex. #52 * [ENHANCEMENT] Adding dnsResolver option to nginx.config. #28 * [ENHANCEMENT] Supporting externally managed Cortex Config. #31 * [ENHANCEMENT] Enabling NGINX deployment to be optional. #32 * [ENHANCEMENT] Adding option to deploy ingester as StatefulSet. #46 * [ENHANCEMENT] Adding ability to run alertmanager as StatefulSet. #54 * [ENHANCEMENT] Updating README.MD with values.yaml defaults, adding alertmanager paths to nginx. #57 * [BUGFIX] Updating query frontend headless service to publish its address when not ready, to fix issue with queriers not becoming ready due to not finding any frontend addresses. #34 * [BUGFIX] Fixed invalid config template. #40 * [BUGFIX] Correct & add consistent target labels on components. #48 * [BUGFIX] Fix values file duplicate config.storage section of Cortex config. #51 * [BUGFIX] Add GRPC ports to store gateway pods and service. #52 * [BUGFIX] Fix service ports, fix ruler endpoint for configs and alertmanager. #55 ================================================ FILE: Chart.yaml ================================================ apiVersion: v2 version: 3.3.1 appVersion: v1.21.0 description: 'Horizontally scalable, highly available, multi-tenant, long term Prometheus.' home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: niclas.schad@stackit.cloud name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart dependencies: - name: memcached alias: memcached-frontend version: 6.14.0 repository: https://charts.bitnami.com/bitnami condition: memcached-frontend.enabled - name: memcached alias: memcached-blocks-index version: 6.14.0 repository: https://charts.bitnami.com/bitnami condition: memcached-blocks-index.enabled - name: memcached alias: memcached-blocks version: 6.14.0 repository: https://charts.bitnami.com/bitnami condition: memcached-blocks.enabled - name: memcached alias: memcached-blocks-metadata version: 6.14.0 repository: https://charts.bitnami.com/bitnami condition: memcached-blocks-metadata.enabled - name: memcached alias: memcached-parquet-labels version: 6.14.0 repository: https://charts.bitnami.com/bitnami condition: memcached-parquet-labels.enabled ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: MAINTAINERS.md ================================================ - Niclas Schad, STACKIT ([@nschad](https://github.com/nschad)) - Tom Hayward, Infoblox ([@kd7lxl](https://github.com/kd7lxl)) ================================================ FILE: Makefile ================================================ .PHONY: README.md README.md: docker run --rm --volume "$(shell pwd):/helm-docs" -u $(shell id -u) jnorwood/helm-docs:v1.11.0 .PHONY: bump-version bump-version: ./tools/bump-version.sh $(VERSION) ================================================ FILE: README.md ================================================ # cortex ![Version: 3.3.1](https://img.shields.io/badge/Version-3.3.1-informational?style=flat-square) ![AppVersion: v1.21.0](https://img.shields.io/badge/AppVersion-v1.21.0-informational?style=flat-square) Horizontally scalable, highly available, multi-tenant, long term Prometheus. **Homepage:** ## Maintainers | Name | Email | Url | | ---- | ------ | --- | | Tom Hayward | | | | Niclas Schad | | | ## Documentation Checkout our documentation for the cortex-helm-chart [here](https://cortexproject.github.io/cortex-helm-chart/) ## Dependencies ### Key-Value store Cortex requires a Key-Value (KV) store to store the ring. It can use traditional KV stores like [Consul](https://www.consul.io/) or [etcd](https://etcd.io/), but it can also build its own KV store on top of memberlist library using a gossip algorithm. The recommended approach is to use the built-in memberlist as a KV store, where supported. External KV stores can be installed alongside Cortex using their respective helm charts https://github.com/bitnami/charts/tree/master/bitnami/etcd and https://github.com/hashicorp/consul-k8s/tree/main/charts/consul. ### Storage Cortex requires a storage backend to store metrics and indexes. See [cortex documentation](https://cortexmetrics.io/docs/) for details on storage types and documentation ## Installation [Helm](https://helm.sh) must be installed to use the charts. Please refer to Helm's [documentation](https://helm.sh/docs/) to get started. Once Helm is set up properly, add the repo as follows: ```bash helm repo add cortex-helm https://cortexproject.github.io/cortex-helm-chart ``` Cortex can now be installed with the following command: ```bash helm install cortex --namespace cortex cortex-helm/cortex ``` If you have custom options or values you want to override: ```bash helm install cortex --namespace cortex -f my-cortex-values.yaml cortex-helm/cortex ``` Specific versions of the chart can be installed using the `--version` option, with the default being the latest release. What versions are available for installation can be listed with the following command: ```bash helm search repo cortex-helm ``` As part of this chart many different pods and services are installed which all have varying resource requirements. Please make sure that you have sufficient resources (CPU/memory) available in your cluster before installing Cortex Helm chart. ## Upgrades To upgrade Cortex use the following command: ```bash helm upgrade cortex -f my-cortex-values.yaml cortex-helm/cortex ``` Note that it might be necessary to use `--reset-values` since some default values in the values.yaml might have changed or were removed. Source code can be found [here](https://cortexmetrics.io/) ## Requirements Kubernetes: `^1.19.0-0` | Repository | Name | Version | |------------|------|---------| | https://charts.bitnami.com/bitnami | memcached-frontend(memcached) | 6.14.0 | | https://charts.bitnami.com/bitnami | memcached-blocks-index(memcached) | 6.14.0 | | https://charts.bitnami.com/bitnami | memcached-blocks(memcached) | 6.14.0 | | https://charts.bitnami.com/bitnami | memcached-blocks-metadata(memcached) | 6.14.0 | | https://charts.bitnami.com/bitnami | memcached-parquet-labels(memcached) | 6.14.0 | ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| | alertmanager.​affinity | object | `{}` | | | alertmanager.​annotations | object | `{}` | | | alertmanager.​containerSecurityContext.​enabled | bool | `true` | | | alertmanager.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | alertmanager.​enabled | bool | `true` | | | alertmanager.​env | list | `[]` | Extra env variables to pass to the cortex container | | alertmanager.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log level (debug, info, warn, error) | | alertmanager.​extraContainers | list | `[]` | Additional containers to be added to the cortex pod. | | alertmanager.​extraPorts | list | `[]` | Additional ports to the cortex services. Useful to expose extra container ports. | | alertmanager.​extraVolumeMounts | list | `[]` | Extra volume mounts that will be added to the cortex container | | alertmanager.​extraVolumes | list | `[]` | Additional volumes to the cortex pod. | | alertmanager.​initContainers | list | `[]` | Init containers to be added to the cortex pod. | | alertmanager.​livenessProbe.​httpGet.​path | string | `"/ready"` | | | alertmanager.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | alertmanager.​nodeSelector | object | `{}` | | | alertmanager.​persistentVolume.​accessModes | list | `["ReadWriteOnce"]` | Alertmanager data Persistent Volume access modes Must match those of existing PV or dynamic provisioner Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ | | alertmanager.​persistentVolume.​annotations | object | `{}` | Alertmanager data Persistent Volume Claim annotations | | alertmanager.​persistentVolume.​enabled | bool | `true` | If true and alertmanager.statefulSet.enabled is true, Alertmanager will create/use a Persistent Volume Claim If false, use emptyDir | | alertmanager.​persistentVolume.​retentionPolicy | object | `{}` | StatefulSetAutoDeletePVC feature https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention | | alertmanager.​persistentVolume.​size | string | `"2Gi"` | Alertmanager data Persistent Volume size | | alertmanager.​persistentVolume.​storageClass | string | `nil` | Alertmanager data Persistent Volume Storage Class If defined, storageClassName: If set to "-", storageClassName: "", which disables dynamic provisioning If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. | | alertmanager.​persistentVolume.​subPath | string | `""` | Subdirectory of Alertmanager data Persistent Volume to mount Useful if the volume's root directory is not empty | | alertmanager.​podAnnotations | object | `{"prometheus.io/port":"8080","prometheus.io/scrape":"true"}` | Pod Annotations | | alertmanager.​podDisruptionBudget | object | `{"maxUnavailable":1}` | If not set then a PodDisruptionBudget will not be created | | alertmanager.​podLabels | object | `{}` | Pod Labels | | alertmanager.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | alertmanager.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | alertmanager.​replicas | int | `1` | | | alertmanager.​resources | object | `{}` | | | alertmanager.​securityContext | object | `{}` | | | alertmanager.​service.​annotations | object | `{}` | | | alertmanager.​service.​labels | object | `{}` | | | alertmanager.​serviceAccount.​name | string | `""` | "" disables the individual serviceAccount and uses the global serviceAccount for that component | | alertmanager.​serviceMonitor.​additionalLabels | object | `{}` | | | alertmanager.​serviceMonitor.​enabled | bool | `false` | | | alertmanager.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | alertmanager.​serviceMonitor.​metricRelabelings | list | `[]` | | | alertmanager.​serviceMonitor.​podTargetLabels | list | `[]` | | | alertmanager.​serviceMonitor.​relabelings | list | `[]` | | | alertmanager.​sidecar.​containerSecurityContext.​enabled | bool | `true` | | | alertmanager.​sidecar.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | alertmanager.​sidecar.​defaultFolderName | string | `""` | The default folder name, it will create a subfolder under the `folder` and put rules in there instead | | alertmanager.​sidecar.​enableUniqueFilenames | bool | `false` | A value of true will produce unique filenames to avoid issues when duplicate data keys exist between ConfigMaps and/or Secrets within the same or multiple Namespaces. | | alertmanager.​sidecar.​enabled | bool | `false` | Enable sidecar that collect the configmaps with specified label and stores the included files them into the respective folders | | alertmanager.​sidecar.​folder | string | `"/data"` | Folder where the files should be placed. | | alertmanager.​sidecar.​folderAnnotation | string | `"k8s-sidecar-target-directory"` | The annotation the sidecar will look for in ConfigMaps and/or Secrets to override the destination folder for files. If the value is a relative path, it will be relative to FOLDER | | alertmanager.​sidecar.​healthPort | int | `8081` | The port the kiwigrid/k8s-sidecar listens on for health checks. The image default matches the cortex default listen port (8080), so it must be overridden here. | | alertmanager.​sidecar.​image.​repository | string | `"kiwigrid/k8s-sidecar"` | | | alertmanager.​sidecar.​image.​sha | string | `""` | | | alertmanager.​sidecar.​image.​tag | string | `"2.7.3"` | | | alertmanager.​sidecar.​imagePullPolicy | string | `"IfNotPresent"` | | | alertmanager.​sidecar.​label | string | `"cortex_alertmanager"` | Label that should be used for filtering | | alertmanager.​sidecar.​labelValue | string | `""` | The value for the label you want to filter your resources on. Don't set a value to filter by any value | | alertmanager.​sidecar.​readinessProbe.​httpGet.​path | string | `"/healthz"` | | | alertmanager.​sidecar.​readinessProbe.​httpGet.​port | string | `"sidecar-health"` | | | alertmanager.​sidecar.​readinessProbe.​periodSeconds | int | `5` | | | alertmanager.​sidecar.​resource | string | `"both"` | The resource type that the operator will filter for. Can be configmap, secret or both | | alertmanager.​sidecar.​resources | object | `{}` | | | alertmanager.​sidecar.​searchNamespace | string | `""` | The Namespace(s) from which resources will be watched. For multiple namespaces, use a comma-separated string like "default,test". If not set or set to ALL, it will watch all Namespaces. | | alertmanager.​sidecar.​skipTlsVerify | bool | `false` | Set to true to skip tls verification for kube api calls | | alertmanager.​sidecar.​startupProbe.​httpGet.​path | string | `"/healthz"` | | | alertmanager.​sidecar.​startupProbe.​httpGet.​port | string | `"sidecar-health"` | | | alertmanager.​sidecar.​startupProbe.​periodSeconds | int | `5` | | | alertmanager.​sidecar.​watchMethod | string | `""` | Determines how kopf-k8s-sidecar will run. If WATCH it will run like a normal operator forever. If LIST it will gather the matching configmaps and secrets currently present, write those files to the destination directory and die | | alertmanager.​startupProbe.​failureThreshold | int | `10` | | | alertmanager.​startupProbe.​httpGet.​path | string | `"/ready"` | | | alertmanager.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | alertmanager.​statefulSet.​enabled | bool | `false` | If true, use a statefulset instead of a deployment for pod management. This is useful for using a persistent volume for storing silences between restarts. | | alertmanager.​statefulStrategy.​type | string | `"RollingUpdate"` | | | alertmanager.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | alertmanager.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | alertmanager.​strategy.​type | string | `"RollingUpdate"` | | | alertmanager.​terminationGracePeriodSeconds | int | `60` | | | alertmanager.​tolerations | list | `[]` | Tolerations for pod assignment ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ | | alertmanager.​topologySpreadConstraints | list | `[]` | | | clusterDomain | string | `"cluster.local"` | Kubernetes cluster DNS domain | | compactor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​key | string | `"app.kubernetes.io/component"` | | | compactor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​operator | string | `"In"` | | | compactor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[0] | string | `"compactor"` | | | compactor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​topologyKey | string | `"kubernetes.io/hostname"` | | | compactor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​weight | int | `100` | | | compactor.​annotations | object | `{}` | | | compactor.​containerSecurityContext.​enabled | bool | `true` | | | compactor.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | compactor.​enabled | bool | `true` | | | compactor.​env | list | `[]` | | | compactor.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | compactor.​extraContainers | list | `[]` | | | compactor.​extraPorts | list | `[]` | | | compactor.​extraVolumeMounts | list | `[]` | | | compactor.​extraVolumes | list | `[]` | | | compactor.​initContainers | list | `[]` | | | compactor.​livenessProbe | object | `{}` | | | compactor.​nodeSelector | object | `{}` | | | compactor.​persistentVolume.​accessModes | list | `["ReadWriteOnce"]` | compactor data Persistent Volume access modes Must match those of existing PV or dynamic provisioner Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ | | compactor.​persistentVolume.​annotations | object | `{}` | compactor data Persistent Volume Claim annotations | | compactor.​persistentVolume.​enabled | bool | `true` | If true compactor will create/use a Persistent Volume Claim If false, use emptyDir | | compactor.​persistentVolume.​retentionPolicy | object | `{}` | StatefulSetAutoDeletePVC feature https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention | | compactor.​persistentVolume.​size | string | `"2Gi"` | | | compactor.​persistentVolume.​storageClass | string | `nil` | compactor data Persistent Volume Storage Class If defined, storageClassName: If set to "-", storageClassName: "", which disables dynamic provisioning If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. | | compactor.​persistentVolume.​subPath | string | `""` | Subdirectory of compactor data Persistent Volume to mount Useful if the volume's root directory is not empty | | compactor.​podAnnotations | object | `{"prometheus.io/port":"8080","prometheus.io/scrape":"true"}` | Pod Annotations | | compactor.​podDisruptionBudget.​maxUnavailable | string | `"30%"` | | | compactor.​podLabels | object | `{}` | Pod Labels | | compactor.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | compactor.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | compactor.​replicas | int | `1` | | | compactor.​resources | object | `{}` | | | compactor.​securityContext | object | `{}` | | | compactor.​service.​annotations | object | `{}` | | | compactor.​service.​labels | object | `{}` | | | compactor.​serviceAccount.​name | string | `""` | "" disables the individual serviceAccount and uses the global serviceAccount for that component | | compactor.​serviceMonitor.​additionalLabels | object | `{}` | | | compactor.​serviceMonitor.​enabled | bool | `false` | | | compactor.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | compactor.​serviceMonitor.​metricRelabelings | list | `[]` | | | compactor.​serviceMonitor.​podTargetLabels | list | `[]` | | | compactor.​serviceMonitor.​relabelings | list | `[]` | | | compactor.​startupProbe | object | `{}` | | | compactor.​strategy.​type | string | `"RollingUpdate"` | | | compactor.​terminationGracePeriodSeconds | int | `240` | | | compactor.​tolerations | list | `[]` | | | compactor.​topologySpreadConstraints | list | `[]` | | | config.​alertmanager.​cluster | object | `{"listen_address":"0.0.0.0:9094"}` | Disable alertmanager gossip cluster by setting empty listen_address to empty string | | config.​alertmanager.​enable_api | bool | `false` | Enable the experimental alertmanager config api. | | config.​alertmanager.​external_url | string | `"/api/prom/alertmanager"` | | | config.​api.​prometheus_http_prefix | string | `"/prometheus"` | | | config.​api.​response_compression_enabled | bool | `true` | Use GZIP compression for API responses. Some endpoints serve large YAML or JSON blobs which can benefit from compression. | | config.​auth_enabled | bool | `false` | | | config.​blocks_storage.​bucket_store.​bucket_index.​enabled | bool | `true` | | | config.​blocks_storage.​bucket_store.​sync_dir | string | `"/data/tsdb-sync"` | | | config.​blocks_storage.​tsdb.​dir | string | `"/data/tsdb"` | | | config.​distributor.​pool.​health_check_ingesters | bool | `true` | | | config.​distributor.​shard_by_all_labels | bool | `true` | Distribute samples based on all labels, as opposed to solely by user and metric name. | | config.​frontend.​log_queries_longer_than | string | `"10s"` | | | config.​ingester.​lifecycler.​final_sleep | string | `"30s"` | Duration to sleep for before exiting, to ensure metrics are scraped. | | config.​ingester.​lifecycler.​join_after | string | `"10s"` | We don't want to join immediately, but wait a bit to see other ingesters and their tokens first. It can take a while to have the full picture when using gossip | | config.​ingester.​lifecycler.​observe_period | string | `"10s"` | To avoid generating same tokens by multiple ingesters, they can "observe" the ring for a while, after putting their own tokens into it. This is only useful when using gossip, since multiple ingesters joining at the same time can have conflicting tokens if they don't see each other yet. | | config.​ingester.​lifecycler.​ring.​kvstore.​store | string | `"memberlist"` | | | config.​ingester.​lifecycler.​ring.​replication_factor | int | `3` | Ingester replication factor per default is 3 | | config.​ingester_client.​grpc_client_config.​max_recv_msg_size | int | `10485760` | | | config.​ingester_client.​grpc_client_config.​max_send_msg_size | int | `10485760` | | | config.​limits.​enforce_metric_name | bool | `true` | Enforce that every sample has a metric name | | config.​limits.​max_query_lookback | string | `"0s"` | | | config.​limits.​reject_old_samples | bool | `true` | | | config.​limits.​reject_old_samples_max_age | string | `"168h"` | | | config.​memberlist.​bind_port | int | `7946` | | | config.​memberlist.​join_members | list | `["{{ include \"cortex.fullname\" $ }}-memberlist"]` | the service name of the memberlist if using memberlist discovery | | config.​querier.​active_query_tracker_dir | string | `"/data/active-query-tracker"` | | | config.​querier.​store_gateway_addresses | string | automatic | Comma separated list of store-gateway addresses in DNS Service Discovery format. This option should is set automatically when using the blocks storage and the store-gateway sharding is disabled (when enabled, the store-gateway instances form a ring and addresses are picked from the ring). | | config.​query_range.​align_queries_with_step | bool | `false` | | | config.​query_range.​cache_results | bool | `true` | | | config.​query_range.​results_cache.​cache.​memcached.​expiration | string | `"1h"` | | | config.​query_range.​results_cache.​cache.​memcached_client.​timeout | string | `"1s"` | | | config.​query_range.​split_queries_by_interval | string | `"24h"` | | | config.​ruler.​enable_alertmanager_discovery | bool | `false` | | | config.​ruler.​enable_api | bool | `true` | Enable the experimental ruler config api. | | config.​runtime_config.​file | string | `"/etc/cortex-runtime-config/runtime_config.yaml"` | | | config.​server.​grpc_listen_port | int | `9095` | | | config.​server.​grpc_server_max_concurrent_streams | int | `10000` | | | config.​server.​grpc_server_max_recv_msg_size | int | `10485760` | | | config.​server.​grpc_server_max_send_msg_size | int | `10485760` | | | config.​server.​http_listen_port | int | `8080` | | | config.​store_gateway | object | `{"sharding_enabled":false}` | https://cortexmetrics.io/docs/configuration/configuration-file/#store_gateway_config | | distributor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​key | string | `"app.kubernetes.io/component"` | | | distributor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​operator | string | `"In"` | | | distributor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[0] | string | `"distributor"` | | | distributor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​topologyKey | string | `"kubernetes.io/hostname"` | | | distributor.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​weight | int | `100` | | | distributor.​annotations | object | `{}` | | | distributor.​autoscaling.​behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior | | distributor.​autoscaling.​enabled | bool | `false` | Creates a HorizontalPodAutoscaler for the distributor pods. | | distributor.​autoscaling.​extraMetrics | list | `[]` | Optional custom and external metrics for the distributor pods to scale on In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects | | distributor.​autoscaling.​maxReplicas | int | `30` | | | distributor.​autoscaling.​minReplicas | int | `2` | | | distributor.​autoscaling.​targetCPUUtilizationPercentage | int | `80` | | | distributor.​autoscaling.​targetMemoryUtilizationPercentage | int | `0` | | | distributor.​containerSecurityContext.​enabled | bool | `true` | | | distributor.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | distributor.​enabled | bool | `true` | | | distributor.​env | list | `[]` | | | distributor.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | distributor.​extraContainers | list | `[]` | | | distributor.​extraPorts | list | `[]` | | | distributor.​extraVolumeMounts | list | `[]` | | | distributor.​extraVolumes | list | `[]` | | | distributor.​initContainers | list | `[]` | | | distributor.​lifecycle | object | `{}` | | | distributor.​livenessProbe.​httpGet.​path | string | `"/ready"` | | | distributor.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | distributor.​nodeSelector | object | `{}` | | | distributor.​persistentVolume.​subPath | string | `nil` | | | distributor.​podAnnotations | object | `{"prometheus.io/port":"8080","prometheus.io/scrape":"true"}` | Pod Annotations | | distributor.​podDisruptionBudget.​maxUnavailable | string | `"30%"` | | | distributor.​podLabels | object | `{}` | Pod Labels | | distributor.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | distributor.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | distributor.​replicas | int | `2` | | | distributor.​resources | object | `{}` | | | distributor.​securityContext | object | `{}` | | | distributor.​service.​annotations | object | `{}` | | | distributor.​service.​labels | object | `{}` | | | distributor.​serviceAccount.​name | string | `""` | "" disables the individual serviceAccount and uses the global serviceAccount for that component | | distributor.​serviceMonitor.​additionalLabels | object | `{}` | | | distributor.​serviceMonitor.​enabled | bool | `false` | | | distributor.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | distributor.​serviceMonitor.​metricRelabelings | list | `[]` | | | distributor.​serviceMonitor.​podTargetLabels | list | `[]` | | | distributor.​serviceMonitor.​relabelings | list | `[]` | | | distributor.​startupProbe.​failureThreshold | int | `10` | | | distributor.​startupProbe.​httpGet.​path | string | `"/ready"` | | | distributor.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | distributor.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | distributor.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | distributor.​strategy.​type | string | `"RollingUpdate"` | | | distributor.​terminationGracePeriodSeconds | int | `60` | | | distributor.​tolerations | list | `[]` | | | distributor.​topologySpreadConstraints | list | `[]` | | | externalConfigSecretName | string | `"secret-with-config.yaml"` | | | externalConfigVersion | string | `"0"` | | | image.​pullPolicy | string | `"IfNotPresent"` | | | image.​pullSecrets | list | `[]` | Optionally specify an array of imagePullSecrets. Secrets must be manually created in the namespace. ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ | | image.​repository | string | `"quay.io/cortexproject/cortex"` | | | image.​tag | string | `""` | Allows you to override the cortex version in this chart. Use at your own risk. | | ingester.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​key | string | `"app.kubernetes.io/component"` | | | ingester.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​operator | string | `"In"` | | | ingester.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[0] | string | `"ingester"` | | | ingester.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[1] | string | `"querier"` | | | ingester.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​topologyKey | string | `"kubernetes.io/hostname"` | | | ingester.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​weight | int | `100` | | | ingester.​annotations | object | `{}` | | | ingester.​autoscaling.​behavior.​scaleDown.​policies | list | `[{"periodSeconds":1800,"type":"Pods","value":1}]` | see https://cortexmetrics.io/docs/guides/ingesters-scaling-up-and-down/#scaling-down for scaledown details | | ingester.​autoscaling.​behavior.​scaleDown.​stabilizationWindowSeconds | int | `3600` | uses metrics from the past 1h to make scaleDown decisions | | ingester.​autoscaling.​behavior.​scaleUp.​policies | list | `[{"periodSeconds":1800,"type":"Pods","value":1}]` | This default scaleup policy allows adding 1 pod every 30 minutes. Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior | | ingester.​autoscaling.​enabled | bool | `false` | | | ingester.​autoscaling.​extraMetrics | list | `[]` | Optional custom and external metrics for the ingester pods to scale on In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects | | ingester.​autoscaling.​maxReplicas | int | `30` | | | ingester.​autoscaling.​minReplicas | int | `3` | | | ingester.​autoscaling.​targetMemoryUtilizationPercentage | int | `80` | | | ingester.​containerSecurityContext.​enabled | bool | `true` | | | ingester.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | ingester.​enabled | bool | `true` | | | ingester.​env | list | `[]` | | | ingester.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | ingester.​extraContainers | list | `[]` | | | ingester.​extraPorts | list | `[]` | | | ingester.​extraVolumeMounts | list | `[]` | | | ingester.​extraVolumes | list | `[]` | | | ingester.​initContainers | list | `[]` | | | ingester.​lifecycle.​preStop | object | `{"httpGet":{"path":"/ingester/shutdown","port":"http-metrics"}}` | The /shutdown preStop hook is recommended as part of the ingester scaledown process, but can be removed to optimize rolling restarts in instances that will never be scaled down. https://cortexmetrics.io/docs/guides/ingesters-scaling-up-and-down/#scaling-down | | ingester.​livenessProbe | object | `{}` | Startup/liveness probes for ingesters are not recommended. Ref: https://cortexmetrics.io/docs/guides/running-cortex-on-kubernetes/#take-extra-care-with-ingesters | | ingester.​nodeSelector | object | `{}` | | | ingester.​persistentVolume.​accessModes | list | `["ReadWriteOnce"]` | Ingester data Persistent Volume access modes Must match those of existing PV or dynamic provisioner Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ | | ingester.​persistentVolume.​annotations | object | `{}` | Ingester data Persistent Volume Claim annotations | | ingester.​persistentVolume.​enabled | bool | `true` | If true and ingester.statefulSet.enabled is true, Ingester will create/use a Persistent Volume Claim If false, use emptyDir | | ingester.​persistentVolume.​retentionPolicy | object | `{}` | StatefulSetAutoDeletePVC feature https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention | | ingester.​persistentVolume.​size | string | `"2Gi"` | Ingester data Persistent Volume size | | ingester.​persistentVolume.​storageClass | string | `nil` | Ingester data Persistent Volume Storage Class If defined, storageClassName: If set to "-", storageClassName: "", which disables dynamic provisioning If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. | | ingester.​persistentVolume.​subPath | string | `""` | Subdirectory of Ingester data Persistent Volume to mount Useful if the volume's root directory is not empty | | ingester.​podAnnotations | object | `{"prometheus.io/port":"8080","prometheus.io/scrape":"true"}` | Pod Annotations | | ingester.​podDisruptionBudget.​maxUnavailable | int | `1` | | | ingester.​podLabels | object | `{}` | Pod Labels | | ingester.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | ingester.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | ingester.​replicas | int | `3` | | | ingester.​resources | object | `{}` | | | ingester.​securityContext | object | `{}` | | | ingester.​service.​annotations | object | `{}` | | | ingester.​service.​labels | object | `{}` | | | ingester.​serviceAccount.​name | string | `nil` | | | ingester.​serviceMonitor.​additionalLabels | object | `{}` | | | ingester.​serviceMonitor.​enabled | bool | `false` | | | ingester.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | ingester.​serviceMonitor.​metricRelabelings | list | `[]` | | | ingester.​serviceMonitor.​podTargetLabels | list | `[]` | | | ingester.​serviceMonitor.​relabelings | list | `[]` | | | ingester.​startupProbe | object | `{}` | Startup/liveness probes for ingesters are not recommended. Ref: https://cortexmetrics.io/docs/guides/running-cortex-on-kubernetes/#take-extra-care-with-ingesters | | ingester.​statefulSet.​enabled | bool | `false` | If true, use a statefulset instead of a deployment for pod management. This is useful when using WAL | | ingester.​statefulSet.​podManagementPolicy | string | `"OrderedReady"` | ref: https://cortexmetrics.io/docs/guides/ingesters-scaling-up-and-down/#scaling-down and https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies for scaledown details | | ingester.​statefulStrategy.​type | string | `"RollingUpdate"` | | | ingester.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | ingester.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | ingester.​strategy.​type | string | `"RollingUpdate"` | | | ingester.​terminationGracePeriodSeconds | int | `240` | | | ingester.​tolerations | list | `[]` | | | ingester.​topologySpreadConstraints | list | `[]` | | | ingress.​annotations | object | `{}` | | | ingress.​enabled | bool | `false` | | | ingress.​hosts[0].​host | string | `"chart-example.local"` | | | ingress.​hosts[0].​paths[0] | string | `"/"` | | | ingress.​ingressClass.​enabled | bool | `false` | | | ingress.​ingressClass.​name | string | `"nginx"` | | | ingress.​tls | list | `[]` | | | memberlist.​service.​annotations | object | `{}` | | | memberlist.​service.​labels | object | `{}` | | | memcached-blocks-index.​architecture | string | `"high-availability"` | | | memcached-blocks-index.​args | list | `["-m 1024"]` | Command line argument supplied to memcached | | memcached-blocks-index.​args[0] | string | `"-m 1024"` | The amount of memory allocated to memcached for object storage | | memcached-blocks-index.​disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use | | memcached-blocks-index.​enabled | bool | `true` | Enables support for block index caching | | memcached-blocks-index.​image.​repository | string | `"memcached"` | | | memcached-blocks-index.​image.​tag | string | `"1.6.42"` | | | memcached-blocks-index.​metrics.​enabled | bool | `true` | | | memcached-blocks-index.​metrics.​image.​repository | string | `"prom/memcached-exporter"` | | | memcached-blocks-index.​metrics.​image.​tag | string | `"v0.16.0"` | | | memcached-blocks-index.​metrics.​serviceMonitor.​enabled | bool | `false` | | | memcached-blocks-index.​replicaCount | int | `2` | | | memcached-blocks-index.​resources | object | `{}` | | | memcached-blocks-index.​service.​clusterIP | string | `"None"` | | | memcached-blocks-metadata.​architecture | string | `"high-availability"` | | | memcached-blocks-metadata.​args | list | `["-m 1024"]` | Command line argument supplied to memcached | | memcached-blocks-metadata.​args[0] | string | `"-m 1024"` | The amount of memory allocated to memcached for object storage | | memcached-blocks-metadata.​disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use | | memcached-blocks-metadata.​enabled | bool | `true` | Enables support for block metadata caching | | memcached-blocks-metadata.​image.​repository | string | `"memcached"` | | | memcached-blocks-metadata.​image.​tag | string | `"1.6.42"` | | | memcached-blocks-metadata.​metrics.​enabled | bool | `true` | | | memcached-blocks-metadata.​metrics.​image.​repository | string | `"prom/memcached-exporter"` | | | memcached-blocks-metadata.​metrics.​image.​tag | string | `"v0.16.0"` | | | memcached-blocks-metadata.​metrics.​serviceMonitor.​enabled | bool | `false` | | | memcached-blocks-metadata.​replicaCount | int | `2` | | | memcached-blocks-metadata.​resources | object | `{}` | | | memcached-blocks-metadata.​service.​clusterIP | string | `"None"` | | | memcached-blocks.​architecture | string | `"high-availability"` | | | memcached-blocks.​args | list | `["-m 1024"]` | Command line argument supplied to memcached | | memcached-blocks.​args[0] | string | `"-m 1024"` | The amount of memory allocated to memcached for object storage | | memcached-blocks.​disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use | | memcached-blocks.​enabled | bool | `true` | Enables support for block caching | | memcached-blocks.​image.​repository | string | `"memcached"` | | | memcached-blocks.​image.​tag | string | `"1.6.42"` | | | memcached-blocks.​metrics.​enabled | bool | `true` | | | memcached-blocks.​metrics.​image.​repository | string | `"prom/memcached-exporter"` | | | memcached-blocks.​metrics.​image.​tag | string | `"v0.16.0"` | | | memcached-blocks.​metrics.​serviceMonitor.​enabled | bool | `false` | | | memcached-blocks.​replicaCount | int | `2` | | | memcached-blocks.​resources | object | `{}` | | | memcached-blocks.​service.​clusterIP | string | `"None"` | | | memcached-frontend.​architecture | string | `"high-availability"` | | | memcached-frontend.​args | list | `["-m 1024"]` | Command line argument supplied to memcached | | memcached-frontend.​args[0] | string | `"-m 1024"` | The amount of memory allocated to memcached for object storage | | memcached-frontend.​disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use | | memcached-frontend.​enabled | bool | `true` | Enables support for caching queries in the frontend | | memcached-frontend.​image.​repository | string | `"memcached"` | | | memcached-frontend.​image.​tag | string | `"1.6.42"` | | | memcached-frontend.​metrics.​enabled | bool | `true` | | | memcached-frontend.​metrics.​image.​repository | string | `"prom/memcached-exporter"` | | | memcached-frontend.​metrics.​image.​tag | string | `"v0.16.0"` | | | memcached-frontend.​metrics.​serviceMonitor.​enabled | bool | `false` | | | memcached-frontend.​replicaCount | int | `2` | | | memcached-frontend.​resources | object | `{}` | | | memcached-frontend.​service.​clusterIP | string | `"None"` | | | memcached-parquet-labels.​architecture | string | `"high-availability"` | | | memcached-parquet-labels.​args | list | `["-m 1024"]` | Command line argument supplied to memcached | | memcached-parquet-labels.​args[0] | string | `"-m 1024"` | The amount of memory allocated to memcached for object storage | | memcached-parquet-labels.​disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use | | memcached-parquet-labels.​enabled | bool | `false` | Enables support for parquet labels caching | | memcached-parquet-labels.​image.​repository | string | `"memcached"` | | | memcached-parquet-labels.​image.​tag | string | `"1.6.42"` | | | memcached-parquet-labels.​metrics.​enabled | bool | `true` | | | memcached-parquet-labels.​metrics.​image.​repository | string | `"prom/memcached-exporter"` | | | memcached-parquet-labels.​metrics.​image.​tag | string | `"v0.16.0"` | | | memcached-parquet-labels.​metrics.​serviceMonitor.​enabled | bool | `false` | | | memcached-parquet-labels.​replicaCount | int | `2` | | | memcached-parquet-labels.​resources | object | `{}` | | | memcached-parquet-labels.​service.​clusterIP | string | `"None"` | | | nginx.​affinity | object | `{}` | | | nginx.​annotations | object | `{}` | | | nginx.​autoscaling.​behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior | | nginx.​autoscaling.​enabled | bool | `false` | Creates a HorizontalPodAutoscaler for the nginx pods. | | nginx.​autoscaling.​extraMetrics | list | `[]` | Optional custom and external metrics for the nginx pods to scale on In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects | | nginx.​autoscaling.​maxReplicas | int | `30` | | | nginx.​autoscaling.​minReplicas | int | `2` | | | nginx.​autoscaling.​targetCPUUtilizationPercentage | int | `80` | | | nginx.​autoscaling.​targetMemoryUtilizationPercentage | int | `0` | | | nginx.​config.​auth_orgs | list | `[]` | Optional list of [auth tenants](https://cortexmetrics.io/docs/guides/auth/) to set in the nginx config | | nginx.​config.​basicAuthSecretName | string | `""` | Optional name of basic auth secret. In order to use this option, a secret with htpasswd formatted contents at the key ".htpasswd" must exist. For example: apiVersion: v1 kind: Secret metadata: name: my-secret namespace: stringData: .htpasswd: | user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0 user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/ Please note that the use of basic auth will not identify organizations the way X-Scope-OrgID does. Thus, the use of basic auth alone will not prevent one tenant from viewing the metrics of another. To ensure tenants are scoped appropriately, explicitly set the `X-Scope-OrgID` header in the nginx config. Example setHeaders: X-Scope-OrgID: $remote_user | | nginx.​config.​client_max_body_size | string | `"1M"` | ref: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size | | nginx.​config.​dnsResolver | string | `"kube-dns.kube-system.svc.cluster.local"` | | | nginx.​config.​dnsTTL | string | `"15s"` | Including the valid parameter to the `resolver` directive to re-resolve names every `dnsTTL` seconds/minutes | | nginx.​config.​httpSnippet | string | `""` | arbitrary snippet to inject in the http { } section of the nginx config | | nginx.​config.​mainSnippet | string | `""` | arbitrary snippet to inject in the top section of the nginx config | | nginx.​config.​override_push_endpoint | string | `""` | | | nginx.​config.​serverSnippet | string | `""` | arbitrary snippet to inject in the server { } section of the nginx config | | nginx.​config.​setHeaders | object | `{}` | | | nginx.​config.​upstream_protocol | string | `"http"` | protocol for the communication with the upstream | | nginx.​config.​verboseLogging | bool | `true` | Enables all access logs from nginx, otherwise ignores 2XX and 3XX status codes | | nginx.​containerSecurityContext.​enabled | bool | `true` | | | nginx.​containerSecurityContext.​readOnlyRootFilesystem | bool | `false` | | | nginx.​enabled | bool | `true` | | | nginx.​env | list | `[]` | | | nginx.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | nginx.​extraContainers | list | `[]` | | | nginx.​extraPorts | list | `[]` | | | nginx.​extraVolumeMounts | list | `[]` | | | nginx.​extraVolumes | list | `[]` | | | nginx.​http_listen_port | int | `80` | | | nginx.​image.​pullPolicy | string | `"IfNotPresent"` | | | nginx.​image.​repository | string | `"nginx"` | | | nginx.​image.​tag | float | `1.31` | | | nginx.​initContainers | list | `[]` | | | nginx.​livenessProbe.​httpGet.​path | string | `"/healthz"` | | | nginx.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | nginx.​nodeSelector | object | `{}` | | | nginx.​persistentVolume.​subPath | string | `nil` | | | nginx.​podAnnotations | object | `{}` | Pod Annotations | | nginx.​podDisruptionBudget.​maxUnavailable | string | `"30%"` | | | nginx.​podLabels | object | `{}` | Pod Labels | | nginx.​readinessProbe.​httpGet.​path | string | `"/healthz"` | | | nginx.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | nginx.​replicas | int | `2` | | | nginx.​resources | object | `{}` | | | nginx.​securityContext | object | `{}` | | | nginx.​service.​annotations | object | `{}` | | | nginx.​service.​labels | object | `{}` | | | nginx.​service.​port | string | `""` | Replaces default port value from nginx.http_listen_port when set | | nginx.​service.​type | string | `"ClusterIP"` | | | nginx.​serviceAccount.​name | string | `""` | "" disables the individual serviceAccount and uses the global serviceAccount for that component | | nginx.​startupProbe.​failureThreshold | int | `10` | | | nginx.​startupProbe.​httpGet.​path | string | `"/healthz"` | | | nginx.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | nginx.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | nginx.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | nginx.​strategy.​type | string | `"RollingUpdate"` | | | nginx.​terminationGracePeriodSeconds | int | `10` | | | nginx.​tolerations | list | `[]` | | | nginx.​topologySpreadConstraints | list | `[]` | | | overrides_exporter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​key | string | `"app.kubernetes.io/component"` | | | overrides_exporter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​operator | string | `"In"` | | | overrides_exporter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[0] | string | `"overrides-exporter"` | | | overrides_exporter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​topologyKey | string | `"kubernetes.io/hostname"` | | | overrides_exporter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​weight | int | `100` | | | overrides_exporter.​annotations | object | `{}` | | | overrides_exporter.​containerSecurityContext.​enabled | bool | `true` | | | overrides_exporter.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | overrides_exporter.​enabled | bool | `false` | https://cortexmetrics.io/docs/guides/overrides-exporter/ | | overrides_exporter.​env | list | `[]` | | | overrides_exporter.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | overrides_exporter.​extraContainers | list | `[]` | | | overrides_exporter.​extraPorts | list | `[]` | | | overrides_exporter.​extraVolumeMounts | list | `[]` | | | overrides_exporter.​extraVolumes | list | `[]` | | | overrides_exporter.​initContainers | list | `[]` | | | overrides_exporter.​lifecycle | object | `{}` | | | overrides_exporter.​livenessProbe.​httpGet.​path | string | `"/ready"` | | | overrides_exporter.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | overrides_exporter.​nodeSelector | object | `{}` | | | overrides_exporter.​podAnnotations | object | `{"prometheus.io/port":"http-metrics","prometheus.io/scrape":"true"}` | Pod Annotations | | overrides_exporter.​podDisruptionBudget.​maxUnavailable | string | `"30%"` | | | overrides_exporter.​podLabels | object | `{}` | Pod Labels | | overrides_exporter.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | overrides_exporter.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | overrides_exporter.​replicas | int | `1` | | | overrides_exporter.​resources | object | `{}` | | | overrides_exporter.​securityContext | object | `{}` | | | overrides_exporter.​service.​annotations | object | `{}` | | | overrides_exporter.​service.​labels | object | `{}` | | | overrides_exporter.​serviceMonitor.​additionalLabels | object | `{}` | | | overrides_exporter.​serviceMonitor.​enabled | bool | `false` | | | overrides_exporter.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | overrides_exporter.​serviceMonitor.​metricRelabelings | list | `[]` | | | overrides_exporter.​serviceMonitor.​podTargetLabels | list | `[]` | | | overrides_exporter.​serviceMonitor.​relabelings | list | `[]` | | | overrides_exporter.​startupProbe.​failureThreshold | int | `10` | | | overrides_exporter.​startupProbe.​httpGet.​path | string | `"/ready"` | | | overrides_exporter.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | overrides_exporter.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | overrides_exporter.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | overrides_exporter.​strategy.​type | string | `"RollingUpdate"` | | | overrides_exporter.​terminationGracePeriodSeconds | int | `180` | | | overrides_exporter.​tolerations | list | `[]` | | | overrides_exporter.​topologySpreadConstraints | list | `[]` | | | parquet_converter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​key | string | `"app.kubernetes.io/component"` | | | parquet_converter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​operator | string | `"In"` | | | parquet_converter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[0] | string | `"parquet-converter"` | | | parquet_converter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​topologyKey | string | `"kubernetes.io/hostname"` | | | parquet_converter.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​weight | int | `100` | | | parquet_converter.​annotations | object | `{}` | | | parquet_converter.​containerSecurityContext.​enabled | bool | `true` | | | parquet_converter.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | parquet_converter.​enabled | bool | `false` | https://cortexmetrics.io/docs/guides/parquet-mode/ | | parquet_converter.​env | list | `[]` | | | parquet_converter.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | parquet_converter.​extraContainers | list | `[]` | | | parquet_converter.​extraPorts | list | `[]` | | | parquet_converter.​extraVolumeMounts | list | `[]` | | | parquet_converter.​extraVolumes | list | `[]` | | | parquet_converter.​initContainers | list | `[]` | | | parquet_converter.​lifecycle | object | `{}` | | | parquet_converter.​livenessProbe.​httpGet.​path | string | `"/ready"` | | | parquet_converter.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | parquet_converter.​nodeSelector | object | `{}` | | | parquet_converter.​podAnnotations | object | `{"prometheus.io/port":"http-metrics","prometheus.io/scrape":"true"}` | Pod Annotations | | parquet_converter.​podLabels | object | `{}` | Pod Labels | | parquet_converter.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | parquet_converter.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | parquet_converter.​replicas | int | `1` | | | parquet_converter.​resources | object | `{}` | | | parquet_converter.​securityContext | object | `{}` | | | parquet_converter.​service.​annotations | object | `{}` | | | parquet_converter.​service.​labels | object | `{}` | | | parquet_converter.​serviceMonitor.​additionalLabels | object | `{}` | | | parquet_converter.​serviceMonitor.​enabled | bool | `false` | | | parquet_converter.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | parquet_converter.​serviceMonitor.​metricRelabelings | list | `[]` | | | parquet_converter.​serviceMonitor.​podTargetLabels | list | `[]` | | | parquet_converter.​serviceMonitor.​relabelings | list | `[]` | | | parquet_converter.​startupProbe.​failureThreshold | int | `10` | | | parquet_converter.​startupProbe.​httpGet.​path | string | `"/ready"` | | | parquet_converter.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | parquet_converter.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | parquet_converter.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | parquet_converter.​strategy.​type | string | `"RollingUpdate"` | | | parquet_converter.​terminationGracePeriodSeconds | int | `180` | | | parquet_converter.​tolerations | list | `[]` | | | parquet_converter.​topologySpreadConstraints | list | `[]` | | | purger.​affinity | object | `{}` | | | purger.​annotations | object | `{}` | | | purger.​containerSecurityContext.​enabled | bool | `true` | | | purger.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | purger.​enabled | bool | `false` | | | purger.​env | list | `[]` | Extra env variables to pass to the cortex container | | purger.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | purger.​extraContainers | list | `[]` | Additional containers to be added to the cortex pod. | | purger.​extraPorts | list | `[]` | Additional ports to the cortex services. Useful to expose extra container ports. | | purger.​extraVolumeMounts | list | `[]` | Extra volume mounts that will be added to the cortex container | | purger.​extraVolumes | list | `[]` | Additional volumes to the cortex pod. | | purger.​initContainers | list | `[]` | Init containers to be added to the cortex pod. | | purger.​lifecycle | object | `{}` | | | purger.​livenessProbe.​httpGet.​path | string | `"/ready"` | | | purger.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | purger.​livenessProbe.​httpGet.​scheme | string | `"HTTP"` | | | purger.​nodeSelector | object | `{}` | | | purger.​podAnnotations.​"prometheus.​io/port" | string | `"8080"` | | | purger.​podAnnotations.​"prometheus.​io/scrape" | string | `"true"` | | | purger.​podLabels | object | `{}` | | | purger.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | purger.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | purger.​replicas | int | `1` | | | purger.​resources | object | `{}` | | | purger.​securityContext | object | `{}` | | | purger.​service.​annotations | object | `{}` | | | purger.​service.​labels | object | `{}` | | | purger.​serviceAccount.​name | string | `""` | | | purger.​serviceMonitor.​additionalLabels | object | `{}` | | | purger.​serviceMonitor.​enabled | bool | `false` | | | purger.​serviceMonitor.​extraEndpointSpec | object | `{}` | | | purger.​serviceMonitor.​metricRelabelings | list | `[]` | | | purger.​serviceMonitor.​podTargetLabels | list | `[]` | | | purger.​serviceMonitor.​relabelings | list | `[]` | | | purger.​startupProbe.​failureThreshold | int | `60` | | | purger.​startupProbe.​httpGet.​path | string | `"/ready"` | | | purger.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | purger.​startupProbe.​httpGet.​scheme | string | `"HTTP"` | | | purger.​startupProbe.​initialDelaySeconds | int | `120` | | | purger.​startupProbe.​periodSeconds | int | `30` | | | purger.​strategy.​type | string | `"RollingUpdate"` | | | purger.​terminationGracePeriodSeconds | int | `60` | | | purger.​topologySpreadConstraints | list | `[]` | | | querier.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​key | string | `"app.kubernetes.io/component"` | | | querier.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​operator | string | `"In"` | | | querier.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[0] | string | `"ingester"` | | | querier.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[1] | string | `"querier"` | | | querier.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​topologyKey | string | `"kubernetes.io/hostname"` | | | querier.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​weight | int | `100` | | | querier.​annotations | object | `{}` | | | querier.​autoscaling.​behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior | | querier.​autoscaling.​enabled | bool | `false` | Creates a HorizontalPodAutoscaler for the querier pods. | | querier.​autoscaling.​extraMetrics | list | `[]` | Optional custom and external metrics for the querier pods to scale on In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects | | querier.​autoscaling.​maxReplicas | int | `30` | | | querier.​autoscaling.​minReplicas | int | `2` | | | querier.​autoscaling.​targetCPUUtilizationPercentage | int | `80` | | | querier.​autoscaling.​targetMemoryUtilizationPercentage | int | `0` | | | querier.​containerSecurityContext.​enabled | bool | `true` | | | querier.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | querier.​enabled | bool | `true` | | | querier.​env | list | `[]` | | | querier.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | querier.​extraContainers | list | `[]` | | | querier.​extraPorts | list | `[]` | | | querier.​extraVolumeMounts | list | `[]` | | | querier.​extraVolumes | list | `[]` | | | querier.​initContainers | list | `[]` | | | querier.​lifecycle | object | `{}` | | | querier.​livenessProbe.​httpGet.​path | string | `"/ready"` | | | querier.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | querier.​nodeSelector | object | `{}` | | | querier.​persistentVolume.​subPath | string | `nil` | | | querier.​podAnnotations | object | `{"prometheus.io/port":"8080","prometheus.io/scrape":"true"}` | Pod Annotations | | querier.​podDisruptionBudget.​maxUnavailable | string | `"30%"` | | | querier.​podLabels | object | `{}` | Pod Labels | | querier.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | querier.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | querier.​replicas | int | `2` | | | querier.​resources | object | `{}` | | | querier.​securityContext | object | `{}` | | | querier.​service.​annotations | object | `{}` | | | querier.​service.​labels | object | `{}` | | | querier.​serviceAccount.​name | string | `""` | "" disables the individual serviceAccount and uses the global serviceAccount for that component | | querier.​serviceMonitor.​additionalLabels | object | `{}` | | | querier.​serviceMonitor.​enabled | bool | `false` | | | querier.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | querier.​serviceMonitor.​metricRelabelings | list | `[]` | | | querier.​serviceMonitor.​podTargetLabels | list | `[]` | | | querier.​serviceMonitor.​relabelings | list | `[]` | | | querier.​startupProbe.​failureThreshold | int | `10` | | | querier.​startupProbe.​httpGet.​path | string | `"/ready"` | | | querier.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | querier.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | querier.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | querier.​strategy.​type | string | `"RollingUpdate"` | | | querier.​terminationGracePeriodSeconds | int | `180` | | | querier.​tolerations | list | `[]` | | | querier.​topologySpreadConstraints | list | `[]` | | | query_frontend.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​key | string | `"app.kubernetes.io/component"` | | | query_frontend.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​operator | string | `"In"` | | | query_frontend.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[0] | string | `"query-frontend"` | | | query_frontend.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​topologyKey | string | `"kubernetes.io/hostname"` | | | query_frontend.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​weight | int | `100` | | | query_frontend.​annotations | object | `{}` | | | query_frontend.​containerSecurityContext.​enabled | bool | `true` | | | query_frontend.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | query_frontend.​enabled | bool | `true` | | | query_frontend.​env | list | `[]` | | | query_frontend.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | query_frontend.​extraContainers | list | `[]` | | | query_frontend.​extraPorts | list | `[]` | | | query_frontend.​extraVolumeMounts | list | `[]` | | | query_frontend.​extraVolumes | list | `[]` | | | query_frontend.​initContainers | list | `[]` | | | query_frontend.​lifecycle | object | `{}` | | | query_frontend.​livenessProbe.​httpGet.​path | string | `"/ready"` | | | query_frontend.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | query_frontend.​nodeSelector | object | `{}` | | | query_frontend.​persistentVolume.​subPath | string | `nil` | | | query_frontend.​podAnnotations | object | `{"prometheus.io/port":"8080","prometheus.io/scrape":"true"}` | Pod Annotations | | query_frontend.​podDisruptionBudget.​maxUnavailable | string | `"30%"` | | | query_frontend.​podLabels | object | `{}` | Pod Labels | | query_frontend.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | query_frontend.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | query_frontend.​replicas | int | `2` | | | query_frontend.​resources | object | `{}` | | | query_frontend.​securityContext | object | `{}` | | | query_frontend.​service.​annotations | object | `{}` | | | query_frontend.​service.​labels | object | `{}` | | | query_frontend.​serviceAccount.​name | string | `""` | "" disables the individual serviceAccount and uses the global serviceAccount for that component | | query_frontend.​serviceMonitor.​additionalLabels | object | `{}` | | | query_frontend.​serviceMonitor.​enabled | bool | `false` | | | query_frontend.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | query_frontend.​serviceMonitor.​metricRelabelings | list | `[]` | | | query_frontend.​serviceMonitor.​podTargetLabels | list | `[]` | | | query_frontend.​serviceMonitor.​relabelings | list | `[]` | | | query_frontend.​startupProbe.​failureThreshold | int | `10` | | | query_frontend.​startupProbe.​httpGet.​path | string | `"/ready"` | | | query_frontend.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | query_frontend.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | query_frontend.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | query_frontend.​strategy.​type | string | `"RollingUpdate"` | | | query_frontend.​terminationGracePeriodSeconds | int | `180` | | | query_frontend.​tolerations | list | `[]` | | | query_frontend.​topologySpreadConstraints | list | `[]` | | | query_scheduler.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​key | string | `"app.kubernetes.io/component"` | | | query_scheduler.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​operator | string | `"In"` | | | query_scheduler.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[0] | string | `"query-scheduler"` | | | query_scheduler.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​topologyKey | string | `"kubernetes.io/hostname"` | | | query_scheduler.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​weight | int | `100` | | | query_scheduler.​annotations | object | `{}` | | | query_scheduler.​containerSecurityContext.​enabled | bool | `true` | | | query_scheduler.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | query_scheduler.​enabled | bool | `false` | If true, querier and query-frontend will connect to it (requires Cortex v1.6.0+) https://cortexmetrics.io/docs/operations/scaling-query-frontend/#query-scheduler | | query_scheduler.​env | list | `[]` | | | query_scheduler.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | query_scheduler.​extraContainers | list | `[]` | | | query_scheduler.​extraPorts | list | `[]` | | | query_scheduler.​extraVolumeMounts | list | `[]` | | | query_scheduler.​extraVolumes | list | `[]` | | | query_scheduler.​initContainers | list | `[]` | | | query_scheduler.​lifecycle | object | `{}` | | | query_scheduler.​livenessProbe.​httpGet.​path | string | `"/ready"` | | | query_scheduler.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | query_scheduler.​nodeSelector | object | `{}` | | | query_scheduler.​persistentVolume.​subPath | string | `nil` | | | query_scheduler.​podAnnotations | object | `{"prometheus.io/port":"http-metrics","prometheus.io/scrape":"true"}` | Pod Annotations | | query_scheduler.​podDisruptionBudget.​maxUnavailable | int | `1` | | | query_scheduler.​podLabels | object | `{}` | Pod Labels | | query_scheduler.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | query_scheduler.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | query_scheduler.​replicas | int | `2` | | | query_scheduler.​resources | object | `{}` | | | query_scheduler.​securityContext | object | `{}` | | | query_scheduler.​service.​annotations | object | `{}` | | | query_scheduler.​service.​labels | object | `{}` | | | query_scheduler.​serviceMonitor.​additionalLabels | object | `{}` | | | query_scheduler.​serviceMonitor.​enabled | bool | `false` | | | query_scheduler.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | query_scheduler.​serviceMonitor.​metricRelabelings | list | `[]` | | | query_scheduler.​serviceMonitor.​podTargetLabels | list | `[]` | | | query_scheduler.​serviceMonitor.​relabelings | list | `[]` | | | query_scheduler.​startupProbe.​failureThreshold | int | `10` | | | query_scheduler.​startupProbe.​httpGet.​path | string | `"/ready"` | | | query_scheduler.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | query_scheduler.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | query_scheduler.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | query_scheduler.​strategy.​type | string | `"RollingUpdate"` | | | query_scheduler.​terminationGracePeriodSeconds | int | `180` | | | query_scheduler.​tolerations | list | `[]` | | | query_scheduler.​topologySpreadConstraints | list | `[]` | | | ruler.​affinity | object | `{}` | | | ruler.​annotations | object | `{}` | | | ruler.​autoscaling.​behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior | | ruler.​autoscaling.​enabled | bool | `false` | Creates a HorizontalPodAutoscaler for the ruler. | | ruler.​autoscaling.​extraMetrics | list | `[]` | Optional custom and external metrics for the ruler pods to scale on In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects | | ruler.​autoscaling.​maxReplicas | int | `30` | | | ruler.​autoscaling.​minReplicas | int | `2` | | | ruler.​autoscaling.​targetCPUUtilizationPercentage | int | `80` | | | ruler.​autoscaling.​targetMemoryUtilizationPercentage | int | `80` | | | ruler.​containerSecurityContext.​enabled | bool | `true` | | | ruler.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | ruler.​directories | object | `{}` | allow configuring rules via configmap. ref: https://cortexproject.github.io/cortex-helm-chart/guides/configure_rules_via_configmap.html | | ruler.​enabled | bool | `true` | | | ruler.​env | list | `[]` | | | ruler.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | ruler.​extraContainers | list | `[]` | | | ruler.​extraPorts | list | `[]` | | | ruler.​extraVolumeMounts | list | `[]` | | | ruler.​extraVolumes | list | `[]` | | | ruler.​initContainers | list | `[]` | | | ruler.​livenessProbe.​httpGet.​path | string | `"/ready"` | | | ruler.​livenessProbe.​httpGet.​port | string | `"http-metrics"` | | | ruler.​nodeSelector | object | `{}` | | | ruler.​podAnnotations | object | `{"prometheus.io/port":"8080","prometheus.io/scrape":"true"}` | Pod Annotations | | ruler.​podDisruptionBudget.​maxUnavailable | string | `"30%"` | | | ruler.​podLabels | object | `{}` | Pod Labels | | ruler.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | ruler.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | ruler.​replicas | int | `1` | | | ruler.​resources | object | `{}` | | | ruler.​securityContext | object | `{}` | | | ruler.​service.​annotations | object | `{}` | | | ruler.​service.​labels | object | `{}` | | | ruler.​serviceAccount.​name | string | `""` | "" disables the individual serviceAccount and uses the global serviceAccount for that component | | ruler.​serviceMonitor.​additionalLabels | object | `{}` | | | ruler.​serviceMonitor.​enabled | bool | `false` | | | ruler.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | ruler.​serviceMonitor.​metricRelabelings | list | `[]` | | | ruler.​serviceMonitor.​podTargetLabels | list | `[]` | | | ruler.​serviceMonitor.​relabelings | list | `[]` | | | ruler.​sidecar.​containerSecurityContext.​enabled | bool | `true` | | | ruler.​sidecar.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | ruler.​sidecar.​defaultFolderName | string | `""` | The default folder name, it will create a subfolder under the `folder` and put rules in there instead | | ruler.​sidecar.​enableUniqueFilenames | bool | `false` | A value of true will produce unique filenames to avoid issues when duplicate data keys exist between ConfigMaps and/or Secrets within the same or multiple Namespaces. | | ruler.​sidecar.​enabled | bool | `false` | Enable sidecar that collect the configmaps with specified label and stores the included files them into the respective folders | | ruler.​sidecar.​folder | string | `"/data/rules"` | Folder where the files should be placed. | | ruler.​sidecar.​folderAnnotation | string | `"k8s-sidecar-target-directory"` | The annotation the sidecar will look for in ConfigMaps and/or Secrets to override the destination folder for files. If the value is a relative path, it will be relative to FOLDER | | ruler.​sidecar.​healthPort | int | `8081` | The port the kiwigrid/k8s-sidecar listens on for health checks. The image default matches the cortex default listen port (8080), so it must be overridden here. | | ruler.​sidecar.​image.​repository | string | `"kiwigrid/k8s-sidecar"` | | | ruler.​sidecar.​image.​sha | string | `""` | | | ruler.​sidecar.​image.​tag | string | `"2.7.3"` | | | ruler.​sidecar.​imagePullPolicy | string | `"IfNotPresent"` | | | ruler.​sidecar.​label | string | `"cortex_rules"` | label that the configmaps with rules are marked with | | ruler.​sidecar.​labelValue | string | `""` | The value for the label you want to filter your resources on. Don't set a value to filter by any value | | ruler.​sidecar.​readinessProbe.​httpGet.​path | string | `"/healthz"` | | | ruler.​sidecar.​readinessProbe.​httpGet.​port | string | `"sidecar-health"` | | | ruler.​sidecar.​readinessProbe.​periodSeconds | int | `5` | | | ruler.​sidecar.​resource | string | `"both"` | The resource type that the operator will filter for. Can be configmap, secret or both | | ruler.​sidecar.​resources | object | `{}` | | | ruler.​sidecar.​searchNamespace | string | `""` | The Namespace(s) from which resources will be watched. For multiple namespaces, use a comma-separated string like "default,test". If not set or set to ALL, it will watch all Namespaces. | | ruler.​sidecar.​skipTlsVerify | bool | `false` | Set to true to skip tls verification for kube api calls | | ruler.​sidecar.​startupProbe.​httpGet.​path | string | `"/healthz"` | | | ruler.​sidecar.​startupProbe.​httpGet.​port | string | `"sidecar-health"` | | | ruler.​sidecar.​startupProbe.​periodSeconds | int | `5` | | | ruler.​sidecar.​watchMethod | string | `""` | Determines how kopf-k8s-sidecar will run. If WATCH it will run like a normal operator forever. If LIST it will gather the matching configmaps and secrets currently present, write those files to the destination directory and die | | ruler.​startupProbe.​failureThreshold | int | `10` | | | ruler.​startupProbe.​httpGet.​path | string | `"/ready"` | | | ruler.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | ruler.​strategy.​rollingUpdate.​maxSurge | int | `0` | | | ruler.​strategy.​rollingUpdate.​maxUnavailable | int | `1` | | | ruler.​strategy.​type | string | `"RollingUpdate"` | | | ruler.​terminationGracePeriodSeconds | int | `180` | | | ruler.​tolerations | list | `[]` | | | ruler.​topologySpreadConstraints | list | `[]` | | | ruler.​validation.​enabled | bool | `true` | Checks that the ruler is compatible with horizontal scaling, as documented in https://cortexmetrics.io/docs/guides/ruler-sharding/. You may need to disable this if your config is compatible, but not understood by the validator. | | runtimeconfigmap.​annotations | object | `{}` | | | runtimeconfigmap.​create | bool | `true` | If true, a configmap for the `runtime_config` will be created. If false, the configmap _must_ exist already on the cluster or pods will fail to create. | | runtimeconfigmap.​runtime_config | object | `{}` | https://cortexmetrics.io/docs/configuration/arguments/#runtime-configuration-file | | serviceAccount.​annotations | object | `{}` | | | serviceAccount.​automountServiceAccountToken | bool | `true` | | | serviceAccount.​create | bool | `true` | | | serviceAccount.​name | string | `nil` | | | store_gateway.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​key | string | `"app.kubernetes.io/component"` | | | store_gateway.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​operator | string | `"In"` | | | store_gateway.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​labelSelector.​matchExpressions[0].​values[0] | string | `"store-gateway"` | | | store_gateway.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​podAffinityTerm.​topologyKey | string | `"kubernetes.io/hostname"` | | | store_gateway.​affinity.​podAntiAffinity.​preferredDuringSchedulingIgnoredDuringExecution[0].​weight | int | `100` | | | store_gateway.​annotations | object | `{}` | | | store_gateway.​autoscaling.​behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior | | store_gateway.​autoscaling.​enabled | bool | `false` | | | store_gateway.​autoscaling.​extraMetrics | list | `[]` | Optional custom and external metrics for the store gateway pods to scale on In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects | | store_gateway.​autoscaling.​maxReplicas | int | `30` | | | store_gateway.​autoscaling.​minReplicas | int | `3` | | | store_gateway.​autoscaling.​targetMemoryUtilizationPercentage | int | `80` | | | store_gateway.​containerSecurityContext.​enabled | bool | `true` | | | store_gateway.​containerSecurityContext.​readOnlyRootFilesystem | bool | `true` | | | store_gateway.​enabled | bool | `true` | | | store_gateway.​env | list | `[]` | | | store_gateway.​extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) | | store_gateway.​extraContainers | list | `[]` | | | store_gateway.​extraPorts | list | `[]` | | | store_gateway.​extraVolumeMounts | list | `[]` | | | store_gateway.​extraVolumes | list | `[]` | | | store_gateway.​initContainers | list | `[]` | | | store_gateway.​livenessProbe | object | `{}` | | | store_gateway.​nodeSelector | object | `{}` | | | store_gateway.​persistentVolume.​accessModes | list | `["ReadWriteOnce"]` | Store-gateway data Persistent Volume access modes Must match those of existing PV or dynamic provisioner Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ | | store_gateway.​persistentVolume.​annotations | object | `{}` | Store-gateway data Persistent Volume Claim annotations | | store_gateway.​persistentVolume.​enabled | bool | `true` | If true Store-gateway will create/use a Persistent Volume Claim If false, use emptyDir | | store_gateway.​persistentVolume.​retentionPolicy | object | `{}` | StatefulSetAutoDeletePVC feature https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention | | store_gateway.​persistentVolume.​size | string | `"2Gi"` | Store-gateway data Persistent Volume size | | store_gateway.​persistentVolume.​storageClass | string | `nil` | Store-gateway data Persistent Volume Storage Class If defined, storageClassName: If set to "-", storageClassName: "", which disables dynamic provisioning If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. | | store_gateway.​persistentVolume.​subPath | string | `""` | Subdirectory of Store-gateway data Persistent Volume to mount Useful if the volume's root directory is not empty | | store_gateway.​podAnnotations | object | `{"prometheus.io/port":"8080","prometheus.io/scrape":"true"}` | Pod Annotations | | store_gateway.​podDisruptionBudget.​maxUnavailable | int | `1` | | | store_gateway.​podLabels | object | `{}` | Pod Labels | | store_gateway.​podManagementPolicy | string | `"OrderedReady"` | https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies | | store_gateway.​readinessProbe.​httpGet.​path | string | `"/ready"` | | | store_gateway.​readinessProbe.​httpGet.​port | string | `"http-metrics"` | | | store_gateway.​replicas | int | `1` | | | store_gateway.​resources | object | `{}` | | | store_gateway.​securityContext | object | `{}` | | | store_gateway.​service.​annotations | object | `{}` | | | store_gateway.​service.​labels | object | `{}` | | | store_gateway.​serviceAccount.​name | string | `""` | "" disables the individual serviceAccount and uses the global serviceAccount for that component | | store_gateway.​serviceMonitor.​additionalLabels | object | `{}` | | | store_gateway.​serviceMonitor.​enabled | bool | `false` | | | store_gateway.​serviceMonitor.​extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint | | store_gateway.​serviceMonitor.​metricRelabelings | list | `[]` | | | store_gateway.​serviceMonitor.​podTargetLabels | list | `[]` | | | store_gateway.​serviceMonitor.​relabelings | list | `[]` | | | store_gateway.​startupProbe.​failureThreshold | int | `60` | | | store_gateway.​startupProbe.​httpGet.​path | string | `"/ready"` | | | store_gateway.​startupProbe.​httpGet.​port | string | `"http-metrics"` | | | store_gateway.​startupProbe.​httpGet.​scheme | string | `"HTTP"` | | | store_gateway.​startupProbe.​initialDelaySeconds | int | `120` | | | store_gateway.​startupProbe.​periodSeconds | int | `30` | | | store_gateway.​strategy.​type | string | `"RollingUpdate"` | | | store_gateway.​terminationGracePeriodSeconds | int | `240` | | | store_gateway.​tolerations | list | `[]` | | | store_gateway.​topologySpreadConstraints | list | `[]` | | | useConfigMap | bool | `false` | | | useExternalConfig | bool | `false` | | ================================================ FILE: README.md.gotmpl ================================================ {{ template "chart.header" . }} {{ template "chart.deprecationWarning" . }} {{ template "chart.badgesSection" . }} {{ template "chart.description" . }} {{ template "chart.homepageLine" . }} {{ template "chart.maintainersSection" . }} ## Documentation Checkout our documentation for the cortex-helm-chart [here](https://cortexproject.github.io/cortex-helm-chart/) ## Dependencies ### Key-Value store Cortex requires a Key-Value (KV) store to store the ring. It can use traditional KV stores like [Consul](https://www.consul.io/) or [etcd](https://etcd.io/), but it can also build its own KV store on top of memberlist library using a gossip algorithm. The recommended approach is to use the built-in memberlist as a KV store, where supported. External KV stores can be installed alongside Cortex using their respective helm charts https://github.com/bitnami/charts/tree/master/bitnami/etcd and https://github.com/hashicorp/consul-k8s/tree/main/charts/consul. ### Storage Cortex requires a storage backend to store metrics and indexes. See [cortex documentation](https://cortexmetrics.io/docs/) for details on storage types and documentation ## Installation [Helm](https://helm.sh) must be installed to use the charts. Please refer to Helm's [documentation](https://helm.sh/docs/) to get started. Once Helm is set up properly, add the repo as follows: ```bash helm repo add cortex-helm https://cortexproject.github.io/cortex-helm-chart ``` Cortex can now be installed with the following command: ```bash helm install cortex --namespace cortex cortex-helm/cortex ``` If you have custom options or values you want to override: ```bash helm install cortex --namespace cortex -f my-cortex-values.yaml cortex-helm/cortex ``` Specific versions of the chart can be installed using the `--version` option, with the default being the latest release. What versions are available for installation can be listed with the following command: ```bash helm search repo cortex-helm ``` As part of this chart many different pods and services are installed which all have varying resource requirements. Please make sure that you have sufficient resources (CPU/memory) available in your cluster before installing Cortex Helm chart. ## Upgrades To upgrade Cortex use the following command: ```bash helm upgrade cortex -f my-cortex-values.yaml cortex-helm/cortex ``` Note that it might be necessary to use `--reset-values` since some default values in the values.yaml might have changed or were removed. Source code can be found [here](https://cortexmetrics.io/) {{ template "chart.requirementsSection" . }} {{ define "chart.valuesTable" }} | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} | {{ .Key | replace "." ".​" }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{ end }} {{ template "chart.valuesSection" . }} ================================================ FILE: ci/test-configmap-values.yaml ================================================ ingress: enabled: true useConfigMap: true config: ingester: lifecycler: join_after: 30s final_sleep: 30s tokens_file_path: "/data/tokens" ring: replication_factor: 1 kvstore: store: "memberlist" blocks_storage: backend: "filesystem" tsdb: dir: "/data/tsdb" bucket_store: sync_dir: "/data/tsdb-sync" filesystem: dir: "/data/store" distributor: ring: kvstore: store: memberlist ruler: ring: kvstore: store: memberlist ruler_storage: backend: "filesystem" filesystem: dir: "/data/store" alertmanager_storage: backend: "filesystem" filesystem: dir: "/data/store" memberlist: join_members: - '{{ include "cortex.fullname" $ }}-memberlist' ingester: replicas: 1 autoscaling: enabled: true minReplicas: 1 statefulSet: enabled: false extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test compactor: replicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test distributor: replicas: 1 autoscaling: enabled: true minReplicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test querier: replicas: 1 autoscaling: enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test query_frontend: replicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test nginx: replicas: 1 autoscaling: enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test config: httpSnippet: |- # http snippet mainSnippet: |- # main snippet serverSnippet: |- # server snippet runtimeconfigmap: annotations: foo: bar alertmanager: replicas: 1 statefulSet: enabled: false extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test sidecar: enabled: true ruler: replicas: 1 enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test sidecar: enabled: true store_gateway: startupProbe: null replicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test memcached-frontend: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 memcached-blocks: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 memcached-blocks-index: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 memcached-blocks-metadata: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 ================================================ FILE: ci/test-deployment-values.yaml ================================================ ingress: enabled: true config: ingester: lifecycler: join_after: 30s final_sleep: 30s tokens_file_path: "/data/tokens" ring: replication_factor: 1 kvstore: store: "memberlist" blocks_storage: backend: "filesystem" tsdb: dir: "/data/tsdb" bucket_store: sync_dir: "/data/tsdb-sync" filesystem: dir: "/data/store" distributor: ring: kvstore: store: memberlist ruler: ring: kvstore: store: memberlist ruler_storage: backend: "filesystem" filesystem: dir: "/data/store" alertmanager_storage: backend: "filesystem" filesystem: dir: "/data/store" memberlist: join_members: - '{{ include "cortex.fullname" $ }}-memberlist' ingester: replicas: 1 autoscaling: enabled: true minReplicas: 1 statefulSet: enabled: false extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test compactor: replicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test distributor: replicas: 1 autoscaling: enabled: true minReplicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test querier: replicas: 1 autoscaling: enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test query_frontend: replicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test query_scheduler: replicas: 1 enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test nginx: replicas: 1 autoscaling: enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test config: httpSnippet: |- # http snippet mainSnippet: |- # main snippet serverSnippet: |- # server snippet runtimeconfigmap: annotations: foo: bar alertmanager: replicas: 3 statefulSet: enabled: false extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test sidecar: enabled: true ruler: replicas: 1 enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test sidecar: enabled: true store_gateway: startupProbe: null replicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test memcached-frontend: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 memcached-blocks: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 memcached-blocks-index: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 memcached-blocks-metadata: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 ================================================ FILE: ci/test-sts-values.yaml ================================================ ingress: enabled: true config: ingester: lifecycler: join_after: 30s final_sleep: 30s tokens_file_path: "/data/tokens" ring: replication_factor: 1 kvstore: store: "memberlist" blocks_storage: backend: "filesystem" tsdb: dir: "/data/tsdb" bucket_store: sync_dir: "/data/tsdb-sync" filesystem: dir: "/data/store" distributor: ring: kvstore: store: memberlist ruler: ring: kvstore: store: memberlist ruler_storage: backend: "filesystem" filesystem: dir: "/data/store" alertmanager_storage: backend: "filesystem" filesystem: dir: "/data/store" memberlist: join_members: - '{{ include "cortex.fullname" $ }}-memberlist' ingester: replicas: 1 autoscaling: enabled: true minReplicas: 1 statefulSet: enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test compactor: replicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test distributor: replicas: 1 autoscaling: enabled: true minReplicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test querier: replicas: 1 autoscaling: enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test query_frontend: replicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test nginx: replicas: 1 autoscaling: enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test config: httpSnippet: |- # http snippet mainSnippet: |- # main snippet serverSnippet: |- # server snippet runtimeconfigmap: annotations: foo: bar alertmanager: replicas: 3 statefulSet: enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test sidecar: enabled: true ruler: replicas: 1 enabled: true extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test sidecar: enabled: true store_gateway: startupProbe: null replicas: 1 extraVolumes: - name: tmp-test emptyDir: {} extraVolumeMounts: - name: tmp-test mountPath: /tmp-test memcached-frontend: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 memcached-blocks: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 memcached-blocks-index: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 memcached-blocks-metadata: enabled: true architecture: standalone replicaCount: 1 resources: requests: cpu: 0 memory: 0 ================================================ FILE: ct.yaml ================================================ # See https://github.com/helm/chart-testing#configuration remote: origin validate-maintainers: false # ct requires the maintainers to be a github name, which is not valid for this chart. charts: - "./" chart-repos: - base-charts=https://charts.helm.sh/stable - bitnami=https://charts.bitnami.com/bitnami helm-extra-args: --timeout 600s ================================================ FILE: docs/.gitignore ================================================ _site .sass-cache .jekyll-cache .jekyll-metadata vendor ================================================ FILE: docs/404.html ================================================ --- permalink: /404.html layout: default ---

404

Page not found :(

The requested page could not be found.

================================================ FILE: docs/Gemfile ================================================ source "https://rubygems.org" # Hello! This is where you manage which Jekyll version is used to run. # When you want to use a different version, change it below, save the # file and run `bundle install`. Run Jekyll with `bundle exec`, like so: # # bundle exec jekyll serve # # This will help ensure the proper Jekyll version is running. # Happy Jekylling! # gem "jekyll", "~> 4.2.0" # This is the default theme for new Jekyll sites. You may change this to anything you like. gem "minima", "~> 2.5" # If you want to use GitHub Pages, remove the "gem "jekyll"" above and # uncomment the line below. To upgrade, run `bundle update github-pages`. gem "github-pages","~> 228", group: :jekyll_plugins gem "just-the-docs" # If you have any plugins, put them here! group :jekyll_plugins do gem "jekyll-feed", "~> 0.12" end # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # and associated library. platforms :mingw, :x64_mingw, :mswin, :jruby do gem "tzinfo", "~> 2.0" gem "tzinfo-data" end # Performance-booster for watching directories on Windows gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] ================================================ FILE: docs/_config.yml ================================================ title: cortex-helm-chart email: cortex-team@googlegroups.com description: >- Cortex is a horizontally scalable, highly available, multi-tenant, long term Prometheus. The cortex-helm-chart helps the operator with deploying cortex on a Kubernetes cluster. twitter_username: CortexMetrics github_username: cortexproject # Build settings remote_theme: pmarsceill/just-the-docs # color_scheme: "dark" footer_content: "Copyright © 2022 cortexproject. Distributed by an Apache License 2.0." ================================================ FILE: docs/_layouts/home.html ================================================ --- layout: default --- {{ content }} ================================================ FILE: docs/_layouts/page.html ================================================ --- layout: default --- {{ content }} ================================================ FILE: docs/development/developing_the_docs.md ================================================ --- layout: page title: Working with the cortex-helm-chart docs parent: Development has_children: false has_toc: false --- # Working with the cortex-helm-chart docs {: .no_toc } ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- # Setup The cortex-helm-chart docs uses [jekyll](https://jekyllrb.com/) with the [just-the-docs](https://github.com/pmarsceill/just-the-docs) theme. Unfortunately due to security concerns GitHub doesn't let us preview from pull requests or different branches. However GitHub created [this](https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/testing-your-github-pages-site-locally-with-jekyll) guide on how to test your changes locally. # Preview After installing ruby and bundle. Simply change into the `/docs` folder of the cortex-helm-chart and run: ``` bundle exec jekyll serve --incremental --livereload ``` For further options you can consult `bundle exec jekyll serve --help` ================================================ FILE: docs/development.md ================================================ --- layout: page title: Development nav_order: 3 has_children: true permalink: /docs/development --- # Development {: .no_toc } Tutorials on how to develop the chart locally {: .fs-6 .fw-300 } ================================================ FILE: docs/guides/configure_configmap.markdown ================================================ --- layout: page title: Configuring Cortex with configmap parent: Guides has_children: false has_toc: false --- # Configuring Cortex with configmap {: .no_toc } ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- # Configuring Cortex with configmap By default, cortex configuration is managed using a `Secret`. To use a `ConfigMap` instead, set **useConfigMap**: {% raw %} ```yaml useConfigMap: true ``` {% endraw %} Note: if **useConfigMap** is enabled, sensitive values should be stored in separate secrets, then referenced in the config [using environment variables](https://cortexmetrics.io/docs/configuration/configuration-file/#use-environment-variables-in-the-configuration). Use `extraVolumes`, `extraVolumeMounts`, `extraEnvs`, and `extraArgs` to add environment variables from secrets. ================================================ FILE: docs/guides/configure_memberlist.markdown ================================================ --- layout: page title: Configure memberlist parent: Guides has_children: false has_toc: false --- # Configure memberlist {: .no_toc } ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- # Setup The cortex-helm-chart recommends using memberlist as the kvstore (not available yet for the ha-tracker kvstore). Cortex components deployed with the cortex-helm-chart will automatically join the gossip ring. More Information on why memberlist might be a good idea can be found [here](https://grafana.com/blog/2020/03/25/how-were-using-gossip-to-improve-cortex-and-loki-availability/) For example: ```yaml [...] kvstore: store: "memberlist" ``` ================================================ FILE: docs/guides/configure_memcached.markdown ================================================ --- layout: page title: Configure memcached parent: Guides has_children: false has_toc: false --- # Configuring memcached as the caching store {: .no_toc } ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- # Configuring memcached as the caching store Correctly configuring memcached for your needs is a very delicate task. But courtesy of [@thobianchi](https://github.com/thobianchi) this might be a good start. {% raw %} ```yaml index_cache: backend: memcached memcached: addresses: 'dns+{{ include "cortex.fullname" $ }}-memcached-blocks-index:11211' timeout: 300ms max_idle_connections: 750 max_async_concurrency: 100 max_async_buffer_size: 10000000 max_get_multi_concurrency: 750 max_get_multi_batch_size: 1000 max_item_size: 16777216 chunks_cache: backend: memcached memcached: addresses: 'dns+{{ include "cortex.fullname" $ }}-memcached-blocks:11211' timeout: 300ms max_idle_connections: 750 max_async_concurrency: 100 max_async_buffer_size: 10000000 max_get_multi_concurrency: 750 max_get_multi_batch_size: 1000 max_item_size: 33554432 metadata_cache: backend: memcached memcached: addresses: 'dns+{{ include "cortex.fullname" $ }}-blocks-metadata:11211' timeout: 300ms max_idle_connections: 750 max_async_concurrency: 100 max_async_buffer_size: 10000000 max_get_multi_concurrency: 750 max_get_multi_batch_size: 1000 max_item_size: 16777216 ``` {% endraw %} ================================================ FILE: docs/guides/configure_ruler_and_alertmanager_with_configmap.markdown ================================================ --- layout: page title: Configure Ruler and Alertmanager with configmap parent: Guides has_children: false has_toc: false --- # Configure Ruler and Alertmanager with configmap {: .no_toc } ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- # Preface Cortex's Ruler and Alertmanager can be setup to use ConfigMaps to provide themselves with a configuration that can be dynamically updated. We simply put ConfigMaps into the same namespace where cortex is running, and they are automatically detected and mounted as files to the Ruler and/or AlertManager containers. The containers are also constantly polling for changes to the ConfigMaps. If any changes are found, the configuration file on the container will be updated. It should be noted that this guide is assuming that multi-tenancy is enabled : ```yaml auth_enabled: true ``` # Setup In order to get this working, we must do a couple things. ## Create Ruler ConfigMap To provide the Ruler with the *rules* to alert on, we must create a ConfigMap with the desired ruleset. How you maintain and deploy the ConfigMap is completely in your control, the only requirement is that the ConfigMap be on the same namespace as the Ruler. **IMPORTANT** things to note: - This ruleset is ONLY for tenantfoo (We will explicitly map it to tenantfoo later). - The section under `tenantfoo.yaml` is validated and interpreted exactly as a [Prometheus alerting rules configuration](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/) would be. How you configure this is completely up to you. - [Prometheus recording rules](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/) are also configured here in the same way as alerting rules. ```yaml kind: ConfigMap metadata: name: tenantfoo-ruler-config namespace: cortex apiVersion: v1 data: tenantfoo.yaml: |- groups: - name: rules: - alert: expr: for: labels: severity: annotations: description: ``` ## Create Alertmanager ConfigMap To provide the Alertmanager with the information needed to *route* notifications to stakeholders, we must create a ConfigMap with the desired routing rules. How you maintain and deploy the ConfigMap is completely in your control, the only requirement is that the ConfigMap be on the same namespace as the Alertmanager. **IMPORTANT** things to note: - These routing rules are ONLY for tenantfoo. The Alertmanager takes the key under `data` (excluding `.yaml`) and uses it as the tenant name for that specific config. - The section under `tenantfoo.yaml` is validated and interpreted exactly as a [Alertmanager configuration](hhttps://prometheus.io/docs/alerting/latest/configuration/#configuration-file) would be. How you configure this is completely up to you. ```yaml kind: ConfigMap metadata: name: tenantfoo-alertmanager-config namespace: cortex apiVersion: v1 data: tenantfoo.yaml: | global: resolve_timeout: http_config: {} smtp_from: ExamplePerson smtp_hello: example.com smtp_smarthost: example-smtp.example.com route: receiver: team-X-mails group_by: ['alertname'] group_wait: group_interval: repeat_interval: receivers: - name: 'team-X-mails' email_configs: - to: 'example@example.com' ``` ## Helm Chart Configuration Now that the ConfigMaps are created, we can tinker the helm chart to achieve our goal. ### Configuration for Ruler and Alertmanager Config Add this to the `values.yaml` under the `config` section as shown. ```yaml config: ruler: enable_api: true # already set-up temporary emptyDir volume. Cortex will parse rules from /data/rules # and copy them here for prometheus rule evaluation rule_path: /rules ruler_storage: backend: "local" local: # where your mounted configmap data will be temporary stored directory: /data/rules alertmanager: enable_api: true # temporary volume if not using stateful alertmanagers data_dir: /data alertmanager_storage: backend: "local" local: # temporary volume if not using stateful alertmanagers path: /data ``` ### Configuration for Ruler and Alertmanager Add this to the `values.yaml`. Note that when we mount `tenantfoo-ruler-config`, we mount it under a folder which should be named after the tenant it corresponds to. In this situation, since we want `tenantfoo-ruler-config` to be the alerting rules for `tenantfoo`, we mount it under `/data/rules/tenantfoo`. Also note that for `tenantfoo-alertmanager-config`, we similarily mount it under a folder specific to that tenant. Although it will not use the folder name as the tenant name (it instead uses the key name under `data` in the ConfigMap), it simplifies things if you do so. ```yaml ruler: extraVolumes: - configMap: defaultMode: 420 name: tenantfoo-ruler-config name: tenantfoo-ruler-config extraVolumeMounts: - name: tenantfoo-ruler-config mountPath: /data/rules/tenantfoo alertmanager: extraVolumes: - configMap: defaultMode: 420 name: tenantfoo-alertmanager-config name: tenantfoo-alertmanager-config extraVolumeMounts: - name: tenantfoo-alertmanager-config mountPath: /data/tenantfoo ``` # Result You can now install the helm chart. You may use the section below to verify the configuration went according to plan. ### Verify Alertmanager 1. Port-forward the alertmanager pod 2. Run `curl -X GET -H "X-Scope-OrgID: " localhost:8080/api/v1/alerts` 3. Verify the correct configuration shows up ### Verify Ruler 1. Port-forward the ruler pod 2. Run `curl -X GET -H "X-Scope-OrgID: " localhost:8080/api/v1/rules` 3. Verify the correct configuration shows up # Moving forward You can also follow this guide if you don't have multi-tenancy enabled. However, in this case, you will not get alerting/routing rules specific to each tenant. Defining fine-grained alerting/routing rules per tenant is when you really get to eat the fruits of your labour when deploying multi-tenant alertmanager/ruler. For example, lets say you currently only have routing rules for tenantfoo. If you wanted to add specific routing rules for another tenant, tenantB, you will do the following: 1. Create another set of ConfigMaps for the new tenants, being sure to adhere to the naming policies stated in this guide 2. Add entries under `extraVolumes` and `extraVolumeMounts` for the Ruler and Alertmanager. All while being sure to adhere to the naming policies stated in this guide 3. [Verify the new tenant is configured](#result) ================================================ FILE: docs/guides/configure_rules_via_configmap.markdown ================================================ --- layout: page title: Configure rules via configmap parent: Guides has_children: false has_toc: false --- # Configure rules via configmap {: .no_toc } ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- # Configure rules via configmap In your cortex-helm-chart you can now specify a static configuration of ruler rules. ```yaml ruler: directories: tenant_foo: rules1.txt: | groups: - name: should_fire rules: - alert: HighPercentageError expr: | sum(rate({app="foo", env="production"} |= "error" [5m])) by (job) / sum(rate({app="foo", env="production"}[5m])) by (job) > 0.05 for: 10m labels: severity: warning annotations: summary: High error rate ``` ================================================ FILE: docs/guides/configure_rules_via_sidecar.markdown ================================================ --- layout: page title: Configure rules via sidecar parent: Guides has_children: false has_toc: false --- # Configure rules via sidecar {: .no_toc } ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- # Rules and AlertManager configuration Cortex can be configured to use a sidecar container in the Ruler and AlertManager to dynamically discover rules and AlertManager config/templates that are declared as ConfigMaps to allow easy and extensible configuration that avoids having to store state in the Cortex system itself (via config service, etc). Put ConfigMaps into the specified namespace, and they are automatically detected and added as files to the Ruler and/or AlertManager containers, both of which are polling for changes on the filesystem and will make the new configurations go live dynamically. This feature is disabled by default. Here is a simple example: Please note that this is only supported with the **local** backend. Otherwise cortex will overwrite what the operator[^1] puts in the folder with what is in s3/gcs/azure/swift. Cortex does not 2-way sync the files. Also please be aware of the following: - local alertmanager config storage is read-only (cortex API is severely limited to read-only requests) - local alertmanager storage does not support state persistency (however your configurations are saved in etcd via kubernetes) - local ruler storage does not support RuleGroups - local ruler storage does not support namespaces [^1]: Also referenced here as the sidecar. Effectively the sidecar is an image which is an kubernetes operator. ## Helm values config ```yaml ruler: sidecar: enabled: true searchNamespace: cortex-rules alertmanager: sidecar: enabled: true searchNamespace: cortex-alertmanager ``` And here are the related configuration values in AlertManager and Ruler: ```yaml config: ruler: enable_api: true # already set-up temporary emptyDir volume. Cortex will parse rules from /data/rules # and copy them here for prometheus rule evaluation rule_path: /rules ruler_storage: backend: "local" local: # temporary volume of type emptyDir directory: /data/rules alertmanager: enable_api: true # temporary volume if not using stateful alertmanagers data_dir: /data alertmanager_storage: backend: "local" local: # temporary volume if not using stateful alertmanagers path: /data ``` ## Creating alerting/recording rules and alertmanager configs In AlertManager, the `data_dir` and local storage directory should be the same. In the Ruler, there need to be two separate volumes. One is used by Cortex for evaluating alerting and recording rules (/rules) and should be temporary. The other is used by the user (YOU) to temporarily store your alerting and recording rules (/data/rules). Example ConfigMap containing an alerting rule: {% raw %} ```yaml kind: ConfigMap metadata: annotations: # Override destination folder so we can save the config under /data/rules//tenantfoo.yaml k8s-sidecar-target-directory: /data/rules/tenantfoo labels: # Label cortex_rules must exist unless overridden by ruler.sidecar.label cortex_rules: "1" name: rules-cortex-9f99md47tc namespace: cortex-rules apiVersion: v1 data: tenantfoo.yaml: |- groups: - name: tenantfoo-system-metrics rules: - alert: HighCPUUsage expr: avg(100 - rate(node_cpu_seconds_total{instance=~"qag1ge1l.+",mode="idle"}[5m]) * 100) by (instance) > 100 for: 3m labels: severity: warning annotations: description: Metrics from {{ $labels.job }} on {{ $labels.instance }} show CPU > 90% for 3m. title: Node {{ $labels.instance }} has high CPU usage ``` {% endraw %} Example ConfigMap containing an alertmanager-config: ```yaml apiVersion: v1 kind: ConfigMap metadata: annotations: k8s-sidecar-target-directory: /data/tenantfoo labels: cortex_alertmanager: "1" name: alertmanager-example-config data: tenantfoo.yaml: |- global: resolve_timeout: 5m http_config: {} smtp_hello: localhost smtp_require_tls: true route: receiver: team-X-mails group_by: - alertname routes: - receiver: "null" match: alertname: Watchdog group_wait: 30s group_interval: 5m repeat_interval: 12h receivers: - name: 'team-X-mails' email_configs: - to: 'team-X+alerts@example.org' ``` ================================================ FILE: docs/guides/getting_started_with_block_storage.markdown ================================================ --- layout: page title: Getting started with block storage parent: Guides has_children: false has_toc: false nav_order: 1 --- # Getting started with block storage {: .no_toc } ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- # Getting Started A quick example configuration on how to get started with block storage can be found here ```yaml # This file provides helm values to configure Cortex for blocks storage on AWS S3. # Be sure to edit region, endpoint, and bucket_name for your environment. config: alertmanager_storage: s3: bucket_name: # your bucket name region: us-east-1 endpoint: s3.us-east-1.amazonaws.com blocks_storage: backend: s3 s3: bucket_name: # your bucket name region: us-east-1 # -- The S3 bucket endpoint. It could be an AWS S3 endpoint listed at # https://docs.aws.amazon.com/general/latest/gr/s3.html or the address of an # S3-compatible service in hostname:port format. endpoint: s3.us-east-1.amazonaws.com bucket_store: sync_dir: "/data" tsdb: dir: "/data" querier: # -- Comma separated list of store-gateway addresses in DNS Service Discovery # format. This option should be set when using the blocks storage and the # store-gateway sharding is disabled (when enabled, the store-gateway instances # form a ring and addresses are picked from the ring). store_gateway_addresses: dns+cortex-store-gateway-headless.cortex.svc:9095 ruler_storage: s3: bucket_name: # your bucket name region: us-east-1 endpoint: s3.us-east-1.amazonaws.com ``` ================================================ FILE: docs/guides/upgrade-v1.markdown ================================================ --- layout: page title: Upgrading to chart version v1.0.0 parent: Guides has_children: false has_toc: false --- # Upgrading to chart version v1.0.0 {: .no_toc } ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- # Upgrading to chart version v1.0.0 cortex-helm-chart v1.0.0 introduced a number of breaking changes in an attempt to provide better defaults for new users. Care should be taken when upgrading so that the new defaults are not inherited unexpectedly. Many of the new defaults are safe and simple to apply with an upgrade, but some require special procedures to migrate to, and some may not match your desired configuration. This guide covers a few topics, but is not exhaustive. Please review the [release notes](https://github.com/cortexproject/cortex-helm-chart/releases/tag/v1.0.0) and [diff](https://github.com/cortexproject/cortex-helm-chart/compare/v0.6.0...v1.0.0) before upgrading to ensure you haven't missed anything important to your installation. You may want to use a tool like [helm-diff](https://github.com/databus23/helm-diff) to see what changes will be applied. ## Migrating to Memberlist The default kvstore changed from `consul` to `memberlist`. Migrating from one kvstore to another requires either downtime or a multi-stage process. ### Downtime If you are okay with downtime, the simplest way to migrate kvstores is to scale down all cortex components, then `helm upgrade --reset-values` to cortex-helm-chart v1.x.x to apply the new default kvstore, `memberlist`. Keep in mind this will apply all the new defaults, so ensure any values you would like to preserve that are unrelated to the kvstore are overridden with `-f` and your custom values file or `--set`. ### Multi KV Cortex provides a configuration called Multi KV to migrate from one kvstore to another without downtime. Please read the doc on Multi KV before continuing this guide: https://cortexmetrics.io/docs/configuration/arguments/#multi-kv Assuming you have an existing installation of cortex-helm-chart v0.6.0, here is an example of how to convert it to `memberlist`. #### Stage 1 - mirror to both kvstores _Be sure to augment this command with any other options you used for the initial installation._ ``` helm upgrade cortex cortex-helm/cortex --version 0.6.0 -f kvstore-mirror.yaml ``` kvstore-mirror.yaml: ```yaml config: alertmanager: sharding_ring: kvstore: &kvstore store: multi multi: primary: consul secondary: memberlist mirror_enabled: true compactor: sharding_ring: kvstore: *kvstore distributor: ring: kvstore: *kvstore ingester: lifecycler: ring: kvstore: *kvstore store_gateway: sharding_ring: kvstore: *kvstore ``` #### Stage 2 - use runtime config to make memberlist the primary _Be sure to augment this command with any other options you used for the initial installation._ ``` helm upgrade cortex cortex-helm/cortex --version 0.6.0 -f kvstore-mirror.yaml -f kvstore-runtime.yaml ``` kvstore-runtime.yaml: ```yaml runtimeconfigmap: runtime_config: multi_kv_config: mirror_enabled: false primary: memberlist ``` #### Stage 3 - disable consul _Be sure to augment this command with any other options you used for the initial installation._ ``` helm upgrade cortex cortex-helm/cortex --version 0.6.0 -f kvstore-memberlist.yaml ``` kvstore-memberlist.yaml: ```yaml config: alertmanager: sharding_ring: kvstore: &kvstore store: memberlist compactor: sharding_ring: kvstore: *kvstore distributor: ring: kvstore: *kvstore ingester: lifecycler: ring: kvstore: *kvstore store_gateway: sharding_ring: kvstore: *kvstore ``` ## Migrate from chucks to block storage https://cortexmetrics.io/docs/blocks-storage/migrate-cortex-cluster-from-chunks-to-blocks/ ================================================ FILE: docs/guides.md ================================================ --- layout: page title: Guides nav_order: 2 has_children: true has_toc: true permalink: /docs/guides --- # Guides {: .no_toc } Guides & Best-Practices on how to configure the cortex-helm-chart. {: .fs-6 .fw-300 } ================================================ FILE: docs/index.markdown ================================================ --- layout: home title: Home nav_order: 1 description: "Horizontally scalable, highly available, multi-tenant, long term Prometheus." permalink: / --- # Welcome Cortex Logo This is the official cortex-helm-chart documentation. Here you can find Guides & Best-Practices on How-To setup cortex. --- ## About the project Cortex is a horizontally scalable, highly available, multi-tenant, long term Prometheus. The cortex-helm-chart helps the operator with deploying cortex on a Kubernetes cluster. Follow our socials: * [Twitter](https://twitter.com/CortexMetrics) Join us on Slack: * [Slack](https://cloud-native.slack.com/?redir=%2Fmessages%2Fcortex%2F) ### License cortex-helm-chart is distributed by an [Apache License 2.0](https://github.com/cortexproject/cortex-helm-chart/blob/master/LICENSE). ### Contributing When contributing to this repository, please first discuss the change you wish to make via issue before making a change. Read more about becoming a contributor in [our GitHub repo](https://github.com/cortexproject/cortex-helm-chart/blob/master/CONTRIBUTING). #### Thank you to the contributors of cortex-helm-chart!
    {% for contributor in site.github.contributors %}
  • {{ contributor.login }}
  • {% endfor %}
================================================ FILE: docs/index.yaml ================================================ apiVersion: v1 entries: cortex: - apiVersion: v2 appVersion: v1.21.0 created: "2026-05-21T01:14:12.921801856Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-parquet-labels condition: memcached-parquet-labels.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: d78913504745162e5c7165b17e19ec7b6da931865de191bcc9c7cac2804131d8 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: niclas.schad@stackit.cloud name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-3.3.1.tgz version: 3.3.1 - apiVersion: v2 appVersion: v1.21.0 created: "2026-05-21T01:14:12.914049046Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-parquet-labels condition: memcached-parquet-labels.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 6c70fc5005db876972c133ff3219e581bd67e5d0f5ea83dc9f5f1a92b6916df4 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: niclas.schad@stackit.cloud name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-3.3.0.tgz version: 3.3.0 - apiVersion: v2 appVersion: v1.20.1 created: "2026-05-21T01:14:12.906110823Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: a7486f58f7d9a18e99cf681575a0114e617b4e82be28c24acc843163f0ca7406 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: niclas.schad@stackit.cloud name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-3.2.1.tgz version: 3.2.1 - apiVersion: v2 appVersion: v1.20.1 created: "2026-05-21T01:14:12.898615686Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: eb8f8c762478d5208fe12b23df18a18ec450a1ed93ed6112c3ebf9d235a5010d home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: niclas.schad@stackit.cloud name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-3.2.0.tgz version: 3.2.0 - apiVersion: v2 appVersion: v1.20.1 created: "2026-05-21T01:14:12.891236544Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: e9361694cfc519a3a74a467d91ab603f3e48444f51e5174bb62ac061c76c976e home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: niclas.schad@stackit.cloud name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-3.1.0.tgz version: 3.1.0 - apiVersion: v2 appVersion: v1.20.0 created: "2026-05-21T01:14:12.884627897Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: d530351308ec7d6dc5de8499083b6a9c95f4415a75efc5958935b6fedfd9929d home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: niclas.schad@stackit.cloud name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-3.0.0.tgz version: 3.0.0 - apiVersion: v2 appVersion: v1.19.0 created: "2026-05-21T01:14:12.877391415Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.14.0 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 0b78c77ae81f05530ba63209ab5e95c5755cb7a9d72f312651717b01390fa9cc home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: niclas.schad@stackit.cloud name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-2.6.0.tgz version: 2.6.0 - apiVersion: v2 appVersion: v1.18.1 created: "2026-05-21T01:14:12.870212303Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 4d42accac9056999338a4b599a39bcaf62df0859d1288f0718ad0df7d7e2b95e home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: niclas.schad@stackit.cloud name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-2.5.0.tgz version: 2.5.0 - apiVersion: v2 appVersion: v1.17.1 created: "2026-05-21T01:14:12.864102457Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: e2f16f77fa728ef78535d2392103f4566ba0d0111d1a3e22f06883bebcec3ec6 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-2.4.0.tgz version: 2.4.0 - apiVersion: v2 appVersion: v1.16.0 created: "2026-05-21T01:14:12.857289332Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 8d0f0ba40732f7b1b6bb2ed632f6ae41e096557119e6aab5ffb18bae0a1f6a07 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-2.3.0.tgz version: 2.3.0 - apiVersion: v2 appVersion: v1.16.0 created: "2026-05-21T01:14:12.850510759Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 8cdc1eab1131ac3d3dca5c211b2ec0eef1350c79bcdef895753210cff02871a0 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-2.2.0.tgz version: 2.2.0 - apiVersion: v2 appVersion: v1.14.1 created: "2026-05-21T01:14:12.844205638Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.12 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 5fcc5e224c00958879a191937cebc293c4b589c32972fed9a0b16c9543df90a0 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-2.1.0.tgz version: 2.1.0 - apiVersion: v2 appVersion: v1.14.1 created: "2026-05-21T01:14:12.837488243Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.3 - alias: memcached-blocks-index condition: memcached-blocks-index.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.3 - alias: memcached-blocks condition: memcached-blocks.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.3 - alias: memcached-blocks-metadata condition: memcached-blocks-metadata.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.3 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 882f4610c9e3feb3f08b9d29ec3052ec8139413321bfd7f6820b81076c21bda9 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-2.0.1.tgz version: 2.0.1 - apiVersion: v2 appVersion: v1.14.0 created: "2026-05-21T01:14:12.830634066Z" dependencies: - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.2 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.2 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.2 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami version: 6.3.2 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: f2d054751936c8d2d32948cbc6ac462334bc8a8ca08ebc1c14a668745b07aaad home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-2.0.0.tgz version: 2.0.0 - apiVersion: v2 appVersion: v1.13.0 created: "2026-05-21T01:14:12.823777896Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: d33816711a3a4535313c633374a24ee5a02b8cc6d7c1a2af6788fd7016651575 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.7.0.tgz version: 1.7.0 - apiVersion: v2 appVersion: v1.11.1 created: "2026-05-21T01:14:12.817564303Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 6d4f643081754d21e6b0b260c42a4a7aa8277963f9489decd05d9be9815b80fa home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.6.0.tgz version: 1.6.0 - apiVersion: v2 appVersion: v1.11.1 created: "2026-05-21T01:14:12.810791193Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: dea0406b03fb33581127038b91fa69a1ec2cfb5221f89841da93485b3e704978 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.5.1.tgz version: 1.5.1 - apiVersion: v2 appVersion: v1.11.1 created: "2026-05-21T01:14:12.804163918Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: bff7b1439f5fad8b395b0402099d7d8a93e70072ba88ec80730de7e2ff67ebba home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.5.0.tgz version: 1.5.0 - apiVersion: v2 appVersion: v1.11.1 created: "2026-05-21T01:14:12.798422806Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 93e1b41b19a8c4c66a46edff09fb4d38e3c007529df26816caaadeb90f9081cf home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.4.0.tgz version: 1.4.0 - apiVersion: v2 appVersion: v1.11.0 created: "2026-05-21T01:14:12.792033589Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.14 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.14 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 5fbcb04f7a6396430eea431aef58bfcde95c9a58da4468338b0f0e4ac1f983a7 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@mail.schwarz name: Niclas Schad url: https://github.com/nschad name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.3.0.tgz version: 1.3.0 - apiVersion: v2 appVersion: v1.11.0 created: "2026-05-21T01:14:12.785889647Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.12 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.12 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.12 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.12 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.12 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.12 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.12 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: deec676a2931bea6e777384f67fcc88b707014a482c13df92dc6a48351fb59ec home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@plusserver.com name: Niclas Schad url: https://github.com/ShuzZzle name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.2.0.tgz version: 1.2.0 - apiVersion: v2 appVersion: v1.10.0 created: "2026-05-21T01:14:12.78012526Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.9 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.9 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.9 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.9 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.9 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.9 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.9 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: b6e8db75efc9a2f0beab49f39e672cbe2176597927c007ca362e1b66d851002c home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@plusserver.com name: Niclas Schad url: https://github.com/ShuzZzle name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.1.0.tgz version: 1.1.0 - apiVersion: v2 appVersion: v1.10.0 created: "2026-05-21T01:14:12.773197377Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.8 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.8 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.8 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.8 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.8 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.8 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.8 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 982cc50648ec7120536e21a9a6b6e9dfa357fa607bb7da91e86e0964821c704d home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@plusserver.com name: Niclas Schad url: https://github.com/ShuzZzle name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.0.1.tgz version: 1.0.1 - apiVersion: v2 appVersion: v1.10.0 created: "2026-05-21T01:14:12.7665988Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.8 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.8 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.8 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.8 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.8 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.8 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.8 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: acbd37df2d268072adb0650b0016e0a9779e893d54ce2acd380ff95c3d85af96 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@plusserver.com name: Niclas Schad url: https://github.com/ShuzZzle name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-1.0.0.tgz version: 1.0.0 - apiVersion: v2 appVersion: v1.10.0 created: "2026-05-21T01:14:12.76036035Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.4 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.4 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.4 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.15.4 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.4 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.4 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.15.4 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: 04835dd68822bf7cfa062258eceffc71ed6a756627252c33565935584a3a6a38 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: thayward@infoblox.com name: Tom Hayward url: https://github.com/kd7lxl - email: Niclas.Schad@plusserver.com name: Niclas Schad url: https://github.com/ShuzZzle name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-0.7.0.tgz version: 0.7.0 - apiVersion: v2 appVersion: v1.9.0 created: "2026-05-21T01:14:12.753951208Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.13.0 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.13.0 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.13.0 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.13.0 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.13.0 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.13.0 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.13.0 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: f56085791d745403dc72f855e3236f190ee24fa9feb152ff89fa1c01e06d3e8a home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: cortex-team@googlegroups.com name: Cortex Maintainers name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-0.6.0.tgz version: 0.6.0 - apiVersion: v2 appVersion: v1.9.0 created: "2026-05-21T01:14:12.748734726Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.5.1 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.5.1 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.5.1 description: Horizontally scalable, highly available, multi-tenant, long term Prometheus. digest: e0e77c0ad09b3f1e56e6d13ab1382f95ac32ea1d56944597f94bdacbe8fdf3d2 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.19.0-0 maintainers: - email: cortex-team@googlegroups.com name: Cortex Maintainers name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-0.5.0.tgz version: 0.5.0 - apiVersion: v2 appVersion: v1.7.0 created: "2026-05-21T01:14:12.744167181Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.5.1 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.5.1 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.5.1 description: Cortex digest: 24973d79321a31304380317444648f5c00d89759fae3bcb7ac7120d1d86e3816 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.10.0-0 maintainers: - email: cortex-team@googlegroups.com name: Cortex Maintainers name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-0.4.1.tgz version: 0.4.1 - apiVersion: v2 appVersion: v1.7.0 created: "2026-05-21T01:14:12.739906718Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.bitnami.com/bitnami version: 5.5.1 - alias: memcached-blocks-index name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.5.1 - alias: memcached-blocks name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.5.1 - alias: memcached-blocks-metadata name: memcached repository: https://charts.bitnami.com/bitnami tags: - blocks-storage-memcached version: 5.5.1 description: Cortex digest: f08f403a75fb08226aaebc74fbec3c154541a6de1b9ffba5534d2d09829ed700 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.10.0-0 maintainers: - email: cortex-team@googlegroups.com name: Cortex Maintainers name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-0.4.0.tgz version: 0.4.0 - apiVersion: v2 appVersion: v1.6.0 created: "2026-05-21T01:14:12.736264135Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://charts.helm.sh/stable version: 3.2.3 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://charts.helm.sh/stable version: 3.2.3 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://charts.helm.sh/stable version: 3.2.3 - alias: memcached-frontend condition: memcached-frontend.enabled name: memcached repository: https://charts.helm.sh/stable version: 3.2.3 - alias: memcached-blocks-index name: memcached repository: https://charts.helm.sh/stable tags: - blocks-storage-memcached version: 3.2.3 - alias: memcached-blocks name: memcached repository: https://charts.helm.sh/stable tags: - blocks-storage-memcached version: 3.2.3 - alias: memcached-blocks-metadata name: memcached repository: https://charts.helm.sh/stable tags: - blocks-storage-memcached version: 3.2.3 description: Cortex digest: 9436f5dd360d8b6daf738cd487e8095a22b27e2312a06947dd0d6ac6b9621e83 home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.10.0-0 maintainers: - email: cortex-team@googlegroups.com name: Cortex Maintainers name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-0.3.0.tgz version: 0.3.0 - apiVersion: v2 appVersion: v1.4.0 created: "2026-05-21T01:14:12.732461191Z" dependencies: - alias: memcached condition: memcached.enabled name: memcached repository: https://kubernetes-charts.storage.googleapis.com/ version: 3.2.3 - alias: memcached-index-read condition: memcached-index-read.enabled name: memcached repository: https://kubernetes-charts.storage.googleapis.com/ version: 3.2.3 - alias: memcached-index-write condition: memcached-index-write.enabled name: memcached repository: https://kubernetes-charts.storage.googleapis.com/ version: 3.2.3 description: Cortex digest: f3c06fb19af521cd0daf02e5aaf8236d622df3f372fb8d3237a1103ecc0b810e home: https://cortexmetrics.io/ icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4 kubeVersion: ^1.10.0-0 maintainers: - email: cortex-team@googlegroups.com name: Cortex Maintainers name: cortex sources: - https://github.com/cortexproject/cortex-helm-chart urls: - https://cortexproject.github.io/cortex-helm-chart/cortex-0.2.0.tgz version: 0.2.0 generated: "2026-05-21T01:14:12.723689263Z" ================================================ FILE: renovate.json ================================================ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "config:base", ":gitSignOff", ":rebaseStalePrs" ], "assignees": [ "nschad", "kd7lxl" ], "labels": ["dependencies"], "regexManagers": [{ "description": "Update cortex in Chart.yaml", "fileMatch": ["^Chart\\.yaml$"], "matchStrings": [ "appVersion: (?.*?)\\n" ], "depNameTemplate": "quay.io/cortexproject/cortex", "datasourceTemplate": "docker" }, { "description": "Update cortex in README.md", "fileMatch": ["^README\\.md$"], "matchStrings": [ "\\bAppVersion:\\s+(?v\\d+\\.\\d+\\.\\d+(?:\\+\\d+)?)", "\\bAppVersion-+(?v\\d+\\.\\d+\\.\\d+(?:\\+\\d+)?)" ], "depNameTemplate": "quay.io/cortexproject/cortex", "datasourceTemplate": "docker" }, { "description": "Update nginx image in README.md", "fileMatch": ["^README\\.md$"], "matchStrings": [ "\\|\\s+nginx.​image.​tag\\s+\\|\\s+float\\s+\\|\\s+\\`(?.*?)\\`\\s+\\|\\s+\\|\\s+" ], "depNameTemplate": "nginx", "datasourceTemplate": "docker" }, { "description": "Update kiwigrid/k8s-sidecar image in README.md", "fileMatch": ["^README\\.md$"], "matchStrings": [ "\\|\\s+ruler.​sidecar.​image.​tag\\s+\\|\\s+string\\s+\\|\\s+`\"(?.*?)\"`\\s+\\|\\s+\\|\\s+", "\\|\\s+alertmanager.​sidecar.​image.​tag\\s+\\|\\s+string\\s+\\|\\s+`\"(?.*?)\"`\\s+\\|\\s+\\|\\s+" ], "depNameTemplate": "kiwigrid/k8s-sidecar", "datasourceTemplate": "docker" }, { "description": "Update memcached image in README.md", "fileMatch": ["^README\\.md$"], "matchStrings": [ "\\|[^|]*\\|[^|]*\\(memcached\\)[^|]*\\|\\s+(?.*?)\\s+\\|\\s+" ], "depNameTemplate": "memcached", "registryUrlTemplate": "https://charts.bitnami.com/bitnami", "datasourceTemplate": "helm" } ] } ================================================ FILE: templates/NOTES.txt ================================================ {{- include "cortex.validateMemcached" (index .Values "memcached-frontend") }} {{- include "cortex.validateMemcached" (index .Values "memcached-blocks-index") }} {{- include "cortex.validateMemcached" (index .Values "memcached-blocks") }} {{- include "cortex.validateMemcached" (index .Values "memcached-blocks-metadata") }} Verify the application is working by running these commands: kubectl --namespace {{ .Release.Namespace }} port-forward service/{{ include "cortex.querierFullname" . }} {{ .Values.config.server.http_listen_port }} curl http://127.0.0.1:{{ .Values.config.server.http_listen_port }}/services ================================================ FILE: templates/_helpers.tpl ================================================ {{/* vim: set filetype=mustache: */}} {{/* Expand the name of the chart. */}} {{- define "cortex.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 "cortex.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 "cortex.chart" -}} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} {{- end -}} {{/* Create the name of the service account */}} {{- define "cortex.serviceAccountName" -}} {{- if .Values.serviceAccount.create -}} {{ default (include "cortex.fullname" .) .Values.serviceAccount.name }} {{- else -}} {{ default "default" .Values.serviceAccount.name }} {{- end -}} {{- end -}} {{/* Create the app name of cortex clients. Defaults to the same logic as "cortex.fullname", and default client expects "prometheus". */}} {{- define "client.name" -}} {{- if .Values.client.name -}} {{- .Values.client.name -}} {{- else if .Values.client.fullnameOverride -}} {{- .Values.client.fullnameOverride | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- $name := default "prometheus" .Values.client.nameOverride -}} {{- if contains $name .Release.Name -}} {{- .Release.Name | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- end -}} {{- end -}} {{/* Common labels */}} {{- define "cortex.labels" -}} helm.sh/chart: {{ include "cortex.chart" . }} {{ include "cortex.selectorLabels" . }} {{- if .Chart.AppVersion }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} {{- end }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end }} {{/* Selector labels */}} {{- define "cortex.selectorLabels" -}} app.kubernetes.io/name: {{ include "cortex.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} {{/* Create configuration parameters for memcached configuration */}} {{- define "cortex.memcached" -}} {{- if index .Values "memcached-blocks-index" "enabled" }} - "-blocks-storage.bucket-store.index-cache.backend=memcached" - "-blocks-storage.bucket-store.index-cache.memcached.addresses=dns+{{ .Release.Name }}-memcached-blocks-index.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211" {{- end -}} {{- if index .Values "memcached-blocks" "enabled" }} - "-blocks-storage.bucket-store.chunks-cache.backend=memcached" - "-blocks-storage.bucket-store.chunks-cache.memcached.addresses=dns+{{ .Release.Name }}-memcached-blocks.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211" {{- end -}} {{- if index .Values "memcached-blocks-metadata" "enabled" }} - "-blocks-storage.bucket-store.metadata-cache.backend=memcached" - "-blocks-storage.bucket-store.metadata-cache.memcached.addresses=dns+{{ .Release.Name }}-memcached-blocks-metadata.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211" {{- end -}} {{- if index .Values "memcached-parquet-labels" "enabled" }} - "-blocks-storage.bucket-store.parquet-labels-cache.backend=memcached" - "-blocks-storage.bucket-store.parquet-labels-cache.memcached.addresses=dns+{{ .Release.Name }}-memcached-parquet-labels.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211" {{- end -}} {{- end -}} {{/* Create configuration for frontend memcached configuration */}} {{- define "cortex.frontend-memcached" -}} {{- if index .Values "memcached-frontend" "enabled" }} - "-frontend.memcached.addresses=dns+{{ .Release.Name }}-memcached-frontend.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211" {{- end -}} {{- end -}} {{/* Determine the policy api version */}} {{- define "cortex.pdbVersion" -}} {{- if or (.Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget") (semverCompare ">=1.21-0" .Capabilities.KubeVersion.Version) -}} policy/v1 {{- else -}} policy/v1beta1 {{- end -}} {{- end -}} {{/* Get checksum of config secret or configMap */}} {{- define "cortex.configChecksum" -}} {{- if .Values.useExternalConfig -}} {{- .Values.externalConfigVersion -}} {{- else if .Values.useConfigMap -}} {{- include (print $.Template.BasePath "/configmap.yaml") . | sha256sum -}} {{- else -}} {{- include (print $.Template.BasePath "/secret.yaml") . | sha256sum -}} {{- end -}} {{- end -}} {{/* Get volume of config secret of configMap */}} {{- define "cortex.configVolume" -}} - name: config {{- if .Values.useExternalConfig }} secret: secretName: {{ .Values.externalConfigSecretName }} {{- else if .Values.useConfigMap }} configMap: name: {{ template "cortex.fullname" . }}-config {{- else }} secret: secretName: {{ template "cortex.fullname" . }} {{- end }} {{- end -}} {{/* Get cortex hpa version by k8s version */}} {{- define "cortex.hpaVersion" -}} {{- if or (.Capabilities.APIVersions.Has "autoscaling/v2/HorizontalPodAutoscaler") (semverCompare ">=1.23-0" .Capabilities.KubeVersion.Version) -}} autoscaling/v2 {{- else -}} autoscaling/v2beta2 {{- end -}} {{- end -}} {{/* bitnami/memcached was configured with env vars while memcached official image requires args This helper validates that if memcached image is set to official image, args are used instead of env vars */}} {{- define "cortex.validateMemcached" -}} {{- if .enabled -}} {{- if not .disableValidation -}} {{- if and .image (eq .image.repository "memcached") -}} {{- if .extraEnvVars -}} {{- fail "memcached must be configured with .args not .extraEnvVars" -}} {{- end -}} {{- end -}} {{- end -}} {{- end -}} {{- end -}} ================================================ FILE: templates/alertmanager/_helpers-alertmanager.tpl ================================================ {{/* alertmanager fullname */}} {{- define "cortex.alertmanagerFullname" -}} {{ include "cortex.fullname" . }}-alertmanager {{- end }} {{/* alertmanager common labels */}} {{- define "cortex.alertmanagerLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: alertmanager {{- end }} {{/* alertmanager selector labels */}} {{- define "cortex.alertmanagerSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: alertmanager {{- end }} ================================================ FILE: templates/alertmanager/alertmanager-dep.yaml ================================================ {{- if .Values.alertmanager.enabled -}} {{- if not .Values.alertmanager.statefulSet.enabled -}} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.alertmanagerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.alertmanagerLabels" . | nindent 4 }} app.kubernetes.io/part-of: memberlist annotations: {{- toYaml .Values.alertmanager.annotations | nindent 4 }} spec: replicas: {{ .Values.alertmanager.replicas }} selector: matchLabels: {{- include "cortex.alertmanagerSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.alertmanager.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.alertmanagerLabels" . | nindent 8 }} app.kubernetes.io/part-of: memberlist {{- with .Values.alertmanager.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.alertmanager.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.alertmanager.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.alertmanager.priorityClassName }} priorityClassName: {{ .Values.alertmanager.priorityClassName }} {{- end }} {{- if .Values.alertmanager.securityContext.enabled }} securityContext: {{- omit .Values.alertmanager.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.alertmanager.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: {{- if .Values.alertmanager.sidecar.enabled }} - name: {{ template "cortex.name" . }}-sc-alertmanager {{- if .Values.alertmanager.sidecar.image.sha }} image: "{{ .Values.alertmanager.sidecar.image.repository }}:{{ .Values.alertmanager.sidecar.image.tag }}@sha256:{{ .Values.alertmanager.sidecar.image.sha }}" {{- else }} image: "{{ .Values.alertmanager.sidecar.image.repository }}:{{ .Values.alertmanager.sidecar.image.tag }}" {{- end }} imagePullPolicy: {{ .Values.alertmanager.sidecar.imagePullPolicy }} env: {{- if .Values.alertmanager.sidecar.watchMethod }} - name: METHOD value: {{ .Values.alertmanager.sidecar.watchMethod }} {{ end }} - name: LABEL value: "{{ .Values.alertmanager.sidecar.label }}" {{- if .Values.alertmanager.sidecar.labelValue }} - name: LABEL_VALUE value: {{ quote .Values.alertmanager.sidecar.labelValue }} {{- end }} - name: FOLDER value: "{{ .Values.alertmanager.sidecar.folder }}{{- with .Values.alertmanager.sidecar.defaultFolderName }}/{{ . }}{{- end }}" {{- if .Values.alertmanager.sidecar.resource}} - name: RESOURCE value: {{ quote .Values.alertmanager.sidecar.resource }} {{- end }} {{- if .Values.alertmanager.sidecar.enableUniqueFilenames }} - name: UNIQUE_FILENAMES value: "{{ .Values.alertmanager.sidecar.enableUniqueFilenames }}" {{- end }} {{- if .Values.alertmanager.sidecar.searchNamespace }} - name: NAMESPACE value: "{{ .Values.alertmanager.sidecar.searchNamespace }}" {{- end }} {{- if .Values.alertmanager.sidecar.skipTlsVerify }} - name: SKIP_TLS_VERIFY value: "{{ .Values.alertmanager.sidecar.skipTlsVerify }}" {{- end }} {{- if .Values.alertmanager.sidecar.folderAnnotation }} - name: FOLDER_ANNOTATION value: "{{ .Values.alertmanager.sidecar.folderAnnotation }}" {{- end }} {{- with .Values.alertmanager.sidecar.healthPort }} - name: HEALTH_PORT value: "{{ . }}" ports: - name: sidecar-health containerPort: {{ . }} protocol: TCP {{- end }} {{- with .Values.alertmanager.sidecar.startupProbe }} startupProbe: {{- toYaml . | nindent 12 }} {{- end }} {{- with .Values.alertmanager.sidecar.readinessProbe }} readinessProbe: {{- toYaml . | nindent 12 }} {{- end }} resources: {{- toYaml .Values.alertmanager.sidecar.resources | nindent 12 }} {{- if .Values.alertmanager.sidecar.containerSecurityContext.enabled }} securityContext: {{- omit .Values.alertmanager.sidecar.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} volumeMounts: - name: storage mountPath: "/data" {{- end }} - name: alertmanager image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=alertmanager" - "-config.file=/etc/cortex/cortex.yaml" {{- range $key, $value := .Values.alertmanager.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.alertmanager.extraVolumeMounts }} {{- toYaml .Values.alertmanager.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config - name: storage mountPath: "/data" {{- with .Values.alertmanager.persistentVolume.subPath }} subPath: {{ . }} {{- end }} ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: gossip containerPort: {{ .Values.config.memberlist.bind_port }} protocol: TCP startupProbe: {{- toYaml .Values.alertmanager.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.alertmanager.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.alertmanager.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.alertmanager.resources | nindent 12 }} {{- if .Values.alertmanager.containerSecurityContext.enabled }} securityContext: {{- omit .Values.alertmanager.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.alertmanager.env }} env: {{- toYaml .Values.alertmanager.env | nindent 12 }} {{- end }} {{- if .Values.alertmanager.extraContainers }} {{- toYaml .Values.alertmanager.extraContainers | nindent 8}} {{- end }} nodeSelector: {{- toYaml .Values.alertmanager.nodeSelector | nindent 8 }} {{- if .Values.alertmanager.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.alertmanager.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.alertmanager.affinity | nindent 8 }} tolerations: {{- toYaml .Values.alertmanager.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.alertmanager.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config - name: storage emptyDir: {} {{- if .Values.alertmanager.extraVolumes }} {{- toYaml .Values.alertmanager.extraVolumes | nindent 8 }} {{- end }} {{- end -}} {{- end -}} ================================================ FILE: templates/alertmanager/alertmanager-poddisruptionbudget.yaml ================================================ {{- if and (gt (int .Values.alertmanager.replicas) 1) (.Values.alertmanager.podDisruptionBudget) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.alertmanagerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.alertmanagerLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.alertmanagerSelectorLabels" . | nindent 6 }} {{- toYaml .Values.alertmanager.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/alertmanager/alertmanager-servicemonitor.yaml ================================================ {{- if .Values.alertmanager.serviceMonitor.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.alertmanagerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.alertmanagerLabels" . | nindent 4 }} {{- if .Values.alertmanager.serviceMonitor.additionalLabels }} {{ toYaml .Values.alertmanager.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.alertmanager.serviceMonitor.annotations }} annotations: {{ toYaml .Values.alertmanager.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.alertmanagerSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.alertmanager.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.alertmanager.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.alertmanager.serviceMonitor.interval }} interval: {{ .Values.alertmanager.serviceMonitor.interval }} {{- end }} {{- if .Values.alertmanager.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.alertmanager.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.alertmanager.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.alertmanager.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.alertmanager.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.alertmanager.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.alertmanager.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/alertmanager/alertmanager-statefulset.yaml ================================================ {{- $svcClusterAddress := ((.Values.config.alertmanager.cluster).listen_address) | default "0.0.0.0:9094" }} {{- $svcClusterPort := (split ":" $svcClusterAddress)._1 }} {{- if .Values.alertmanager.enabled -}} {{- if .Values.alertmanager.statefulSet.enabled -}} apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ include "cortex.alertmanagerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.alertmanagerLabels" . | nindent 4 }} app.kubernetes.io/part-of: memberlist annotations: {{- toYaml .Values.alertmanager.annotations | nindent 4 }} spec: replicas: {{ .Values.alertmanager.replicas }} selector: matchLabels: {{- include "cortex.alertmanagerSelectorLabels" . | nindent 6 }} updateStrategy: {{- toYaml .Values.alertmanager.statefulStrategy | nindent 4 }} serviceName: {{ template "cortex.fullname" . }}-alertmanager-headless {{- if .Values.alertmanager.persistentVolume.enabled }} {{- if semverCompare ">=1.23-0" .Capabilities.KubeVersion.Version }} {{- with .Values.alertmanager.persistentVolume.retentionPolicy }} persistentVolumeClaimRetentionPolicy: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} volumeClaimTemplates: - metadata: name: storage {{- if .Values.alertmanager.persistentVolume.annotations }} annotations: {{ toYaml .Values.alertmanager.persistentVolume.annotations | nindent 10 }} {{- end }} spec: {{- if .Values.alertmanager.persistentVolume.storageClass }} {{- if (eq "-" .Values.alertmanager.persistentVolume.storageClass) }} storageClassName: "" {{- else }} storageClassName: "{{ .Values.alertmanager.persistentVolume.storageClass }}" {{- end }} {{- end }} accessModes: {{ toYaml .Values.alertmanager.persistentVolume.accessModes | nindent 10 }} resources: requests: storage: "{{ .Values.alertmanager.persistentVolume.size }}" {{- end }} template: metadata: labels: {{- include "cortex.alertmanagerLabels" . | nindent 8 }} app.kubernetes.io/part-of: memberlist {{- with .Values.alertmanager.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.alertmanager.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.alertmanager.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.alertmanager.priorityClassName }} priorityClassName: {{ .Values.alertmanager.priorityClassName }} {{- end }} {{- if .Values.alertmanager.securityContext.enabled }} securityContext: {{- omit .Values.alertmanager.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.alertmanager.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} nodeSelector: {{- toYaml .Values.alertmanager.nodeSelector | nindent 8 }} {{- if .Values.alertmanager.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.alertmanager.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.alertmanager.affinity | nindent 8 }} tolerations: {{- toYaml .Values.alertmanager.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.alertmanager.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config {{- if not .Values.alertmanager.persistentVolume.enabled }} - name: storage emptyDir: {} {{- end }} {{- if .Values.alertmanager.extraVolumes }} {{- toYaml .Values.alertmanager.extraVolumes | nindent 8 }} {{- end }} containers: {{- if .Values.alertmanager.extraContainers }} {{ toYaml .Values.alertmanager.extraContainers | nindent 8 }} {{- end }} {{- if .Values.alertmanager.sidecar.enabled }} - name: {{ template "cortex.name" . }}-sc-alertmanager {{- if .Values.alertmanager.sidecar.image.sha }} image: "{{ .Values.alertmanager.sidecar.image.repository }}:{{ .Values.alertmanager.sidecar.image.tag }}@sha256:{{ .Values.alertmanager.sidecar.image.sha }}" {{- else }} image: "{{ .Values.alertmanager.sidecar.image.repository }}:{{ .Values.alertmanager.sidecar.image.tag }}" {{- end }} imagePullPolicy: {{ .Values.alertmanager.sidecar.imagePullPolicy }} env: {{- if .Values.alertmanager.sidecar.watchMethod }} - name: METHOD value: {{ .Values.alertmanager.sidecar.watchMethod }} {{ end }} - name: LABEL value: "{{ .Values.alertmanager.sidecar.label }}" {{- if .Values.alertmanager.sidecar.labelValue }} - name: LABEL_VALUE value: {{ quote .Values.alertmanager.sidecar.labelValue }} {{- end }} - name: FOLDER value: "{{ .Values.alertmanager.sidecar.folder }}{{- with .Values.alertmanager.sidecar.defaultFolderName }}/{{ . }}{{- end }}" {{- if .Values.alertmanager.sidecar.resource}} - name: RESOURCE value: {{ quote .Values.alertmanager.sidecar.resource }} {{- end }} {{- if .Values.alertmanager.sidecar.enableUniqueFilenames }} - name: UNIQUE_FILENAMES value: "{{ .Values.alertmanager.sidecar.enableUniqueFilenames }}" {{- end }} {{- if .Values.alertmanager.sidecar.searchNamespace }} - name: NAMESPACE value: "{{ .Values.alertmanager.sidecar.searchNamespace }}" {{- end }} {{- if .Values.alertmanager.sidecar.skipTlsVerify }} - name: SKIP_TLS_VERIFY value: "{{ .Values.alertmanager.sidecar.skipTlsVerify }}" {{- end }} {{- if .Values.alertmanager.sidecar.folderAnnotation }} - name: FOLDER_ANNOTATION value: "{{ .Values.alertmanager.sidecar.folderAnnotation }}" {{- end }} {{- with .Values.alertmanager.sidecar.healthPort }} - name: HEALTH_PORT value: "{{ . }}" ports: - name: sidecar-health containerPort: {{ . }} protocol: TCP {{- end }} {{- with .Values.alertmanager.sidecar.startupProbe }} startupProbe: {{- toYaml . | nindent 12 }} {{- end }} {{- with .Values.alertmanager.sidecar.readinessProbe }} readinessProbe: {{- toYaml . | nindent 12 }} {{- end }} resources: {{- toYaml .Values.alertmanager.sidecar.resources | nindent 12 }} {{- if .Values.alertmanager.sidecar.containerSecurityContext.enabled }} securityContext: {{- omit .Values.alertmanager.sidecar.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} volumeMounts: - name: storage mountPath: "/data" {{- end }} - name: alertmanager image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=alertmanager" - "-config.file=/etc/cortex/cortex.yaml" {{- if and (gt (int .Values.alertmanager.replicas) 1) (ne .Values.config.alertmanager.cluster.listen_address "") }} {{- $fullName := include "cortex.alertmanagerFullname" . }} {{- $peers := list }} {{- range $i := until (int .Values.alertmanager.replicas) }} {{- $peer := printf "%s-%d.%s-headless.%s.svc.cluster.local:%s" $fullName $i $fullName $.Release.Namespace $svcClusterPort }} {{- $peers = append $peers $peer }} {{- end }} - "-alertmanager.cluster.peers={{ join "," $peers }}" {{- end }} {{- range $key, $value := .Values.alertmanager.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.alertmanager.extraVolumeMounts }} {{- toYaml .Values.alertmanager.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config - name: storage mountPath: "/data" {{- with .Values.alertmanager.persistentVolume.subPath }} subPath: {{ . }} {{- end }} ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: gossip containerPort: {{ .Values.config.memberlist.bind_port }} protocol: TCP - name: grpc containerPort: {{ .Values.config.server.grpc_listen_port }} protocol: TCP - containerPort: {{ $svcClusterPort }} name: alert-clu-tcp protocol: TCP - containerPort: {{ $svcClusterPort }} name: alert-clu-udp protocol: UDP startupProbe: {{- toYaml .Values.alertmanager.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.alertmanager.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.alertmanager.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.alertmanager.resources | nindent 12 }} {{- if .Values.alertmanager.containerSecurityContext.enabled }} securityContext: {{- omit .Values.alertmanager.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.alertmanager.env }} env: {{- toYaml .Values.alertmanager.env | nindent 12 }} {{- end }} {{- end -}} {{- end -}} ================================================ FILE: templates/alertmanager/alertmanager-svc-headless.yaml ================================================ {{- if .Values.alertmanager.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.alertmanagerFullname" . }}-headless namespace: {{ .Release.Namespace }} labels: {{- include "cortex.alertmanagerLabels" . | nindent 4 }} {{- with .Values.alertmanager.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.alertmanager.service.annotations | nindent 4 }} spec: type: ClusterIP clusterIP: None publishNotReadyAddresses: true ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics - port: {{ .Values.config.server.grpc_listen_port }} protocol: TCP name: grpc targetPort: grpc - port: 9094 protocol: UDP name: alert-clu-udp targetPort: alert-clu-udp - port: 9094 protocol: TCP name: alert-clu-tcp targetPort: alert-clu-tcp selector: {{- include "cortex.alertmanagerSelectorLabels" . | nindent 4 }} {{- end -}} ================================================ FILE: templates/alertmanager/alertmanager-svc.yaml ================================================ {{- if .Values.alertmanager.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.alertmanagerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.alertmanagerLabels" . | nindent 4 }} {{- with .Values.alertmanager.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.alertmanager.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.alertmanagerSelectorLabels" . | nindent 4 }} {{- end -}} ================================================ FILE: templates/clusterrole.yaml ================================================ {{- if or .Values.ruler.sidecar.enabled .Values.alertmanager.sidecar.enabled }} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: {{ template "cortex.fullname" . }}-clusterrole labels: {{- include "cortex.labels" . | nindent 4 }} rules: - apiGroups: [""] # "" indicates the core API group resources: ["configmaps", "secrets"] verbs: ["get", "watch", "list"] {{- end }} ================================================ FILE: templates/clusterrolebinding.yaml ================================================ {{- if or .Values.ruler.sidecar.enabled .Values.alertmanager.sidecar.enabled }} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: {{ template "cortex.fullname" . }}-clusterrolebinding labels: {{- include "cortex.labels" . | nindent 4 }} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: {{ template "cortex.fullname" . }}-clusterrole subjects: - kind: ServiceAccount name: {{ template "cortex.serviceAccountName" . }} namespace: {{ .Release.Namespace }} {{- end }} ================================================ FILE: templates/compactor/_helpers-compactor.tpl ================================================ {{/* compactor fullname */}} {{- define "cortex.compactorFullname" -}} {{ include "cortex.fullname" . }}-compactor {{- end }} {{/* compactor common labels */}} {{- define "cortex.compactorLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: compactor {{- end }} {{/* compactor selector labels */}} {{- define "cortex.compactorSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: compactor {{- end }} ================================================ FILE: templates/compactor/compactor-poddisruptionbudget.yaml ================================================ {{- if and (gt (int .Values.compactor.replicas) 1) (.Values.compactor.podDisruptionBudget) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.compactorFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.compactorLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.compactorSelectorLabels" . | nindent 6 }} {{- toYaml .Values.compactor.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/compactor/compactor-servicemonitor.yaml ================================================ {{- if .Values.compactor.serviceMonitor.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.compactorFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.compactorLabels" . | nindent 4 }} {{- if .Values.compactor.serviceMonitor.additionalLabels }} {{ toYaml .Values.compactor.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.compactor.serviceMonitor.annotations }} annotations: {{ toYaml .Values.compactor.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.compactorSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.compactor.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.compactor.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.compactor.serviceMonitor.interval }} interval: {{ .Values.compactor.serviceMonitor.interval }} {{- end }} {{- if .Values.compactor.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.compactor.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.compactor.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.compactor.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.compactor.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.compactor.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.compactor.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/compactor/compactor-statefulset.yaml ================================================ {{- if .Values.compactor.enabled -}} apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ include "cortex.compactorFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.compactorLabels" . | nindent 4 }} app.kubernetes.io/part-of: memberlist annotations: {{- toYaml .Values.compactor.annotations | nindent 4 }} spec: replicas: {{ .Values.compactor.replicas }} selector: matchLabels: {{- include "cortex.compactorSelectorLabels" . | nindent 6 }} updateStrategy: {{- toYaml .Values.compactor.strategy | nindent 4 }} serviceName: {{ template "cortex.fullname" . }}-compactor {{- if .Values.compactor.persistentVolume.enabled }} {{- if semverCompare ">=1.23-0" .Capabilities.KubeVersion.Version }} {{- with .Values.compactor.persistentVolume.retentionPolicy }} persistentVolumeClaimRetentionPolicy: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} volumeClaimTemplates: - metadata: name: storage {{- if .Values.compactor.persistentVolume.annotations }} annotations: {{ toYaml .Values.compactor.persistentVolume.annotations | nindent 10 }} {{- end }} spec: {{- if .Values.compactor.persistentVolume.storageClass }} {{- if (eq "-" .Values.compactor.persistentVolume.storageClass) }} storageClassName: "" {{- else }} storageClassName: "{{ .Values.compactor.persistentVolume.storageClass }}" {{- end }} {{- end }} accessModes: {{ toYaml .Values.compactor.persistentVolume.accessModes | nindent 10 }} resources: requests: storage: "{{ .Values.compactor.persistentVolume.size }}" {{- end }} template: metadata: labels: {{- include "cortex.compactorLabels" . | nindent 8 }} app.kubernetes.io/part-of: memberlist {{- with .Values.compactor.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.compactor.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.compactor.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.compactor.priorityClassName }} priorityClassName: {{ .Values.compactor.priorityClassName }} {{- end }} {{- if .Values.compactor.securityContext.enabled }} securityContext: {{- omit .Values.compactor.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.compactor.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} nodeSelector: {{- toYaml .Values.compactor.nodeSelector | nindent 8 }} {{- if .Values.compactor.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.compactor.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.compactor.affinity | nindent 8 }} tolerations: {{- toYaml .Values.compactor.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.compactor.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config {{- if not .Values.compactor.persistentVolume.enabled }} - name: storage emptyDir: {} {{- end }} {{- if .Values.compactor.extraVolumes }} {{- toYaml .Values.compactor.extraVolumes | nindent 8 }} {{- end }} containers: {{- if .Values.compactor.extraContainers }} {{ toYaml .Values.compactor.extraContainers | nindent 8 }} {{- end }} - name: compactor image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=compactor" - "-config.file=/etc/cortex/cortex.yaml" {{- include "cortex.memcached" . | nindent 12}} {{- range $key, $value := .Values.compactor.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.compactor.extraVolumeMounts }} {{- toYaml .Values.compactor.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config - name: storage mountPath: "/data" {{- if .Values.compactor.persistentVolume.subPath }} subPath: {{ .Values.compactor.persistentVolume.subPath }} {{- end }} ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: gossip containerPort: {{ .Values.config.memberlist.bind_port }} protocol: TCP {{- if .Values.compactor.startupProbe }} startupProbe: {{- toYaml .Values.compactor.startupProbe | nindent 12 }} {{- end }} {{- if .Values.compactor.livenessProbe }} livenessProbe: {{- toYaml .Values.compactor.livenessProbe | nindent 12 }} {{- end }} readinessProbe: {{- toYaml .Values.compactor.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.compactor.resources | nindent 12 }} {{- if .Values.compactor.containerSecurityContext.enabled }} securityContext: {{- omit .Values.compactor.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.compactor.env }} env: {{- toYaml .Values.compactor.env | nindent 12 }} {{- end }} {{- end -}} ================================================ FILE: templates/compactor/compactor-svc.yaml ================================================ {{- if .Values.compactor.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.compactorFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.compactorLabels" . | nindent 4 }} {{- with .Values.compactor.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.compactor.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.compactorSelectorLabels" . | nindent 4 }} {{- end -}} ================================================ FILE: templates/configmap.yaml ================================================ {{- if (and (not .Values.useExternalConfig) (.Values.useConfigMap)) }} apiVersion: v1 kind: ConfigMap metadata: name: {{ template "cortex.fullname" . }}-config namespace: {{ .Release.Namespace }} labels: {{- include "cortex.labels" . | nindent 4 }} data: cortex.yaml: | {{- tpl (toYaml .Values.config) . | nindent 4 }} {{- end }} ================================================ FILE: templates/distributor/_helpers-distributor.tpl ================================================ {{/* distributor fullname */}} {{- define "cortex.distributorFullname" -}} {{ include "cortex.fullname" . }}-distributor {{- end }} {{/* distributor common labels */}} {{- define "cortex.distributorLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: distributor {{- end }} {{/* distributor selector labels */}} {{- define "cortex.distributorSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: distributor {{- end }} ================================================ FILE: templates/distributor/distributor-dep.yaml ================================================ {{- if .Values.distributor.enabled -}} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.distributorFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.distributorLabels" . | nindent 4 }} app.kubernetes.io/part-of: memberlist annotations: {{- toYaml .Values.distributor.annotations | nindent 4 }} spec: {{- if not .Values.distributor.autoscaling.enabled }} replicas: {{ .Values.distributor.replicas }} {{- end }} selector: matchLabels: {{- include "cortex.distributorSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.distributor.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.distributorLabels" . | nindent 8 }} app.kubernetes.io/part-of: memberlist {{- with .Values.distributor.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.distributor.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.distributor.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.distributor.priorityClassName }} priorityClassName: {{ .Values.distributor.priorityClassName }} {{- end }} {{- if .Values.distributor.securityContext.enabled }} securityContext: {{- omit .Values.distributor.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.distributor.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: - name: distributor image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=distributor" - "-config.file=/etc/cortex/cortex.yaml" {{- range $key, $value := .Values.distributor.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.distributor.extraVolumeMounts }} {{- toYaml .Values.distributor.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config - name: storage mountPath: "/data" subPath: {{ .Values.distributor.persistentVolume.subPath }} ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: gossip containerPort: {{ .Values.config.memberlist.bind_port }} protocol: TCP - name: grpc containerPort: {{ .Values.config.server.grpc_listen_port }} protocol: TCP startupProbe: {{- toYaml .Values.distributor.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.distributor.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.distributor.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.distributor.resources | nindent 12 }} {{- if .Values.distributor.containerSecurityContext.enabled }} securityContext: {{- omit .Values.distributor.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.distributor.env }} env: {{- toYaml .Values.distributor.env | nindent 12 }} {{- end }} {{- with .Values.distributor.lifecycle }} lifecycle: {{- toYaml . | nindent 12 }} {{- end }} {{- if .Values.distributor.extraContainers }} {{- toYaml .Values.distributor.extraContainers | nindent 8}} {{- end }} nodeSelector: {{- toYaml .Values.distributor.nodeSelector | nindent 8 }} {{- if .Values.distributor.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.distributor.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.distributor.affinity | nindent 8 }} tolerations: {{- toYaml .Values.distributor.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.distributor.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config - name: storage emptyDir: {} {{- if .Values.distributor.extraVolumes }} {{- toYaml .Values.distributor.extraVolumes | nindent 8}} {{- end }} {{- end }} ================================================ FILE: templates/distributor/distributor-hpa.yaml ================================================ {{- if and .Values.distributor.enabled .Values.distributor.autoscaling.enabled }} {{- with .Values.distributor.autoscaling -}} apiVersion: {{ include "cortex.hpaVersion" $ }} kind: HorizontalPodAutoscaler metadata: name: {{ include "cortex.distributorFullname" $ }} namespace: {{ $.Release.Namespace }} labels: {{- include "cortex.distributorLabels" $ | nindent 4 }} spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: {{ include "cortex.distributorFullname" $ }} minReplicas: {{ .minReplicas }} maxReplicas: {{ .maxReplicas }} metrics: {{- with .targetMemoryUtilizationPercentage }} - type: Resource resource: name: memory target: type: Utilization averageUtilization: {{ . }} {{- end }} {{- with .targetCPUUtilizationPercentage }} - type: Resource resource: name: cpu target: type: Utilization averageUtilization: {{ . }} {{- end }} {{- with .extraMetrics }} {{- toYaml . | nindent 4 }} {{- end }} {{- with .behavior }} behavior: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} {{- end }} ================================================ FILE: templates/distributor/distributor-poddisruptionbudget.yaml ================================================ {{- if and (gt (int .Values.distributor.replicas) 1) (.Values.distributor.podDisruptionBudget) (.Values.distributor.enabled) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.distributorFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.distributorLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.distributorSelectorLabels" . | nindent 6 }} {{- toYaml .Values.distributor.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/distributor/distributor-servicemonitor.yaml ================================================ {{- if and .Values.distributor.serviceMonitor.enabled .Values.distributor.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.distributorFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.distributorLabels" . | nindent 4 }} {{- if .Values.distributor.serviceMonitor.additionalLabels }} {{ toYaml .Values.distributor.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.distributor.serviceMonitor.annotations }} annotations: {{ toYaml .Values.distributor.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.distributorSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.distributor.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.distributor.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.distributor.serviceMonitor.interval }} interval: {{ .Values.distributor.serviceMonitor.interval }} {{- end }} {{- if .Values.distributor.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.distributor.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.distributor.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.distributor.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.distributor.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.distributor.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.distributor.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/distributor/distributor-svc-headless.yaml ================================================ {{- if .Values.distributor.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.distributorFullname" . }}-headless namespace: {{ .Release.Namespace }} labels: {{- include "cortex.distributorLabels" . | nindent 4 }} {{- with .Values.distributor.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.distributor.service.annotations | nindent 4 }} spec: type: ClusterIP clusterIP: None publishNotReadyAddresses: true ports: - port: {{ .Values.config.server.grpc_listen_port }} protocol: TCP name: grpc targetPort: grpc selector: {{- include "cortex.distributorSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/distributor/distributor-svc.yaml ================================================ {{- if .Values.distributor.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.distributorFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.distributorLabels" . | nindent 4 }} {{- with .Values.distributor.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.distributor.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.distributorSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/ingester/_helpers-ingester.tpl ================================================ {{/* ingester fullname */}} {{- define "cortex.ingesterFullname" -}} {{ include "cortex.fullname" . }}-ingester {{- end }} {{/* ingester common labels */}} {{- define "cortex.ingesterLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: ingester {{- end }} {{/* ingester selector labels */}} {{- define "cortex.ingesterSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: ingester {{- end }} ================================================ FILE: templates/ingester/ingester-dep.yaml ================================================ {{- if and (not .Values.ingester.statefulSet.enabled) .Values.ingester.enabled -}} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.ingesterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.ingesterLabels" . | nindent 4 }} app.kubernetes.io/part-of: memberlist annotations: {{- toYaml .Values.ingester.annotations | nindent 4 }} spec: {{- if not .Values.ingester.autoscaling.enabled }} replicas: {{ .Values.ingester.replicas }} {{- end }} selector: matchLabels: {{- include "cortex.ingesterSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.ingester.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.ingesterLabels" . | nindent 8 }} app.kubernetes.io/part-of: memberlist {{- with .Values.ingester.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.ingester.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.ingester.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.ingester.priorityClassName }} priorityClassName: {{ .Values.ingester.priorityClassName }} {{- end }} {{- if .Values.ingester.securityContext.enabled }} securityContext: {{- omit .Values.ingester.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.ingester.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: - name: ingester image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=ingester" - "-config.file=/etc/cortex/cortex.yaml" {{- include "cortex.memcached" . | nindent 12}} {{- range $key, $value := .Values.ingester.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.ingester.extraVolumeMounts }} {{- toYaml .Values.ingester.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config - name: storage mountPath: "/data" {{- with .Values.ingester.persistentVolume.subPath }} subPath: {{ . }} {{- end }} ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: grpc containerPort: {{ .Values.config.server.grpc_listen_port }} protocol: TCP - name: gossip containerPort: {{ .Values.config.memberlist.bind_port }} protocol: TCP {{- if .Values.ingester.startupProbe }} startupProbe: {{- toYaml .Values.ingester.startupProbe | nindent 12 }} {{- end }} {{- if .Values.ingester.livenessProbe }} livenessProbe: {{- toYaml .Values.ingester.livenessProbe | nindent 12 }} {{- end }} readinessProbe: {{- toYaml .Values.ingester.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.ingester.resources | nindent 12 }} {{- if .Values.ingester.containerSecurityContext.enabled }} securityContext: {{- omit .Values.ingester.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} env: {{- if .Values.ingester.env }} {{ toYaml .Values.ingester.env | nindent 12 }} {{- end }} {{- with .Values.ingester.lifecycle }} lifecycle: {{- toYaml . | nindent 12 }} {{- end }} {{- with .Values.ingester.extraContainers }} {{- toYaml . | nindent 8 }} {{- end }} nodeSelector: {{- toYaml .Values.ingester.nodeSelector | nindent 8 }} {{- if .Values.ingester.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.ingester.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.ingester.affinity | nindent 8 }} tolerations: {{- toYaml .Values.ingester.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.ingester.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config - name: storage emptyDir: {} {{- if .Values.ingester.extraVolumes }} {{- toYaml .Values.ingester.extraVolumes | nindent 8}} {{- end }} {{- end -}} ================================================ FILE: templates/ingester/ingester-hpa.yaml ================================================ {{- if and .Values.ingester.enabled .Values.ingester.autoscaling.enabled -}} {{- with .Values.ingester.autoscaling -}} apiVersion: {{ include "cortex.hpaVersion" $ }} kind: HorizontalPodAutoscaler metadata: name: {{ include "cortex.ingesterFullname" $ }} namespace: {{ $.Release.Namespace }} labels: {{- include "cortex.ingesterLabels" $ | nindent 4 }} spec: scaleTargetRef: apiVersion: apps/v1 kind: {{ if $.Values.ingester.statefulSet.enabled }}StatefulSet{{ else }}Deployment{{ end }} name: {{ include "cortex.ingesterFullname" $ }} minReplicas: {{ .minReplicas }} maxReplicas: {{ .maxReplicas }} metrics: - type: Resource resource: name: memory target: type: Utilization averageUtilization: {{ .targetMemoryUtilizationPercentage }} {{- with .extraMetrics }} {{- toYaml . | nindent 4 }} {{- end }} {{- with .behavior }} behavior: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} {{- end }} ================================================ FILE: templates/ingester/ingester-poddisruptionbudget.yaml ================================================ {{- if and (gt (int .Values.ingester.replicas) 1) (.Values.ingester.podDisruptionBudget) (.Values.ingester.enabled) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.ingesterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.ingesterLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.ingesterSelectorLabels" . | nindent 6 }} {{- toYaml .Values.ingester.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/ingester/ingester-servicemonitor.yaml ================================================ {{- if and .Values.ingester.serviceMonitor.enabled .Values.ingester.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.ingesterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.ingesterLabels" . | nindent 4 }} {{- if .Values.ingester.serviceMonitor.additionalLabels }} {{ toYaml .Values.ingester.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.ingester.serviceMonitor.annotations }} annotations: {{ toYaml .Values.ingester.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.ingesterSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.ingester.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.ingester.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.ingester.serviceMonitor.interval }} interval: {{ .Values.ingester.serviceMonitor.interval }} {{- end }} {{- if .Values.ingester.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.ingester.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.ingester.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.ingester.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.ingester.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.ingester.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.ingester.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/ingester/ingester-statefulset.yaml ================================================ {{- if and .Values.ingester.statefulSet.enabled .Values.ingester.enabled -}} apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ include "cortex.ingesterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.ingesterLabels" . | nindent 4 }} app.kubernetes.io/part-of: memberlist annotations: {{- toYaml .Values.ingester.annotations | nindent 4 }} spec: {{- if not .Values.ingester.autoscaling.enabled }} replicas: {{ .Values.ingester.replicas }} {{- end }} selector: matchLabels: {{- include "cortex.ingesterSelectorLabels" . | nindent 6 }} updateStrategy: {{- toYaml .Values.ingester.statefulStrategy | nindent 4 }} podManagementPolicy: "{{ .Values.ingester.statefulSet.podManagementPolicy }}" serviceName: {{ template "cortex.fullname" . }}-ingester-headless {{- if .Values.ingester.persistentVolume.enabled }} {{- if semverCompare ">=1.23-0" .Capabilities.KubeVersion.Version }} {{- with .Values.ingester.persistentVolume.retentionPolicy }} persistentVolumeClaimRetentionPolicy: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} volumeClaimTemplates: - metadata: name: storage {{- if .Values.ingester.persistentVolume.annotations }} annotations: {{ toYaml .Values.ingester.persistentVolume.annotations | nindent 10 }} {{- end }} spec: {{- if .Values.ingester.persistentVolume.storageClass }} {{- if (eq "-" .Values.ingester.persistentVolume.storageClass) }} storageClassName: "" {{- else }} storageClassName: "{{ .Values.ingester.persistentVolume.storageClass }}" {{- end }} {{- end }} accessModes: {{ toYaml .Values.ingester.persistentVolume.accessModes | nindent 10 }} resources: requests: storage: "{{ .Values.ingester.persistentVolume.size }}" {{- end }} template: metadata: labels: {{- include "cortex.ingesterLabels" . | nindent 8 }} app.kubernetes.io/part-of: memberlist {{- with .Values.ingester.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.ingester.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.ingester.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.ingester.priorityClassName }} priorityClassName: {{ .Values.ingester.priorityClassName }} {{- end }} {{- if .Values.ingester.securityContext.enabled }} securityContext: {{- omit .Values.ingester.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.ingester.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} nodeSelector: {{- toYaml .Values.ingester.nodeSelector | nindent 8 }} {{- if .Values.ingester.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.ingester.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.ingester.affinity | nindent 8 }} tolerations: {{- toYaml .Values.ingester.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.ingester.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config {{- if not .Values.ingester.persistentVolume.enabled }} - name: storage emptyDir: {} {{- end }} {{- if .Values.ingester.extraVolumes }} {{- toYaml .Values.ingester.extraVolumes | nindent 8 }} {{- end }} containers: {{- if .Values.ingester.extraContainers }} {{- toYaml .Values.ingester.extraContainers | nindent 8 }} {{- end }} - name: ingester image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=ingester" - "-config.file=/etc/cortex/cortex.yaml" {{- include "cortex.memcached" . | nindent 12}} {{- range $key, $value := .Values.ingester.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.ingester.extraVolumeMounts }} {{- toYaml .Values.ingester.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config - name: storage mountPath: "/data" {{- with .Values.ingester.persistentVolume.subPath }} subPath: {{ . }} {{- end }} ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: grpc containerPort: {{ .Values.config.server.grpc_listen_port }} protocol: TCP - name: gossip containerPort: {{ .Values.config.memberlist.bind_port }} protocol: TCP {{- if .Values.ingester.startupProbe }} startupProbe: {{- toYaml .Values.ingester.startupProbe | nindent 12 }} {{- end }} {{- if .Values.ingester.livenessProbe }} livenessProbe: {{- toYaml .Values.ingester.livenessProbe | nindent 12 }} {{- end }} readinessProbe: {{- toYaml .Values.ingester.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.ingester.resources | nindent 12 }} {{- if .Values.ingester.containerSecurityContext.enabled }} securityContext: {{- omit .Values.ingester.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.ingester.env }} env: {{- toYaml .Values.ingester.env | nindent 12 }} {{- end }} {{- with .Values.ingester.lifecycle }} lifecycle: {{- toYaml . | nindent 12 }} {{- end }} {{- end -}} ================================================ FILE: templates/ingester/ingester-svc-headless.yaml ================================================ {{- if .Values.ingester.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.ingesterFullname" . }}-headless namespace: {{ .Release.Namespace }} labels: {{- include "cortex.ingesterLabels" . | nindent 4 }} {{- with .Values.ingester.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.ingester.service.annotations | nindent 4 }} spec: type: ClusterIP clusterIP: None ports: - port: {{ .Values.config.server.grpc_listen_port }} protocol: TCP name: grpc targetPort: grpc selector: {{- include "cortex.ingesterSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/ingester/ingester-svc.yaml ================================================ {{- if .Values.ingester.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.ingesterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.ingesterLabels" . | nindent 4 }} {{- with .Values.ingester.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.ingester.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.ingesterSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/nginx/_helpers-nginx.tpl ================================================ {{/* nginx fullname */}} {{- define "cortex.nginxFullname" -}} {{ include "cortex.fullname" . }}-nginx {{- end }} {{/* nginx common labels */}} {{- define "cortex.nginxLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: nginx {{- end }} {{/* nginx selector labels */}} {{- define "cortex.nginxSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: nginx {{- end }} ================================================ FILE: templates/nginx/nginx-config.yaml ================================================ {{- if .Values.nginx.enabled }} {{- $rootDomain := printf "%s.svc.%s:%d" .Release.Namespace .Values.clusterDomain (.Values.config.server.http_listen_port | int) }} kind: ConfigMap apiVersion: v1 metadata: name: {{ include "cortex.nginxFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.nginxLabels" . | nindent 4 }} data: nginx.conf: |- worker_processes 5; ## Default: 1 error_log /dev/stderr; pid /tmp/nginx.pid; worker_rlimit_nofile 8192; events { worker_connections 4096; ## Default: 1024 } {{- with .Values.nginx.config.mainSnippet }} {{ tpl . $ | nindent 4 }} {{- end }} http { default_type application/octet-stream; client_max_body_size {{.Values.nginx.config.client_max_body_size}}; log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $http_x_scope_orgid'; {{- if .Values.nginx.config.verboseLogging }} access_log /dev/stderr main; {{- else }} map $status $loggable { ~^[23] 0; default 1; } access_log /dev/stderr main if=$loggable; {{- end }} sendfile on; tcp_nopush on; resolver {{ default (printf "kube-dns.kube-system.svc.%s" .Values.clusterDomain ) .Values.nginx.config.dnsResolver }}{{- if .Values.nginx.config.dnsTTL }} valid={{ .Values.nginx.config.dnsTTL }}{{- end }}; {{- with .Values.nginx.config.httpSnippet }} {{ tpl . $ | nindent 6 }} {{- end }} server { # simple reverse-proxy listen {{ .Values.nginx.http_listen_port }}; proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; proxy_http_version 1.1; {{- range $key, $value := .Values.nginx.config.setHeaders }} proxy_set_header {{ $key }} {{ $value }}; {{- end }} {{ if .Values.nginx.config.basicAuthSecretName -}} auth_basic "Restricted Content"; auth_basic_user_file /etc/apache2/.htpasswd; {{- end }} {{- with .Values.nginx.config.serverSnippet }} {{ tpl . $ | nindent 8 }} {{- end }} location = /healthz { # auth_basic off is not set here, even when a basic auth directive is # included in the server block, as Nginx's NGX_HTTP_REWRITE_PHASE # (point when this return statement is evaluated) comes before the # NGX_HTTP_ACCESS_PHASE (point when basic auth is evaluated). Thus, # this return statement returns a response before basic auth is # evaluated. return 200 'alive'; } {{- if .Values.distributor.enabled }} # Distributor Config location = /ring { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-distributor.{{ $rootDomain }}$request_uri; } location = /all_user_stats { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-distributor.{{ $rootDomain }}$request_uri; } {{- $push_endpoint := .Values.nginx.config.override_push_endpoint | default (printf "%s://%s-distributor.%s" .Values.nginx.config.upstream_protocol (include "cortex.fullname" .) $rootDomain) }} # Push API endpoints location = /api/prom/push { proxy_pass {{ $push_endpoint }}$request_uri; } ## New Remote write API. Ref: https://cortexmetrics.io/docs/api/#remote-write location = /api/v1/push { proxy_pass {{ $push_endpoint }}$request_uri; } {{- end }} {{- if .Values.alertmanager.enabled }} # Alertmanager Config location ~ /api/prom/alertmanager/.* { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-alertmanager.{{ $rootDomain }}$request_uri; } location ~ /api/v1/alerts { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-alertmanager.{{ $rootDomain }}$request_uri; } location ~ /multitenant_alertmanager/status { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-alertmanager.{{ $rootDomain }}$request_uri; } location = /api/prom/api/v1/alerts { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-alertmanager.{{ $rootDomain }}/api/v1/alerts; } {{- end }} {{- if .Values.ruler.enabled }} # Ruler Config location ~ /api/v1/rules { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-ruler.{{ $rootDomain }}$request_uri; } location ~ /ruler/ring { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-ruler.{{ $rootDomain }}$request_uri; } location ~ /api/prom/rules { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-ruler.{{ $rootDomain }}$request_uri; } {{- end }} {{- if .Values.query_frontend.enabled }} # Query Config location ~ /api/prom/.* { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-query-frontend.{{ $rootDomain }}$request_uri; } ## New Query frontend APIs as per https://cortexmetrics.io/docs/api/#querier--query-frontend location ~ ^{{.Values.config.api.prometheus_http_prefix}}/api/v1/(read|metadata|labels|series|query_range|query) { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-query-frontend.{{ $rootDomain }}$request_uri; } location ~ {{.Values.config.api.prometheus_http_prefix}}/api/v1/label/.* { proxy_pass {{ .Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" . }}-query-frontend.{{ $rootDomain }}$request_uri; } {{- end }} {{- if and (.Values.config.auth_enabled) (.Values.nginx.config.auth_orgs) }} # Auth orgs {{- range $org := compact .Values.nginx.config.auth_orgs | uniq }} location = /api/v1/push/{{ $org }} { proxy_set_header X-Scope-OrgID {{ $org }}; proxy_pass {{ $.Values.nginx.config.upstream_protocol }}://{{ template "cortex.fullname" $ }}-distributor.{{ $rootDomain }}/api/v1/push; } {{- end }} {{- end }} } } {{- end }} ================================================ FILE: templates/nginx/nginx-dep.yaml ================================================ {{- if .Values.nginx.enabled }} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.nginxFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.nginxLabels" . | nindent 4 }} annotations: {{- toYaml .Values.nginx.annotations | nindent 4 }} spec: {{- if not .Values.nginx.autoscaling.enabled }} replicas: {{ .Values.nginx.replicas }} {{- end }} selector: matchLabels: {{- include "cortex.nginxSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.nginx.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.nginxLabels" . | nindent 8 }} {{- with .Values.nginx.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/nginx/nginx-config.yaml") . | sha256sum }} {{- with .Values.nginx.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.nginx.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.nginx.priorityClassName }} priorityClassName: {{ .Values.nginx.priorityClassName }} {{- end }} {{- if .Values.nginx.securityContext.enabled }} securityContext: {{- omit .Values.nginx.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.nginx.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: - name: nginx image: "{{ .Values.nginx.image.repository }}:{{ .Values.nginx.image.tag }}" imagePullPolicy: {{ .Values.nginx.image.pullPolicy }} {{- if .Values.nginx.extraArgs }} args: {{- range $key, $value := .Values.nginx.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} {{- end }} volumeMounts: {{- if .Values.nginx.extraVolumeMounts }} {{- toYaml .Values.nginx.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/nginx {{- if .Values.nginx.config.basicAuthSecretName }} - name: htpasswd mountPath: /etc/apache2 readOnly: true {{- end }} ports: - name: http-metrics containerPort: {{ .Values.nginx.http_listen_port }} protocol: TCP startupProbe: {{- toYaml .Values.nginx.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.nginx.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.nginx.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.nginx.resources | nindent 12 }} {{- if .Values.nginx.containerSecurityContext.enabled }} securityContext: {{- omit .Values.nginx.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.nginx.env }} env: {{- toYaml .Values.nginx.env | nindent 12 }} {{- end }} {{- if .Values.nginx.extraContainers }} {{- toYaml .Values.nginx.extraContainers | nindent 8}} {{- end }} nodeSelector: {{- toYaml .Values.nginx.nodeSelector | nindent 8 }} {{- if .Values.nginx.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.nginx.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.nginx.affinity | nindent 8 }} tolerations: {{- toYaml .Values.nginx.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.nginx.terminationGracePeriodSeconds }} volumes: - name: config configMap: name: {{ template "cortex.fullname" . }}-nginx {{- if .Values.nginx.config.basicAuthSecretName }} - name: htpasswd secret: defaultMode: 420 secretName: {{ .Values.nginx.config.basicAuthSecretName }} {{- end }} {{- if .Values.nginx.extraVolumes }} {{- toYaml .Values.nginx.extraVolumes | nindent 8}} {{- end }} {{- end }} ================================================ FILE: templates/nginx/nginx-hpa.yaml ================================================ {{- if and .Values.nginx.enabled .Values.nginx.autoscaling.enabled }} {{- with .Values.nginx.autoscaling -}} apiVersion: {{ include "cortex.hpaVersion" $ }} kind: HorizontalPodAutoscaler metadata: name: {{ include "cortex.nginxFullname" $ }} namespace: {{ $.Release.Namespace }} labels: {{- include "cortex.nginxLabels" $ | nindent 4 }} spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: {{ include "cortex.nginxFullname" $ }} minReplicas: {{ .minReplicas }} maxReplicas: {{ .maxReplicas }} metrics: {{- with .targetMemoryUtilizationPercentage }} - type: Resource resource: name: memory target: type: Utilization averageUtilization: {{ . }} {{- end }} {{- with .targetCPUUtilizationPercentage }} - type: Resource resource: name: cpu target: type: Utilization averageUtilization: {{ . }} {{- end }} {{- with .extraMetrics }} {{- toYaml . | nindent 4 }} {{- end }} {{- with .behavior }} behavior: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} {{- end }} ================================================ FILE: templates/nginx/nginx-ingress.yaml ================================================ {{- if and .Values.ingress.enabled .Values.nginx.enabled -}} apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: {{ include "cortex.nginxFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.nginxLabels" . | nindent 4 }} annotations: {{- toYaml .Values.ingress.annotations | nindent 4 }} spec: {{- if .Values.ingress.ingressClass.enabled }} ingressClassName: {{ .Values.ingress.ingressClass.name }} {{- end }} {{- if .Values.ingress.tls }} tls: {{- range .Values.ingress.tls }} - hosts: {{- range .hosts }} - {{ . | quote }} {{- end }} secretName: {{ .secretName }} {{- end }} {{- end }} rules: {{- range .Values.ingress.hosts }} - host: {{ .host | quote }} http: paths: {{- range .paths }} - path: {{ . }} pathType: "Prefix" backend: service: name: {{ include "cortex.nginxFullname" $ }} port: number: {{ $.Values.nginx.service.port | default $.Values.nginx.http_listen_port }} {{- end }} {{- end }} {{- end }} ================================================ FILE: templates/nginx/nginx-poddisruptionbudget.yaml ================================================ {{- if and (.Values.nginx.enabled) (gt (int .Values.nginx.replicas) 1) (.Values.nginx.podDisruptionBudget) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.nginxFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.nginxLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.nginxSelectorLabels" . | nindent 6 }} {{- toYaml .Values.nginx.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/nginx/nginx-svc.yaml ================================================ {{- if .Values.nginx.enabled }} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.nginxFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.nginxLabels" . | nindent 4 }} {{- with .Values.nginx.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.nginx.service.annotations | nindent 4 }} spec: type: {{ .Values.nginx.service.type }} ports: - port: {{ .Values.nginx.service.port | default .Values.nginx.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.nginxSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/overrides-exporter/_helpers-overrides-exporter.tpl ================================================ {{/* overrides-exporter fullname */}} {{- define "cortex.overridesExporterFullname" -}} {{ include "cortex.fullname" . }}-overrides-exporter {{- end }} {{/* overrides-exporter common labels */}} {{- define "cortex.overridesExporterLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: overrides-exporter {{- end }} {{/* overrides-exporter selector labels */}} {{- define "cortex.overridesExporterSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: overrides-exporter {{- end }} ================================================ FILE: templates/overrides-exporter/overrides-exporter-dep.yaml ================================================ {{- if .Values.overrides_exporter.enabled }} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.overridesExporterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.overridesExporterLabels" . | nindent 4 }} annotations: {{- toYaml .Values.overrides_exporter.annotations | nindent 4 }} spec: replicas: {{ .Values.overrides_exporter.replicas }} selector: matchLabels: {{- include "cortex.overridesExporterSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.overrides_exporter.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.overridesExporterLabels" . | nindent 8 }} {{- with .Values.overrides_exporter.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: {{- if .Values.useExternalConfig }} checksum/config: {{ .Values.externalConfigVersion }} {{- else }} checksum/config: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} {{- end }} {{- with .Values.overrides_exporter.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ template "cortex.serviceAccountName" . }} {{- if .Values.overrides_exporter.priorityClassName }} priorityClassName: {{ .Values.overrides_exporter.priorityClassName }} {{- end }} {{- if .Values.overrides_exporter.securityContext.enabled }} securityContext: {{- omit .Values.overrides_exporter.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.overrides_exporter.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: - name: overrides-exporter image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=overrides-exporter" - "-config.file=/etc/cortex/cortex.yaml" {{- range $key, $value := .Values.overrides_exporter.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.overrides_exporter.extraVolumeMounts }} {{- toYaml .Values.overrides_exporter.extraVolumeMounts | nindent 12 }} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP startupProbe: {{- toYaml .Values.overrides_exporter.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.overrides_exporter.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.overrides_exporter.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.overrides_exporter.resources | nindent 12 }} {{- if .Values.overrides_exporter.containerSecurityContext.enabled }} securityContext: {{- omit .Values.overrides_exporter.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.overrides_exporter.env }} env: {{- toYaml .Values.overrides_exporter.env | nindent 12 }} {{- end }} {{- with .Values.overrides_exporter.lifecycle }} lifecycle: {{- toYaml . | nindent 12 }} {{- end }} {{- if .Values.overrides_exporter.extraContainers }} {{- toYaml .Values.overrides_exporter.extraContainers | nindent 8 }} {{- end }} nodeSelector: {{- toYaml .Values.overrides_exporter.nodeSelector | nindent 8 }} {{- if .Values.overrides_exporter.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.overrides_exporter.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.overrides_exporter.affinity | nindent 8 }} tolerations: {{- toYaml .Values.overrides_exporter.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.overrides_exporter.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config {{- if .Values.overrides_exporter.extraVolumes }} {{- toYaml .Values.overrides_exporter.extraVolumes | nindent 8 }} {{- end }} {{- end }} ================================================ FILE: templates/overrides-exporter/overrides-exporter-poddisruptionbudget.yaml ================================================ {{- if and (gt (int .Values.overrides_exporter.replicas) 1) (.Values.overrides_exporter.podDisruptionBudget) (.Values.overrides_exporter.enabled) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.overridesExporterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.overridesExporterLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.overridesExporterSelectorLabels" . | nindent 6 }} {{- toYaml .Values.overrides_exporter.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/overrides-exporter/overrides-exporter-servicemonitor.yaml ================================================ {{- if and .Values.overrides_exporter.enabled .Values.overrides_exporter.serviceMonitor.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.overridesExporterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.overridesExporterLabels" . | nindent 4 }} {{- if .Values.overrides_exporter.serviceMonitor.additionalLabels }} {{ toYaml .Values.overrides_exporter.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.overrides_exporter.serviceMonitor.annotations }} annotations: {{ toYaml .Values.overrides_exporter.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.overridesExporterSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.overrides_exporter.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.overrides_exporter.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.overrides_exporter.serviceMonitor.interval }} interval: {{ .Values.overrides_exporter.serviceMonitor.interval }} {{- end }} {{- if .Values.overrides_exporter.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.overrides_exporter.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.overrides_exporter.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.overrides_exporter.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.overrides_exporter.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.overrides_exporter.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.overrides_exporter.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/overrides-exporter/overrides-exporter-svc.yaml ================================================ {{- if .Values.overrides_exporter.enabled }} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.overridesExporterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.overridesExporterLabels" . | nindent 4 }} {{- with .Values.overrides_exporter.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.overrides_exporter.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.overridesExporterSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/parquet-converter/_helpers-parquet-converter.tpl ================================================ {{/* parquet-converter fullname */}} {{- define "cortex.parquetConverterFullname" -}} {{ include "cortex.fullname" . }}-parquet-converter {{- end }} {{/* parquet-converter common labels */}} {{- define "cortex.parquetConverterLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: parquet-converter {{- end }} {{/* parquet-converter selector labels */}} {{- define "cortex.parquetConverterSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: parquet-converter {{- end }} ================================================ FILE: templates/parquet-converter/parquet-converter-dep.yaml ================================================ {{- if .Values.parquet_converter.enabled }} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.parquetConverterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.parquetConverterLabels" . | nindent 4 }} annotations: {{- toYaml .Values.parquet_converter.annotations | nindent 4 }} spec: replicas: {{ .Values.parquet_converter.replicas }} selector: matchLabels: {{- include "cortex.parquetConverterSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.parquet_converter.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.parquetConverterLabels" . | nindent 8 }} {{- with .Values.parquet_converter.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: {{- if .Values.useExternalConfig }} checksum/config: {{ .Values.externalConfigVersion }} {{- else }} checksum/config: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} {{- end }} {{- with .Values.parquet_converter.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ template "cortex.serviceAccountName" . }} {{- if .Values.parquet_converter.priorityClassName }} priorityClassName: {{ .Values.parquet_converter.priorityClassName }} {{- end }} {{- if .Values.parquet_converter.securityContext.enabled }} securityContext: {{- omit .Values.parquet_converter.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.parquet_converter.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: - name: parquet-converter image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=parquet-converter" - "-config.file=/etc/cortex/cortex.yaml" {{- range $key, $value := .Values.parquet_converter.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.parquet_converter.extraVolumeMounts }} {{- toYaml .Values.parquet_converter.extraVolumeMounts | nindent 12 }} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP startupProbe: {{- toYaml .Values.parquet_converter.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.parquet_converter.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.parquet_converter.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.parquet_converter.resources | nindent 12 }} {{- if .Values.parquet_converter.containerSecurityContext.enabled }} securityContext: {{- omit .Values.parquet_converter.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.parquet_converter.env }} env: {{- toYaml .Values.parquet_converter.env | nindent 12 }} {{- end }} {{- with .Values.parquet_converter.lifecycle }} lifecycle: {{- toYaml . | nindent 12 }} {{- end }} {{- if .Values.parquet_converter.extraContainers }} {{- toYaml .Values.parquet_converter.extraContainers | nindent 8 }} {{- end }} nodeSelector: {{- toYaml .Values.parquet_converter.nodeSelector | nindent 8 }} {{- if .Values.parquet_converter.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.parquet_converter.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.parquet_converter.affinity | nindent 8 }} tolerations: {{- toYaml .Values.parquet_converter.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.parquet_converter.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config {{- if .Values.parquet_converter.extraVolumes }} {{- toYaml .Values.parquet_converter.extraVolumes | nindent 8 }} {{- end }} {{- end }} ================================================ FILE: templates/parquet-converter/parquet-converter-servicemonitor.yaml ================================================ {{- if and .Values.parquet_converter.enabled .Values.parquet_converter.serviceMonitor.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.parquetConverterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.parquetConverterLabels" . | nindent 4 }} {{- if .Values.parquet_converter.serviceMonitor.additionalLabels }} {{ toYaml .Values.parquet_converter.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.parquet_converter.serviceMonitor.annotations }} annotations: {{ toYaml .Values.parquet_converter.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.parquetConverterSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.parquet_converter.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.parquet_converter.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.parquet_converter.serviceMonitor.interval }} interval: {{ .Values.parquet_converter.serviceMonitor.interval }} {{- end }} {{- if .Values.parquet_converter.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.parquet_converter.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.parquet_converter.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.parquet_converter.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.parquet_converter.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.parquet_converter.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.parquet_converter.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/parquet-converter/parquet-converter-svc.yaml ================================================ {{- if .Values.parquet_converter.enabled }} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.parquetConverterFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.parquetConverterLabels" . | nindent 4 }} {{- with .Values.parquet_converter.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.parquet_converter.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.parquetConverterSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/purger/_helpers-purger.tpl ================================================ {{/* purger fullname */}} {{- define "cortex.purgerFullname" -}} {{ include "cortex.fullname" . }}-purger {{- end }} {{/* purger common labels */}} {{- define "cortex.purgerLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: purger {{- end }} {{/* purger selector labels */}} {{- define "cortex.purgerSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: purger {{- end }} ================================================ FILE: templates/purger/purger-dep.yaml ================================================ {{- if .Values.purger.enabled }} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.purgerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.purgerLabels" . | nindent 4 }} annotations: {{- toYaml .Values.purger.annotations | nindent 4 }} spec: replicas: {{ .Values.purger.replicas }} selector: matchLabels: {{- include "cortex.purgerSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.purger.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.purgerLabels" . | nindent 8 }} {{- with .Values.purger.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.query_frontend.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.purger.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.purger.securityContext.enabled }} securityContext: {{- omit .Values.purger.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.purger.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: - name: purger image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=purger" - "-config.file=/etc/cortex/cortex.yaml" {{- range $key, $value := .Values.purger.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.purger.extraVolumeMounts }} {{- toYaml .Values.purger.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: grpc containerPort: {{ .Values.config.server.grpc_listen_port }} protocol: TCP startupProbe: {{- toYaml .Values.purger.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.purger.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.purger.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.purger.resources | nindent 12 }} {{- if .Values.purger.containerSecurityContext.enabled }} securityContext: {{- omit .Values.purger.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.purger.env }} env: {{- toYaml .Values.purger.env | nindent 12 }} {{- end }} {{- with .Values.purger.lifecycle }} lifecycle: {{- toYaml . | nindent 12 }} {{- end }} {{- if .Values.purger.extraContainers }} {{- toYaml .Values.purger.extraContainers | nindent 8}} {{- end }} nodeSelector: {{- toYaml .Values.purger.nodeSelector | nindent 8 }} {{- if .Values.purger.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.purger.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.purger.affinity | nindent 8 }} tolerations: {{- toYaml .Values.purger.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.purger.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config {{- if .Values.purger.extraVolumes }} {{- toYaml .Values.purger.extraVolumes | nindent 8}} {{- end }} {{- end -}} ================================================ FILE: templates/purger/purger-servicemonitor.yaml ================================================ {{- if .Values.purger.serviceMonitor.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.purgerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.purgerLabels" . | nindent 4 }} {{- if .Values.purger.serviceMonitor.additionalLabels }} {{ toYaml .Values.purger.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.purger.serviceMonitor.annotations }} annotations: {{ toYaml .Values.purger.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.purgerSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.purger.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.purger.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.purger.serviceMonitor.interval }} interval: {{ .Values.purger.serviceMonitor.interval }} {{- end }} {{- if .Values.purger.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.purger.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.purger.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.purger.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.purger.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.purger.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.purger.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/purger/purger-svc-headless.yaml ================================================ {{- if .Values.purger.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.purgerFullname" . }}-headless namespace: {{ .Release.Namespace }} labels: {{- include "cortex.purgerLabels" . | nindent 4 }} {{- with .Values.purger.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.purger.service.annotations | nindent 4 }} spec: type: ClusterIP clusterIP: None publishNotReadyAddresses: true ports: - port: {{ .Values.config.server.grpc_listen_port }} protocol: TCP name: grpc targetPort: grpc selector: {{- include "cortex.purgerSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/purger/purger-svc.yaml ================================================ {{- if .Values.purger.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.purgerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.purgerLabels" . | nindent 4 }} {{- with .Values.purger.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.purger.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.purgerSelectorLabels" . | nindent 4 }} {{- end -}} ================================================ FILE: templates/querier/_helpers-querier.tpl ================================================ {{/* querier fullname */}} {{- define "cortex.querierFullname" -}} {{ include "cortex.fullname" . }}-querier {{- end }} {{/* querier common labels */}} {{- define "cortex.querierLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: querier {{- end }} {{/* querier selector labels */}} {{- define "cortex.querierSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: querier {{- end }} ================================================ FILE: templates/querier/querier-dep.yaml ================================================ {{- if .Values.querier.enabled -}} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.querierFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.querierLabels" . | nindent 4 }} annotations: {{- toYaml .Values.querier.annotations | nindent 4 }} spec: {{- if not .Values.querier.autoscaling.enabled }} replicas: {{ .Values.querier.replicas }} {{- end }} selector: matchLabels: {{- include "cortex.querierSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.querier.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.querierLabels" . | nindent 8 }} {{- with .Values.querier.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.querier.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.querier.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.querier.priorityClassName }} priorityClassName: {{ .Values.querier.priorityClassName }} {{- end }} {{- if .Values.querier.securityContext.enabled }} securityContext: {{- omit .Values.querier.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.querier.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: - name: querier image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=querier" - "-config.file=/etc/cortex/cortex.yaml" {{- if .Values.query_scheduler.enabled }} - "-querier.scheduler-address={{ template "cortex.querySchedulerFullname" . }}-headless.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:{{ .Values.config.server.grpc_listen_port }}" {{- end }} {{- if and .Values.query_frontend.enabled (not .Values.query_scheduler.enabled) }} - "-querier.frontend-address={{ template "cortex.queryFrontendFullname" . }}-headless.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:{{ .Values.config.server.grpc_listen_port }}" {{- end }} {{- include "cortex.memcached" . | nindent 12}} {{- range $key, $value := .Values.querier.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.querier.extraVolumeMounts }} {{- toYaml .Values.querier.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config - name: storage mountPath: "/data" subPath: {{ .Values.querier.persistentVolume.subPath }} ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP startupProbe: {{- toYaml .Values.querier.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.querier.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.querier.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.querier.resources | nindent 12 }} {{- if .Values.querier.containerSecurityContext.enabled }} securityContext: {{- omit .Values.querier.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} env: {{- if .Values.querier.env }} {{- toYaml .Values.querier.env | nindent 12 }} {{- end }} {{- with .Values.querier.lifecycle }} lifecycle: {{- toYaml . | nindent 12 }} {{- end }} {{- if .Values.querier.extraContainers }} {{- toYaml .Values.querier.extraContainers | nindent 8}} {{- end }} nodeSelector: {{- toYaml .Values.querier.nodeSelector | nindent 8 }} {{- if .Values.querier.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.querier.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.querier.affinity | nindent 8 }} tolerations: {{- toYaml .Values.querier.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.querier.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config - name: storage emptyDir: {} {{- if .Values.querier.extraVolumes }} {{- toYaml .Values.querier.extraVolumes | nindent 8}} {{- end }} {{- end -}} ================================================ FILE: templates/querier/querier-hpa.yaml ================================================ {{- if and .Values.querier.enabled .Values.querier.autoscaling.enabled -}} {{- with .Values.querier.autoscaling -}} apiVersion: {{ include "cortex.hpaVersion" $ }} kind: HorizontalPodAutoscaler metadata: name: {{ include "cortex.querierFullname" $ }} namespace: {{ $.Release.Namespace }} labels: {{- include "cortex.querierLabels" $ | nindent 4 }} spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: {{ include "cortex.querierFullname" $ }} minReplicas: {{ .minReplicas }} maxReplicas: {{ .maxReplicas }} metrics: {{- with .targetMemoryUtilizationPercentage }} - type: Resource resource: name: memory target: type: Utilization averageUtilization: {{ . }} {{- end }} {{- with .targetCPUUtilizationPercentage }} - type: Resource resource: name: cpu target: type: Utilization averageUtilization: {{ . }} {{- end }} {{- with .extraMetrics }} {{- toYaml . | nindent 4 }} {{- end }} {{- with .behavior }} behavior: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} {{- end }} ================================================ FILE: templates/querier/querier-poddisruptionbudget.yaml ================================================ {{- if and (gt (int .Values.querier.replicas) 1) (.Values.querier.podDisruptionBudget) (.Values.querier.enabled) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.querierFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.querierLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.querierSelectorLabels" . | nindent 6 }} {{- toYaml .Values.querier.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/querier/querier-servicemonitor.yaml ================================================ {{- if and .Values.querier.serviceMonitor.enabled .Values.querier.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.querierFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.querierLabels" . | nindent 4 }} {{- if .Values.querier.serviceMonitor.additionalLabels }} {{ toYaml .Values.querier.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.querier.serviceMonitor.annotations }} annotations: {{ toYaml .Values.querier.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.querierSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.querier.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.querier.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.querier.serviceMonitor.interval }} interval: {{ .Values.querier.serviceMonitor.interval }} {{- end }} {{- if .Values.querier.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.querier.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.querier.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.querier.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.querier.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.querier.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.querier.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/querier/querier-svc.yaml ================================================ {{- if .Values.querier.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.querierFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.querierLabels" . | nindent 4 }} {{- with .Values.querier.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.querier.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.querierSelectorLabels" . | nindent 4 }} {{- end -}} ================================================ FILE: templates/query-frontend/_helpers-query-frontend.tpl ================================================ {{/* query-frontend fullname */}} {{- define "cortex.queryFrontendFullname" -}} {{ include "cortex.fullname" . }}-query-frontend {{- end }} {{/* query-frontend common labels */}} {{- define "cortex.queryFrontendLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: query-frontend {{- end }} {{/* query-frontend selector labels */}} {{- define "cortex.queryFrontendSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: query-frontend {{- end }} ================================================ FILE: templates/query-frontend/query-frontend-dep.yaml ================================================ {{- if .Values.query_frontend.enabled -}} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.queryFrontendFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.queryFrontendLabels" . | nindent 4 }} annotations: {{- toYaml .Values.query_frontend.annotations | nindent 4 }} spec: replicas: {{ .Values.query_frontend.replicas }} selector: matchLabels: {{- include "cortex.queryFrontendSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.query_frontend.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.queryFrontendLabels" . | nindent 8 }} {{- with .Values.query_frontend.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.query_frontend.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.query_frontend.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.query_frontend.priorityClassName }} priorityClassName: {{ .Values.query_frontend.priorityClassName }} {{- end }} {{- if .Values.query_frontend.securityContext.enabled }} securityContext: {{- omit .Values.query_frontend.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.query_frontend.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: - name: query-frontend image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=query-frontend" - "-config.file=/etc/cortex/cortex.yaml" {{- include "cortex.frontend-memcached" . | nindent 12 }} {{- if .Values.query_scheduler.enabled }} - "-frontend.scheduler-address={{ template "cortex.querySchedulerFullname" . }}-headless.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:{{ .Values.config.server.grpc_listen_port }}" {{- end }} {{- range $key, $value := .Values.query_frontend.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.query_frontend.extraVolumeMounts }} {{- toYaml .Values.query_frontend.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: grpc containerPort: {{ .Values.config.server.grpc_listen_port }} protocol: TCP startupProbe: {{- toYaml .Values.query_frontend.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.query_frontend.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.query_frontend.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.query_frontend.resources | nindent 12 }} {{- if .Values.query_frontend.containerSecurityContext.enabled }} securityContext: {{- omit .Values.query_frontend.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.query_frontend.env }} env: {{- toYaml .Values.query_frontend.env | nindent 12 }} {{- end }} {{- with .Values.query_frontend.lifecycle }} lifecycle: {{- toYaml . | nindent 12 }} {{- end }} {{- if .Values.query_frontend.extraContainers }} {{- toYaml .Values.query_frontend.extraContainers | nindent 8}} {{- end }} nodeSelector: {{- toYaml .Values.query_frontend.nodeSelector | nindent 8 }} {{- if .Values.query_frontend.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.query_frontend.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.query_frontend.affinity | nindent 8 }} tolerations: {{- toYaml .Values.query_frontend.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.query_frontend.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config {{- if .Values.query_frontend.extraVolumes }} {{- toYaml .Values.query_frontend.extraVolumes | nindent 8}} {{- end }} {{- end -}} ================================================ FILE: templates/query-frontend/query-frontend-servicemonitor.yaml ================================================ {{- if and .Values.query_frontend.serviceMonitor.enabled .Values.query_frontend.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.queryFrontendFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.queryFrontendLabels" . | nindent 4 }} {{- if .Values.query_frontend.serviceMonitor.additionalLabels }} {{ toYaml .Values.query_frontend.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.query_frontend.serviceMonitor.annotations }} annotations: {{ toYaml .Values.query_frontend.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.queryFrontendSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.query_frontend.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.query_frontend.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.query_frontend.serviceMonitor.interval }} interval: {{ .Values.query_frontend.serviceMonitor.interval }} {{- end }} {{- if .Values.query_frontend.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.query_frontend.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.query_frontend.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.query_frontend.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.query_frontend.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.query_frontend.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.query_frontend.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/query-frontend/query-frontend-svc-headless.yaml ================================================ {{- if .Values.query_frontend.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.queryFrontendFullname" . }}-headless namespace: {{ .Release.Namespace }} labels: {{- include "cortex.queryFrontendLabels" . | nindent 4 }} {{- with .Values.query_frontend.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.query_frontend.service.annotations | nindent 4 }} spec: type: ClusterIP clusterIP: None publishNotReadyAddresses: true ports: - port: {{ .Values.config.server.grpc_listen_port }} protocol: TCP name: grpc targetPort: grpc selector: {{- include "cortex.queryFrontendSelectorLabels" . | nindent 4 }} {{- end -}} ================================================ FILE: templates/query-frontend/query-frontend-svc.yaml ================================================ {{- if .Values.query_frontend.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.queryFrontendFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.queryFrontendLabels" . | nindent 4 }} {{- with .Values.query_frontend.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.query_frontend.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics - port: {{ .Values.config.server.grpc_listen_port }} protocol: TCP name: grpc targetPort: grpc selector: {{- include "cortex.queryFrontendSelectorLabels" . | nindent 4 }} {{- end -}} ================================================ FILE: templates/query-frontend/query-poddisruptionbudget.yaml ================================================ {{- if and (gt (int .Values.query_frontend.replicas) 1) (.Values.query_frontend.podDisruptionBudget) (.Values.query_frontend.enabled) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.queryFrontendFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.queryFrontendLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.queryFrontendSelectorLabels" . | nindent 6 }} {{- toYaml .Values.query_frontend.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/query-scheduler/_helpers-query-scheduler.tpl ================================================ {{/* query-scheduler fullname */}} {{- define "cortex.querySchedulerFullname" -}} {{ include "cortex.fullname" . }}-query-scheduler {{- end }} {{/* query-scheduler common labels */}} {{- define "cortex.querySchedulerLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: query-scheduler {{- end }} {{/* query-scheduler selector labels */}} {{- define "cortex.querySchedulerSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: query-scheduler {{- end }} ================================================ FILE: templates/query-scheduler/query-scheduler-dep.yaml ================================================ {{- if .Values.query_scheduler.enabled }} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.querySchedulerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.querySchedulerLabels" . | nindent 4 }} annotations: {{- toYaml .Values.query_scheduler.annotations | nindent 4 }} spec: replicas: {{ .Values.query_scheduler.replicas }} selector: matchLabels: {{- include "cortex.querySchedulerSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.query_scheduler.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.querySchedulerLabels" . | nindent 8 }} {{- with .Values.query_scheduler.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.query_scheduler.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ template "cortex.serviceAccountName" . }} {{- if .Values.query_scheduler.priorityClassName }} priorityClassName: {{ .Values.query_scheduler.priorityClassName }} {{- end }} {{- if .Values.query_scheduler.securityContext.enabled }} securityContext: {{- omit .Values.query_scheduler.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.query_scheduler.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: - name: query-scheduler image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=query-scheduler" - "-config.file=/etc/cortex/cortex.yaml" {{- range $key, $value := .Values.query_scheduler.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.query_scheduler.extraVolumeMounts }} {{- toYaml .Values.query_scheduler.extraVolumeMounts | nindent 12 }} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: grpc containerPort: {{ .Values.config.server.grpc_listen_port }} protocol: TCP startupProbe: {{- toYaml .Values.query_scheduler.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.query_scheduler.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.query_scheduler.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.query_scheduler.resources | nindent 12 }} {{- if .Values.query_scheduler.containerSecurityContext.enabled }} securityContext: {{- omit .Values.query_scheduler.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.query_scheduler.env }} env: {{- toYaml .Values.query_scheduler.env | nindent 12 }} {{- end }} {{- with .Values.query_scheduler.lifecycle }} lifecycle: {{- toYaml . | nindent 12 }} {{- end }} {{- if .Values.query_scheduler.extraContainers }} {{- toYaml .Values.query_scheduler.extraContainers | nindent 8 }} {{- end }} nodeSelector: {{- toYaml .Values.query_scheduler.nodeSelector | nindent 8 }} {{- if .Values.query_scheduler.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.query_scheduler.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.query_scheduler.affinity | nindent 8 }} tolerations: {{- toYaml .Values.query_scheduler.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.query_scheduler.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config {{- if .Values.query_scheduler.extraVolumes }} {{- toYaml .Values.query_scheduler.extraVolumes | nindent 8 }} {{- end }} {{- end }} ================================================ FILE: templates/query-scheduler/query-scheduler-poddisruptionbudget.yaml ================================================ {{- if and (.Values.query_scheduler.enabled) (gt (int .Values.query_scheduler.replicas) 1) (.Values.query_scheduler.podDisruptionBudget) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.querySchedulerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.querySchedulerLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.querySchedulerSelectorLabels" . | nindent 6 }} {{- toYaml .Values.query_scheduler.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/query-scheduler/query-scheduler-servicemonitor.yaml ================================================ {{- if and .Values.query_scheduler.enabled .Values.query_scheduler.serviceMonitor.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.querySchedulerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.querySchedulerLabels" . | nindent 4 }} {{- if .Values.query_scheduler.serviceMonitor.additionalLabels }} {{ toYaml .Values.query_scheduler.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.query_scheduler.serviceMonitor.annotations }} annotations: {{ toYaml .Values.query_scheduler.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.querySchedulerSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.query_scheduler.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.query_scheduler.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.query_scheduler.serviceMonitor.interval }} interval: {{ .Values.query_scheduler.serviceMonitor.interval }} {{- end }} {{- if .Values.query_scheduler.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.query_scheduler.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.query_scheduler.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.query_scheduler.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.query_scheduler.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.query_scheduler.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.query_scheduler.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/query-scheduler/query-scheduler-svc-headless.yaml ================================================ {{- if .Values.query_scheduler.enabled }} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.querySchedulerFullname" . }}-headless namespace: {{ .Release.Namespace }} labels: {{- include "cortex.querySchedulerLabels" . | nindent 4 }} {{- with .Values.query_scheduler.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.query_scheduler.service.annotations | nindent 4 }} spec: type: ClusterIP clusterIP: None publishNotReadyAddresses: true ports: - port: {{ .Values.config.server.grpc_listen_port }} protocol: TCP name: grpc targetPort: grpc selector: {{- include "cortex.querySchedulerSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/query-scheduler/query-scheduler-svc.yaml ================================================ {{- if .Values.query_scheduler.enabled }} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.querySchedulerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.querySchedulerLabels" . | nindent 4 }} {{- with .Values.query_scheduler.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.query_scheduler.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.querySchedulerSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/ruler/_helpers-ruler.tpl ================================================ {{/* ruler fullname */}} {{- define "cortex.rulerFullname" -}} {{ include "cortex.fullname" . }}-ruler {{- end }} {{/* ruler common labels */}} {{- define "cortex.rulerLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: ruler {{- end }} {{/* ruler selector labels */}} {{- define "cortex.rulerSelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: ruler {{- end }} {{/* format rules dir */}} {{- define "cortex.rulerRulesDirName" -}} rules-{{ . | replace "_" "-" | trimSuffix "-" }} {{- end }} {{/* ruler config validation Ref: https://cortexmetrics.io/docs/guides/ruler-sharding/ */}} {{- define "cortex.rulerValidation" -}} {{- with .Values.ruler -}} {{- if .validation.enabled -}} {{- if or (gt (int .replicas) 1) .autoscaling.enabled -}} {{- with $.Values.config.ruler -}} {{- if not .enable_sharding -}} {{- fail "must enable_sharding to scale the ruler" -}} {{- end }} {{- if not ((.ring | default dict).kvstore | default dict).store -}} {{- fail "must configure kvstore to scale the ruler" -}} {{- end }} {{- end }} {{- end }} {{- end }} {{- end }} {{- end }} ================================================ FILE: templates/ruler/ruler-configmap.yaml ================================================ {{- if .Values.ruler.enabled }} {{- range $dir, $files := .Values.ruler.directories }} --- apiVersion: v1 kind: ConfigMap metadata: name: {{ include "cortex.rulerFullname" $ }}-{{ include "cortex.rulerRulesDirName" $dir }} namespace: {{ $.Release.Namespace }} labels: {{- include "cortex.rulerLabels" $ | nindent 4 }} data: {{- toYaml $files | nindent 2}} {{- end }} {{- end }} ================================================ FILE: templates/ruler/ruler-dep.yaml ================================================ {{- if .Values.ruler.enabled -}} {{- include "cortex.rulerValidation" $ -}} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "cortex.rulerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.rulerLabels" . | nindent 4 }} app.kubernetes.io/part-of: memberlist annotations: {{- toYaml .Values.ruler.annotations | nindent 4 }} spec: {{- if not .Values.ruler.autoscaling.enabled }} replicas: {{ .Values.ruler.replicas }} {{- end }} selector: matchLabels: {{- include "cortex.rulerSelectorLabels" . | nindent 6 }} strategy: {{- toYaml .Values.ruler.strategy | nindent 4 }} template: metadata: labels: {{- include "cortex.rulerLabels" . | nindent 8 }} app.kubernetes.io/part-of: memberlist {{- with .Values.ruler.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.ruler.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.ruler.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.ruler.priorityClassName }} priorityClassName: {{ .Values.ruler.priorityClassName }} {{- end }} {{- if .Values.ruler.securityContext.enabled }} securityContext: {{- omit .Values.ruler.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.ruler.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} containers: {{- if .Values.ruler.sidecar.enabled }} - name: {{ template "cortex.name" . }}-sc-rules {{- if .Values.ruler.sidecar.image.sha }} image: "{{ .Values.ruler.sidecar.image.repository }}:{{ .Values.ruler.sidecar.image.tag }}@sha256:{{ .Values.ruler.sidecar.image.sha }}" {{- else }} image: "{{ .Values.ruler.sidecar.image.repository }}:{{ .Values.ruler.sidecar.image.tag }}" {{- end }} imagePullPolicy: {{ .Values.ruler.sidecar.imagePullPolicy }} env: {{- if .Values.ruler.sidecar.watchMethod }} - name: METHOD value: {{ .Values.ruler.sidecar.watchMethod }} {{ end }} - name: LABEL value: "{{ .Values.ruler.sidecar.label }}" {{- if .Values.ruler.sidecar.labelValue }} - name: LABEL_VALUE value: {{ quote .Values.ruler.sidecar.labelValue }} {{- end }} - name: FOLDER value: "{{ .Values.ruler.sidecar.folder }}{{- with .Values.ruler.sidecar.defaultFolderName }}/{{ . }}{{- end }}" {{- if .Values.ruler.sidecar.resource}} - name: RESOURCE value: {{ quote .Values.ruler.sidecar.resource }} {{- end }} {{- if .Values.ruler.sidecar.enableUniqueFilenames }} - name: UNIQUE_FILENAMES value: "{{ .Values.ruler.sidecar.enableUniqueFilenames }}" {{- end }} {{- if .Values.ruler.sidecar.searchNamespace }} - name: NAMESPACE value: "{{ .Values.ruler.sidecar.searchNamespace }}" {{- end }} {{- if .Values.ruler.sidecar.skipTlsVerify }} - name: SKIP_TLS_VERIFY value: "{{ .Values.ruler.sidecar.skipTlsVerify }}" {{- end }} {{- if .Values.ruler.sidecar.folderAnnotation }} - name: FOLDER_ANNOTATION value: "{{ .Values.ruler.sidecar.folderAnnotation }}" {{- end }} {{- with .Values.ruler.sidecar.healthPort }} - name: HEALTH_PORT value: "{{ . }}" ports: - name: sidecar-health containerPort: {{ . }} protocol: TCP {{- end }} {{- with .Values.ruler.sidecar.startupProbe }} startupProbe: {{- toYaml . | nindent 12 }} {{- end }} {{- with .Values.ruler.sidecar.readinessProbe }} readinessProbe: {{- toYaml . | nindent 12 }} {{- end }} resources: {{- toYaml .Values.ruler.sidecar.resources | nindent 12 }} {{- if .Values.ruler.containerSecurityContext.enabled }} securityContext: {{- omit .Values.ruler.sidecar.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} volumeMounts: - name: sc-rules-volume mountPath: {{ .Values.ruler.sidecar.folder | quote }} {{- end }} - name: rules image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=ruler" - "-config.file=/etc/cortex/cortex.yaml" {{- if and .Values.alertmanager.enabled (not .Values.config.ruler.alertmanager_url) }} {{- if .Values.config.ruler.enable_alertmanager_discovery }} - "-ruler.alertmanager-url=http://_http-metrics._tcp.{{ template "cortex.alertmanagerFullname" . }}-headless.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}/api/prom/alertmanager/" {{- else }} - "-ruler.alertmanager-url=http://{{ template "cortex.alertmanagerFullname" . }}.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:{{ .Values.config.server.http_listen_port }}/api/prom/alertmanager/" {{- end }} {{- end }} {{- include "cortex.memcached" . | nindent 12}} {{- range $key, $value := .Values.ruler.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.ruler.extraVolumeMounts }} {{- toYaml .Values.ruler.extraVolumeMounts | nindent 12}} {{- end }} {{- if .Values.ruler.sidecar.enabled }} - name: sc-rules-volume mountPath: {{ .Values.ruler.sidecar.folder | quote }} {{ end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config - name: storage mountPath: /data - name: tmp mountPath: /rules {{- range $dir, $_ := .Values.ruler.directories }} - name: {{ include "cortex.rulerRulesDirName" $dir }} mountPath: /etc/cortex/rules/{{ $dir }} {{- end }} ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: gossip containerPort: {{ .Values.config.memberlist.bind_port }} protocol: TCP startupProbe: {{- toYaml .Values.ruler.startupProbe | nindent 12 }} livenessProbe: {{- toYaml .Values.ruler.livenessProbe | nindent 12 }} readinessProbe: {{- toYaml .Values.ruler.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.ruler.resources | nindent 12 }} {{- if .Values.ruler.containerSecurityContext.enabled }} securityContext: {{- omit .Values.ruler.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.ruler.env }} env: {{- toYaml .Values.ruler.env | nindent 12 }} {{- end }} {{- if .Values.ruler.extraContainers }} {{- toYaml .Values.ruler.extraContainers | nindent 8}} {{- end }} nodeSelector: {{- toYaml .Values.ruler.nodeSelector | nindent 8 }} {{- if .Values.ruler.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.ruler.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.ruler.affinity | nindent 8 }} tolerations: {{- toYaml .Values.ruler.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.ruler.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config - name: tmp emptyDir: {} {{- range $dir, $_ := .Values.ruler.directories }} - name: {{ include "cortex.rulerRulesDirName" $dir }} configMap: name: {{ include "cortex.rulerFullname" $ }}-{{ include "cortex.rulerRulesDirName" $dir }} {{- end }} - name: storage emptyDir: {} {{- if .Values.ruler.sidecar.enabled }} - name: sc-rules-volume emptyDir: {} {{- end }} {{- if .Values.ruler.extraVolumes }} {{- toYaml .Values.ruler.extraVolumes | nindent 8}} {{- end }} {{- end }} ================================================ FILE: templates/ruler/ruler-hpa.yaml ================================================ {{- if and .Values.ruler.enabled .Values.ruler.autoscaling.enabled }} {{- with .Values.ruler.autoscaling -}} apiVersion: {{ include "cortex.hpaVersion" $ }} kind: HorizontalPodAutoscaler metadata: name: {{ include "cortex.rulerFullname" $ }} namespace: {{ $.Release.Namespace }} labels: {{- include "cortex.rulerLabels" $ | nindent 4 }} spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: {{ include "cortex.rulerFullname" $ }} minReplicas: {{ .minReplicas }} maxReplicas: {{ .maxReplicas }} metrics: {{- with .targetMemoryUtilizationPercentage }} - type: Resource resource: name: memory target: type: Utilization averageUtilization: {{ . }} {{- end }} {{- with .targetCPUUtilizationPercentage }} - type: Resource resource: name: cpu target: type: Utilization averageUtilization: {{ . }} {{- end }} {{- with .extraMetrics }} {{- toYaml . | nindent 4 }} {{- end }} {{- with .behavior }} behavior: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} {{- end }} ================================================ FILE: templates/ruler/ruler-poddisruptionbudget.yaml ================================================ {{- if and (gt (int .Values.ruler.replicas) 1) (.Values.ruler.podDisruptionBudget) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.rulerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.rulerLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.rulerSelectorLabels" . | nindent 6 }} {{- toYaml .Values.ruler.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/ruler/ruler-servicemonitor.yaml ================================================ {{- if .Values.ruler.serviceMonitor.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.rulerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.rulerLabels" . | nindent 4 }} {{- if .Values.ruler.serviceMonitor.additionalLabels }} {{ toYaml .Values.ruler.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.ruler.serviceMonitor.annotations }} annotations: {{ toYaml .Values.ruler.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.rulerSelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.ruler.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.ruler.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.ruler.serviceMonitor.interval }} interval: {{ .Values.ruler.serviceMonitor.interval }} {{- end }} {{- if .Values.ruler.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.ruler.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.ruler.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.ruler.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.ruler.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.ruler.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.ruler.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/ruler/ruler-svc.yaml ================================================ {{- if .Values.ruler.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.rulerFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.rulerLabels" . | nindent 4 }} {{- with .Values.ruler.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.ruler.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.rulerSelectorLabels" . | nindent 4 }} {{- end }} ================================================ FILE: templates/runtime-configmap.yaml ================================================ {{- with .Values.runtimeconfigmap }} {{- if .create }} apiVersion: v1 kind: ConfigMap metadata: name: {{ template "cortex.fullname" $ }}-runtime-config namespace: {{ $.Release.Namespace }} labels: {{- include "cortex.labels" $ | nindent 4 }} {{- with .annotations }} annotations: {{- toYaml . | nindent 4 }} {{- end }} data: runtime_config.yaml: | {{- tpl (toYaml .runtime_config) $ | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/secret.yaml ================================================ {{- if (and (not .Values.useExternalConfig) (not .Values.useConfigMap)) }} apiVersion: v1 kind: Secret metadata: name: {{ template "cortex.fullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.labels" . | nindent 4 }} data: cortex.yaml: {{ tpl (toYaml .Values.config) . | b64enc }} {{- end }} ================================================ FILE: templates/serviceaccount.yaml ================================================ {{- if .Values.serviceAccount.create }} apiVersion: v1 kind: ServiceAccount metadata: name: {{ template "cortex.serviceAccountName" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.labels" . | nindent 4 }} annotations: {{- toYaml .Values.serviceAccount.annotations | nindent 4 }} automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }} {{- end }} ================================================ FILE: templates/store-gateway/_helpers-store-gateway.tpl ================================================ {{/* store-gateway fullname */}} {{- define "cortex.storeGatewayFullname" -}} {{ include "cortex.fullname" . }}-store-gateway {{- end }} {{/* store-gateway common labels */}} {{- define "cortex.storeGatewayLabels" -}} {{ include "cortex.labels" . }} app.kubernetes.io/component: store-gateway {{- end }} {{/* store-gateway selector labels */}} {{- define "cortex.storeGatewaySelectorLabels" -}} {{ include "cortex.selectorLabels" . }} app.kubernetes.io/component: store-gateway {{- end }} ================================================ FILE: templates/store-gateway/store-gateway-hpa.yaml ================================================ {{- if and .Values.store_gateway.enabled .Values.store_gateway.autoscaling.enabled -}} {{- with .Values.store_gateway.autoscaling -}} apiVersion: {{ include "cortex.hpaVersion" $ }} kind: HorizontalPodAutoscaler metadata: name: {{ include "cortex.storeGatewayFullname" $ }} namespace: {{ $.Release.Namespace }} labels: {{- include "cortex.storeGatewayLabels" $ | nindent 4 }} spec: scaleTargetRef: apiVersion: apps/v1 kind: StatefulSet name: {{ include "cortex.storeGatewayFullname" $ }} minReplicas: {{ .minReplicas }} maxReplicas: {{ .maxReplicas }} metrics: - type: Resource resource: name: memory target: type: Utilization averageUtilization: {{ .targetMemoryUtilizationPercentage }} {{- with .extraMetrics }} {{- toYaml . | nindent 4 }} {{- end }} {{- with .behavior }} behavior: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} {{- end }} ================================================ FILE: templates/store-gateway/store-gateway-poddisruptionbudget.yaml ================================================ {{- if and (gt (int .Values.store_gateway.replicas) 1) (.Values.store_gateway.podDisruptionBudget) (.Values.store_gateway.enabled) }} apiVersion: {{ include "cortex.pdbVersion" . }} kind: PodDisruptionBudget metadata: name: {{ include "cortex.storeGatewayFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.storeGatewayLabels" . | nindent 4 }} spec: selector: matchLabels: {{- include "cortex.storeGatewaySelectorLabels" . | nindent 6 }} {{- toYaml .Values.store_gateway.podDisruptionBudget | nindent 2 }} {{- end }} ================================================ FILE: templates/store-gateway/store-gateway-servicemonitor.yaml ================================================ {{- if and .Values.store_gateway.serviceMonitor.enabled .Values.store_gateway.enabled }} apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "cortex.storeGatewayFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.storeGatewayLabels" . | nindent 4 }} {{- if .Values.store_gateway.serviceMonitor.additionalLabels }} {{ toYaml .Values.store_gateway.serviceMonitor.additionalLabels | indent 4 }} {{- end }} {{- if .Values.store_gateway.serviceMonitor.annotations }} annotations: {{ toYaml .Values.store_gateway.serviceMonitor.annotations | indent 4 }} {{- end }} spec: selector: matchLabels: {{- include "cortex.storeGatewaySelectorLabels" . | nindent 6 }} namespaceSelector: matchNames: - {{ .Release.Namespace | quote }} {{- if .Values.store_gateway.serviceMonitor.podTargetLabels }} podTargetLabels: {{- range .Values.store_gateway.serviceMonitor.podTargetLabels }} - {{ . }} {{- end }} {{- end }} endpoints: - port: http-metrics {{- if .Values.store_gateway.serviceMonitor.interval }} interval: {{ .Values.store_gateway.serviceMonitor.interval }} {{- end }} {{- if .Values.store_gateway.serviceMonitor.scrapeTimeout }} scrapeTimeout: {{ .Values.store_gateway.serviceMonitor.scrapeTimeout }} {{- end }} {{- if .Values.store_gateway.serviceMonitor.relabelings }} relabelings: {{- toYaml .Values.store_gateway.serviceMonitor.relabelings | nindent 4 }} {{- end }} {{- if .Values.store_gateway.serviceMonitor.metricRelabelings }} metricRelabelings: {{- toYaml .Values.store_gateway.serviceMonitor.metricRelabelings | nindent 4 }} {{- end }} {{- with .Values.store_gateway.serviceMonitor.extraEndpointSpec }} {{- toYaml . | nindent 4 }} {{- end }} {{- end }} ================================================ FILE: templates/store-gateway/store-gateway-statefulset.yaml ================================================ {{- if .Values.store_gateway.enabled -}} apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ include "cortex.storeGatewayFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.storeGatewayLabels" . | nindent 4 }} app.kubernetes.io/part-of: memberlist annotations: {{- toYaml .Values.store_gateway.annotations | nindent 4 }} spec: {{- if not .Values.store_gateway.autoscaling.enabled }} replicas: {{ .Values.store_gateway.replicas }} {{- end }} selector: matchLabels: {{- include "cortex.storeGatewaySelectorLabels" . | nindent 6 }} updateStrategy: {{- toYaml .Values.store_gateway.strategy | nindent 4 }} podManagementPolicy: {{ .Values.store_gateway.podManagementPolicy | quote }} serviceName: {{ template "cortex.fullname" . }}-store-gateway-headless {{- if .Values.store_gateway.persistentVolume.enabled }} {{- if semverCompare ">=1.23-0" .Capabilities.KubeVersion.Version }} {{- with .Values.store_gateway.persistentVolume.retentionPolicy }} persistentVolumeClaimRetentionPolicy: {{- toYaml . | nindent 4 }} {{- end }} {{- end }} volumeClaimTemplates: - metadata: name: storage {{- if .Values.store_gateway.persistentVolume.annotations }} annotations: {{ toYaml .Values.store_gateway.persistentVolume.annotations | nindent 10 }} {{- end }} spec: {{- if .Values.store_gateway.persistentVolume.storageClass }} {{- if (eq "-" .Values.store_gateway.persistentVolume.storageClass) }} storageClassName: "" {{- else }} storageClassName: "{{ .Values.store_gateway.persistentVolume.storageClass }}" {{- end }} {{- end }} accessModes: {{- toYaml .Values.store_gateway.persistentVolume.accessModes | nindent 10 }} resources: requests: storage: "{{ .Values.store_gateway.persistentVolume.size }}" {{- end }} template: metadata: labels: {{- include "cortex.storeGatewayLabels" . | nindent 8 }} app.kubernetes.io/part-of: memberlist {{- with .Values.store_gateway.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} annotations: checksum/config: {{ include "cortex.configChecksum" . }} {{- with .Values.store_gateway.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ .Values.store_gateway.serviceAccount.name | default (include "cortex.serviceAccountName" . ) }} {{- if .Values.store_gateway.priorityClassName }} priorityClassName: {{ .Values.store_gateway.priorityClassName }} {{- end }} {{- if .Values.store_gateway.securityContext.enabled }} securityContext: {{- omit .Values.store_gateway.securityContext "enabled" | toYaml | nindent 8 }} {{- end }} initContainers: {{- toYaml .Values.store_gateway.initContainers | nindent 8 }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end }} {{- end }} nodeSelector: {{- toYaml .Values.store_gateway.nodeSelector | nindent 8 }} {{- if .Values.store_gateway.topologySpreadConstraints }} topologySpreadConstraints: {{- toYaml .Values.store_gateway.topologySpreadConstraints | nindent 8}} {{- end }} affinity: {{- toYaml .Values.store_gateway.affinity | nindent 8 }} tolerations: {{- toYaml .Values.store_gateway.tolerations | nindent 8 }} terminationGracePeriodSeconds: {{ .Values.store_gateway.terminationGracePeriodSeconds }} volumes: {{- include "cortex.configVolume" . | nindent 8 }} - name: runtime-config configMap: name: {{ template "cortex.fullname" . }}-runtime-config {{- if not .Values.store_gateway.persistentVolume.enabled }} - name: storage emptyDir: {} {{- end }} {{- if .Values.store_gateway.extraVolumes }} {{- toYaml .Values.store_gateway.extraVolumes | nindent 8 }} {{- end }} containers: {{- if .Values.store_gateway.extraContainers }} {{ toYaml .Values.store_gateway.extraContainers | nindent 8 }} {{- end }} - name: store-gateway image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - "-target=store-gateway" - "-config.file=/etc/cortex/cortex.yaml" {{- include "cortex.memcached" . | nindent 12}} {{- range $key, $value := .Values.store_gateway.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} volumeMounts: {{- if .Values.store_gateway.extraVolumeMounts }} {{- toYaml .Values.store_gateway.extraVolumeMounts | nindent 12}} {{- end }} - name: config mountPath: /etc/cortex - name: runtime-config mountPath: /etc/cortex-runtime-config - name: storage mountPath: "/data" {{- if .Values.store_gateway.persistentVolume.subPath }} subPath: {{ .Values.store_gateway.persistentVolume.subPath }} {{- end }} ports: - name: http-metrics containerPort: {{ .Values.config.server.http_listen_port }} protocol: TCP - name: grpc containerPort: {{ .Values.config.server.grpc_listen_port }} protocol: TCP - name: gossip containerPort: {{ .Values.config.memberlist.bind_port }} protocol: TCP startupProbe: {{- toYaml .Values.store_gateway.startupProbe | nindent 12 }} {{- if .Values.store_gateway.livenessProbe }} livenessProbe: {{- toYaml .Values.store_gateway.livenessProbe | nindent 12 }} {{- end }} readinessProbe: {{- toYaml .Values.store_gateway.readinessProbe | nindent 12 }} resources: {{- toYaml .Values.store_gateway.resources | nindent 12 }} {{- if .Values.store_gateway.containerSecurityContext.enabled }} securityContext: {{- omit .Values.store_gateway.containerSecurityContext "enabled" | toYaml | nindent 12 }} {{- end }} {{- if .Values.store_gateway.env }} env: {{- toYaml .Values.store_gateway.env | nindent 12 }} {{- end }} {{- end -}} ================================================ FILE: templates/store-gateway/store-gateway-svc-headless.yaml ================================================ {{- if .Values.store_gateway.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.storeGatewayFullname" . }}-headless namespace: {{ .Release.Namespace }} labels: {{- include "cortex.storeGatewayLabels" . | nindent 4 }} {{- with .Values.store_gateway.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.store_gateway.service.annotations | nindent 4 }} spec: type: ClusterIP clusterIP: None ports: - port: {{ .Values.config.server.grpc_listen_port }} protocol: TCP name: grpc targetPort: grpc selector: {{- include "cortex.storeGatewaySelectorLabels" . | nindent 4 }} {{- end -}} ================================================ FILE: templates/store-gateway/store-gateway-svc.yaml ================================================ {{- if .Values.store_gateway.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ include "cortex.storeGatewayFullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "cortex.storeGatewayLabels" . | nindent 4 }} {{- with .Values.store_gateway.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.store_gateway.service.annotations | nindent 4 }} spec: type: ClusterIP ports: - port: {{ .Values.config.server.http_listen_port }} protocol: TCP name: http-metrics targetPort: http-metrics selector: {{- include "cortex.storeGatewaySelectorLabels" . | nindent 4 }} {{- end -}} ================================================ FILE: templates/svc-memberlist-headless.yaml ================================================ apiVersion: v1 kind: Service metadata: name: {{ include "cortex.fullname" . }}-memberlist namespace: {{ .Release.Namespace }} labels: {{- include "cortex.labels" . | nindent 4 }} {{- with .Values.memberlist.service.labels }} {{- toYaml . | nindent 4 }} {{- end }} annotations: {{- toYaml .Values.memberlist.service.annotations | nindent 4 }} spec: type: ClusterIP clusterIP: None ports: - port: {{ .Values.config.memberlist.bind_port }} protocol: TCP appProtocol: tcp name: gossip targetPort: gossip selector: {{- include "cortex.selectorLabels" . | nindent 4 }} app.kubernetes.io/part-of: memberlist ================================================ FILE: tools/bump-version.sh ================================================ #!/usr/bin/env bash set -euo pipefail VERSION="${1:-}" current_version=$(grep '^version:' Chart.yaml | awk '{print $2}') echo "Current version: $current_version" if [ -n "$VERSION" ]; then new_version="$VERSION" else unreleased_changes=$(awk '/^## master \/ unreleased/{flag=1; next} /^## /{flag=0} flag' CHANGELOG.md) echo "Unreleased changes analysis:" echo "$unreleased_changes" if echo "$unreleased_changes" | grep -q "\[CHANGE\]"; then echo "Found [CHANGE], applying major bump." bump="major" elif echo "$unreleased_changes" | grep -q "\[ENHANCEMENT\]"; then echo "Found [ENHANCEMENT], applying minor bump." bump="minor" elif echo "$unreleased_changes" | grep -q "\[FEATURE\]"; then echo "Found [FEATURE], applying minor bump." bump="minor" else echo "Defaulting to patch bump ([BUGFIX], [DEPENDENCY], or other)." bump="patch" fi IFS='.' read -r -a parts <<< "$current_version" major="${parts[0]}" minor="${parts[1]}" patch="${parts[2]}" case "$bump" in major) major=$((major + 1)); minor=0; patch=0 ;; minor) minor=$((minor + 1)); patch=0 ;; patch) patch=$((patch + 1)) ;; esac new_version="$major.$minor.$patch" fi echo "New version: $new_version" # Update Chart.yaml # Using temp file for portability sed "s/^version: .*/version: $new_version/" Chart.yaml > Chart.yaml.tmp && mv Chart.yaml.tmp Chart.yaml # Update Changelog date_str=$(date +%Y-%m-%d) # Use perl for consistent behavior across platforms (macOS/Linux) regarding newlines in replacement perl -i -pe "s/^## master \/ unreleased/## master \/ unreleased\n\n## $new_version \/ $date_str/" CHANGELOG.md echo "Successfully bumped version to $new_version" ================================================ FILE: tools/chart-version-tag.sh ================================================ #!/usr/bin/env bash set -o nounset set -o pipefail RELEASE_TAG=$(git describe --tags --exact-match 2>/dev/null) set -o errexit if [ -z "$RELEASE_TAG" ] then WORKING_SUFFIX=$(if git status --porcelain | grep -qE '^(?:[^?][^ ]|[^ ][^?])\s'; then echo "-WIP"; else echo ""; fi) BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) TAG_PREFIX=$(git describe --tags 2>/dev/null) echo "$TAG_PREFIX-${BRANCH_NAME//\//-}$WORKING_SUFFIX" else echo "$RELEASE_TAG" fi ================================================ FILE: values.yaml ================================================ image: repository: quay.io/cortexproject/cortex # -- Allows you to override the cortex version in this chart. Use at your own risk. tag: "" pullPolicy: IfNotPresent # -- Optionally specify an array of imagePullSecrets. # Secrets must be manually created in the namespace. # ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ pullSecrets: [] # -- Kubernetes cluster DNS domain clusterDomain: cluster.local ingress: enabled: false ingressClass: enabled: false name: "nginx" annotations: {} hosts: - host: chart-example.local paths: - / tls: [] serviceAccount: create: true name: annotations: {} automountServiceAccountToken: true useConfigMap: false useExternalConfig: false externalConfigSecretName: 'secret-with-config.yaml' externalConfigVersion: '0' config: auth_enabled: false api: prometheus_http_prefix: '/prometheus' # -- Use GZIP compression for API responses. Some endpoints serve large YAML or JSON blobs # which can benefit from compression. response_compression_enabled: true ingester: lifecycler: # -- We don't want to join immediately, but wait a bit to see other ingesters and their tokens first. # It can take a while to have the full picture when using gossip join_after: 10s # -- To avoid generating same tokens by multiple ingesters, they can "observe" the ring for a while, # after putting their own tokens into it. This is only useful when using gossip, since multiple # ingesters joining at the same time can have conflicting tokens if they don't see each other yet. observe_period: 10s # -- Duration to sleep for before exiting, to ensure metrics are scraped. final_sleep: 30s ring: # -- Ingester replication factor per default is 3 replication_factor: 3 kvstore: store: "memberlist" limits: # -- Enforce that every sample has a metric name enforce_metric_name: true reject_old_samples: true reject_old_samples_max_age: 168h max_query_lookback: 0s server: http_listen_port: 8080 grpc_listen_port: 9095 grpc_server_max_recv_msg_size: 10485760 grpc_server_max_send_msg_size: 10485760 grpc_server_max_concurrent_streams: 10000 ingester_client: grpc_client_config: max_recv_msg_size: 10485760 max_send_msg_size: 10485760 blocks_storage: tsdb: dir: /data/tsdb bucket_store: sync_dir: /data/tsdb-sync bucket_index: enabled: true # -- https://cortexmetrics.io/docs/configuration/configuration-file/#store_gateway_config store_gateway: sharding_enabled: false distributor: # -- Distribute samples based on all labels, as opposed to solely by user and # metric name. shard_by_all_labels: true pool: health_check_ingesters: true memberlist: bind_port: 7946 # -- the service name of the memberlist # if using memberlist discovery join_members: - '{{ include "cortex.fullname" $ }}-memberlist' querier: active_query_tracker_dir: /data/active-query-tracker # -- Comma separated list of store-gateway addresses in DNS Service Discovery # format. This option should is set automatically when using the blocks storage and the # store-gateway sharding is disabled (when enabled, the store-gateway instances # form a ring and addresses are picked from the ring). # @default -- automatic store_gateway_addresses: |- {{ if not .Values.config.store_gateway.sharding_enabled -}} dns+{{ include "cortex.storeGatewayFullname" $ }}-headless:9095 {{- end }} query_range: split_queries_by_interval: 24h align_queries_with_step: false cache_results: true results_cache: cache: memcached: expiration: 1h memcached_client: timeout: 1s ruler: enable_alertmanager_discovery: false # -- Enable the experimental ruler config api. enable_api: true runtime_config: file: /etc/cortex-runtime-config/runtime_config.yaml alertmanager: # -- Enable alertmanager gossip cluster # -- Disable alertmanager gossip cluster by setting empty listen_address to empty string cluster: listen_address: '0.0.0.0:9094' # -- Enable the experimental alertmanager config api. enable_api: false external_url: '/api/prom/alertmanager' frontend: log_queries_longer_than: 10s runtimeconfigmap: # -- If true, a configmap for the `runtime_config` will be created. # If false, the configmap _must_ exist already on the cluster or pods will fail to create. create: true annotations: {} # -- https://cortexmetrics.io/docs/configuration/arguments/#runtime-configuration-file runtime_config: {} alertmanager: enabled: true replicas: 1 statefulSet: # -- If true, use a statefulset instead of a deployment for pod management. # This is useful for using a persistent volume for storing silences between restarts. enabled: false service: annotations: {} labels: {} serviceAccount: # -- "" disables the individual serviceAccount and uses the global serviceAccount for that component name: "" serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' nodeSelector: {} topologySpreadConstraints: [] affinity: {} annotations: {} persistentVolume: # -- If true and alertmanager.statefulSet.enabled is true, # Alertmanager will create/use a Persistent Volume Claim # If false, use emptyDir enabled: true # -- Alertmanager data Persistent Volume Claim annotations annotations: {} # -- Alertmanager data Persistent Volume access modes # Must match those of existing PV or dynamic provisioner # Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ accessModes: - ReadWriteOnce # -- Alertmanager data Persistent Volume size size: 2Gi # -- Subdirectory of Alertmanager data Persistent Volume to mount # Useful if the volume's root directory is not empty subPath: '' # -- Alertmanager data Persistent Volume Storage Class # If defined, storageClassName: # If set to "-", storageClassName: "", which disables dynamic provisioning # If undefined (the default) or set to null, no storageClassName spec is # set, choosing the default provisioner. storageClass: null # -- StatefulSetAutoDeletePVC feature # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention retentionPolicy: {} # whenDeleted: Retain # whenScaled: Retain startupProbe: httpGet: path: /ready port: http-metrics failureThreshold: 10 livenessProbe: httpGet: path: /ready port: http-metrics readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true # -- Tolerations for pod assignment # ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ tolerations: [] # -- If not set then a PodDisruptionBudget will not be created podDisruptionBudget: maxUnavailable: 1 strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 statefulStrategy: type: RollingUpdate terminationGracePeriodSeconds: 60 # -- Init containers to be added to the cortex pod. initContainers: [] # -- Additional containers to be added to the cortex pod. extraContainers: [] # -- Additional volumes to the cortex pod. extraVolumes: [] # -- Extra volume mounts that will be added to the cortex container extraVolumeMounts: [] # -- Additional ports to the cortex services. Useful to expose extra container ports. extraPorts: [] # -- Extra env variables to pass to the cortex container env: [] sidecar: # -- Enable sidecar that collect the configmaps with specified label and stores the included files them into the respective folders enabled: false image: repository: kiwigrid/k8s-sidecar tag: 2.7.3 sha: "" imagePullPolicy: IfNotPresent resources: {} # -- Set to true to skip tls verification for kube api calls skipTlsVerify: false # -- A value of true will produce unique filenames to avoid issues when duplicate data keys exist between ConfigMaps # and/or Secrets within the same or multiple Namespaces. enableUniqueFilenames: false # -- Label that should be used for filtering label: cortex_alertmanager # -- Determines how kopf-k8s-sidecar will run. If WATCH it will run like a normal operator forever. # If LIST it will gather the matching configmaps and secrets currently present, # write those files to the destination directory and die watchMethod: "" # -- The value for the label you want to filter your resources on. # Don't set a value to filter by any value labelValue: "" # -- Folder where the files should be placed. folder: /data # -- The default folder name, it will create a subfolder under the `folder` and put rules in there instead defaultFolderName: "" # -- The Namespace(s) from which resources will be watched. # For multiple namespaces, use a comma-separated string like "default,test". # If not set or set to ALL, it will watch all Namespaces. searchNamespace: "" # -- The annotation the sidecar will look for in ConfigMaps and/or Secrets to override the destination folder for files. # If the value is a relative path, it will be relative to FOLDER folderAnnotation: "k8s-sidecar-target-directory" # -- The resource type that the operator will filter for. Can be configmap, secret or both resource: "both" containerSecurityContext: enabled: true readOnlyRootFilesystem: true # -- The port the kiwigrid/k8s-sidecar listens on for health checks. The image default matches the cortex default listen port (8080), so it must be overridden here. healthPort: 8081 startupProbe: httpGet: path: /healthz port: sidecar-health periodSeconds: 5 readinessProbe: httpGet: path: /healthz port: sidecar-health periodSeconds: 5 distributor: enabled: true replicas: 2 service: annotations: {} labels: {} serviceAccount: # -- "" disables the individual serviceAccount and uses the global serviceAccount for that component name: "" serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' nodeSelector: {} topologySpreadConstraints: [] affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: - distributor topologyKey: 'kubernetes.io/hostname' annotations: {} autoscaling: # -- Creates a HorizontalPodAutoscaler for the distributor pods. enabled: false minReplicas: 2 maxReplicas: 30 targetCPUUtilizationPercentage: 80 targetMemoryUtilizationPercentage: 0 # 80 # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior behavior: {} # -- Optional custom and external metrics for the distributor pods to scale on # In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects extraMetrics: [] persistentVolume: subPath: startupProbe: httpGet: path: /ready port: http-metrics failureThreshold: 10 livenessProbe: httpGet: path: /ready port: http-metrics readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 terminationGracePeriodSeconds: 60 tolerations: [] podDisruptionBudget: maxUnavailable: 30% initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] lifecycle: {} ingester: enabled: true replicas: 3 statefulSet: # -- If true, use a statefulset instead of a deployment for pod management. # This is useful when using WAL enabled: false # -- ref: https://cortexmetrics.io/docs/guides/ingesters-scaling-up-and-down/#scaling-down and https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies for scaledown details podManagementPolicy: OrderedReady service: annotations: {} labels: {} serviceAccount: name: serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' nodeSelector: {} topologySpreadConstraints: [] affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: - ingester - querier topologyKey: 'kubernetes.io/hostname' annotations: {} autoscaling: enabled: false minReplicas: 3 maxReplicas: 30 targetMemoryUtilizationPercentage: 80 behavior: scaleDown: # -- see https://cortexmetrics.io/docs/guides/ingesters-scaling-up-and-down/#scaling-down for scaledown details policies: - type: Pods value: 1 # set to no less than 2x the maximum between -blocks-storage.bucket-store.sync-interval and -compactor.cleanup-interval periodSeconds: 1800 # -- uses metrics from the past 1h to make scaleDown decisions stabilizationWindowSeconds: 3600 scaleUp: # -- This default scaleup policy allows adding 1 pod every 30 minutes. # Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior policies: - type: Pods value: 1 periodSeconds: 1800 # -- Optional custom and external metrics for the ingester pods to scale on # In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects extraMetrics: [] lifecycle: # -- The /shutdown preStop hook is recommended as part of the ingester # scaledown process, but can be removed to optimize rolling restarts in # instances that will never be scaled down. # https://cortexmetrics.io/docs/guides/ingesters-scaling-up-and-down/#scaling-down preStop: httpGet: path: "/ingester/shutdown" port: http-metrics persistentVolume: # -- If true and ingester.statefulSet.enabled is true, # Ingester will create/use a Persistent Volume Claim # If false, use emptyDir enabled: true # -- Ingester data Persistent Volume Claim annotations annotations: {} # -- Ingester data Persistent Volume access modes # Must match those of existing PV or dynamic provisioner # Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ accessModes: - ReadWriteOnce # -- Ingester data Persistent Volume size size: 2Gi # -- Subdirectory of Ingester data Persistent Volume to mount # Useful if the volume's root directory is not empty subPath: '' # -- Ingester data Persistent Volume Storage Class # If defined, storageClassName: # If set to "-", storageClassName: "", which disables dynamic provisioning # If undefined (the default) or set to null, no storageClassName spec is # set, choosing the default provisioner. storageClass: null # -- StatefulSetAutoDeletePVC feature # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention retentionPolicy: {} # whenDeleted: Retain # whenScaled: Retain # -- Startup/liveness probes for ingesters are not recommended. # Ref: https://cortexmetrics.io/docs/guides/running-cortex-on-kubernetes/#take-extra-care-with-ingesters startupProbe: {} # -- Startup/liveness probes for ingesters are not recommended. # Ref: https://cortexmetrics.io/docs/guides/running-cortex-on-kubernetes/#take-extra-care-with-ingesters livenessProbe: {} readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 statefulStrategy: type: RollingUpdate terminationGracePeriodSeconds: 240 tolerations: [] podDisruptionBudget: maxUnavailable: 1 initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] ruler: enabled: true replicas: 1 service: annotations: {} labels: {} serviceAccount: # -- "" disables the individual serviceAccount and uses the global serviceAccount for that component name: "" serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' nodeSelector: {} topologySpreadConstraints: [] affinity: {} annotations: {} autoscaling: # -- Creates a HorizontalPodAutoscaler for the ruler. enabled: false minReplicas: 2 maxReplicas: 30 targetCPUUtilizationPercentage: 80 targetMemoryUtilizationPercentage: 80 # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior behavior: {} # -- Optional custom and external metrics for the ruler pods to scale on # In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects extraMetrics: [] validation: # -- Checks that the ruler is compatible with horizontal scaling, # as documented in https://cortexmetrics.io/docs/guides/ruler-sharding/. # You may need to disable this if your config is compatible, but not understood by the validator. enabled: true startupProbe: httpGet: path: /ready port: http-metrics failureThreshold: 10 livenessProbe: httpGet: path: /ready port: http-metrics readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 terminationGracePeriodSeconds: 180 tolerations: [] podDisruptionBudget: maxUnavailable: 30% initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] # -- allow configuring rules via configmap. ref: https://cortexproject.github.io/cortex-helm-chart/guides/configure_rules_via_configmap.html directories: {} sidecar: # -- Enable sidecar that collect the configmaps with specified label and stores the included files them into the respective folders enabled: false image: repository: kiwigrid/k8s-sidecar tag: 2.7.3 sha: "" imagePullPolicy: IfNotPresent resources: {} # -- Set to true to skip tls verification for kube api calls skipTlsVerify: false # -- A value of true will produce unique filenames to avoid issues when duplicate data keys exist between ConfigMaps # and/or Secrets within the same or multiple Namespaces. enableUniqueFilenames: false # -- label that the configmaps with rules are marked with label: cortex_rules # -- Determines how kopf-k8s-sidecar will run. If WATCH it will run like a normal operator forever. # If LIST it will gather the matching configmaps and secrets currently present, # write those files to the destination directory and die watchMethod: "" # -- The value for the label you want to filter your resources on. # Don't set a value to filter by any value labelValue: "" # -- Folder where the files should be placed. folder: /data/rules # -- The default folder name, it will create a subfolder under the `folder` and put rules in there instead defaultFolderName: "" # -- The Namespace(s) from which resources will be watched. # For multiple namespaces, use a comma-separated string like "default,test". # If not set or set to ALL, it will watch all Namespaces. searchNamespace: "" # -- The annotation the sidecar will look for in ConfigMaps and/or Secrets to override the destination folder for files. # If the value is a relative path, it will be relative to FOLDER folderAnnotation: "k8s-sidecar-target-directory" # -- The resource type that the operator will filter for. Can be configmap, secret or both resource: "both" containerSecurityContext: enabled: true readOnlyRootFilesystem: true # -- The port the kiwigrid/k8s-sidecar listens on for health checks. The image default matches the cortex default listen port (8080), so it must be overridden here. healthPort: 8081 startupProbe: httpGet: path: /healthz port: sidecar-health periodSeconds: 5 readinessProbe: httpGet: path: /healthz port: sidecar-health periodSeconds: 5 querier: enabled: true replicas: 2 service: annotations: {} labels: {} serviceAccount: # -- "" disables the individual serviceAccount and uses the global serviceAccount for that component name: "" serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' nodeSelector: {} topologySpreadConstraints: [] affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: - ingester - querier topologyKey: 'kubernetes.io/hostname' annotations: {} autoscaling: # -- Creates a HorizontalPodAutoscaler for the querier pods. enabled: false minReplicas: 2 maxReplicas: 30 targetCPUUtilizationPercentage: 80 targetMemoryUtilizationPercentage: 0 # 80 # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior behavior: {} # -- Optional custom and external metrics for the querier pods to scale on # In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects extraMetrics: [] persistentVolume: subPath: startupProbe: httpGet: path: /ready port: http-metrics failureThreshold: 10 livenessProbe: httpGet: path: /ready port: http-metrics readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 terminationGracePeriodSeconds: 180 tolerations: [] podDisruptionBudget: maxUnavailable: 30% initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] lifecycle: {} query_frontend: enabled: true replicas: 2 service: annotations: {} labels: {} serviceAccount: # -- "" disables the individual serviceAccount and uses the global serviceAccount for that component name: "" serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' nodeSelector: {} topologySpreadConstraints: [] affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: - query-frontend topologyKey: 'kubernetes.io/hostname' annotations: {} persistentVolume: subPath: startupProbe: httpGet: path: /ready port: http-metrics failureThreshold: 10 livenessProbe: httpGet: path: /ready port: http-metrics readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 terminationGracePeriodSeconds: 180 tolerations: [] podDisruptionBudget: maxUnavailable: 30% initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] lifecycle: {} query_scheduler: # -- If true, querier and query-frontend will connect to it (requires Cortex v1.6.0+) # https://cortexmetrics.io/docs/operations/scaling-query-frontend/#query-scheduler enabled: false replicas: 2 service: annotations: {} labels: {} serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: 'http-metrics' nodeSelector: {} topologySpreadConstraints: [] affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: - query-scheduler topologyKey: 'kubernetes.io/hostname' annotations: {} persistentVolume: subPath: startupProbe: httpGet: path: /ready port: http-metrics failureThreshold: 10 livenessProbe: httpGet: path: /ready port: http-metrics readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 terminationGracePeriodSeconds: 180 tolerations: [] podDisruptionBudget: maxUnavailable: 1 initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] lifecycle: {} overrides_exporter: # -- https://cortexmetrics.io/docs/guides/overrides-exporter/ enabled: false replicas: 1 service: annotations: {} labels: {} serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: 'http-metrics' nodeSelector: {} topologySpreadConstraints: [] affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: - overrides-exporter topologyKey: 'kubernetes.io/hostname' annotations: {} startupProbe: httpGet: path: /ready port: http-metrics failureThreshold: 10 livenessProbe: httpGet: path: /ready port: http-metrics readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 terminationGracePeriodSeconds: 180 tolerations: [] podDisruptionBudget: maxUnavailable: 30% initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] lifecycle: {} parquet_converter: # -- https://cortexmetrics.io/docs/guides/parquet-mode/ enabled: false replicas: 1 service: annotations: {} labels: {} serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: 'http-metrics' nodeSelector: {} topologySpreadConstraints: [] affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: - parquet-converter topologyKey: 'kubernetes.io/hostname' annotations: {} startupProbe: httpGet: path: /ready port: http-metrics failureThreshold: 10 livenessProbe: httpGet: path: /ready port: http-metrics readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 terminationGracePeriodSeconds: 180 tolerations: [] initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] lifecycle: {} purger: enabled: false replicas: 1 service: annotations: {} labels: {} serviceAccount: name: "" serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] extraEndpointSpec: {} podTargetLabels: [] resources: {} strategy: type: RollingUpdate podLabels: {} podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' nodeSelector: {} topologySpreadConstraints: [] affinity: {} annotations: {} terminationGracePeriodSeconds: 60 lifecycle: {} securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Init containers to be added to the cortex pod. initContainers: [] # -- Additional containers to be added to the cortex pod. extraContainers: [] # -- Additional volumes to the cortex pod. extraVolumes: [] # -- Extra volume mounts that will be added to the cortex container extraVolumeMounts: [] # -- Additional ports to the cortex services. Useful to expose extra container ports. extraPorts: [] # -- Extra env variables to pass to the cortex container env: [] startupProbe: failureThreshold: 60 initialDelaySeconds: 120 periodSeconds: 30 httpGet: path: /ready port: http-metrics scheme: HTTP livenessProbe: httpGet: path: /ready port: http-metrics scheme: HTTP readinessProbe: httpGet: path: /ready port: http-metrics nginx: enabled: true replicas: 2 http_listen_port: 80 config: dnsResolver: kube-dns.kube-system.svc.cluster.local # -- ref: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size client_max_body_size: 1M # -- arbitrary snippet to inject in the http { } section of the nginx config httpSnippet: "" # -- arbitrary snippet to inject in the top section of the nginx config mainSnippet: "" # -- arbitrary snippet to inject in the server { } section of the nginx config serverSnippet: "" # -- protocol for the communication with the upstream upstream_protocol: http setHeaders: {} # -- Optional list of [auth tenants](https://cortexmetrics.io/docs/guides/auth/) to set in the nginx config auth_orgs: [] # -- Optional name of basic auth secret. # In order to use this option, a secret with htpasswd formatted contents at # the key ".htpasswd" must exist. For example: # # apiVersion: v1 # kind: Secret # metadata: # name: my-secret # namespace: # stringData: # .htpasswd: | # user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0 # user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/ # # Please note that the use of basic auth will not identify organizations # the way X-Scope-OrgID does. Thus, the use of basic auth alone will not # prevent one tenant from viewing the metrics of another. To ensure tenants # are scoped appropriately, explicitly set the `X-Scope-OrgID` header # in the nginx config. Example # setHeaders: # X-Scope-OrgID: $remote_user basicAuthSecretName: "" # -- Including the valid parameter to the `resolver` directive to re-resolve names every `dnsTTL` seconds/minutes dnsTTL: "15s" # -- Enables all access logs from nginx, otherwise ignores 2XX and 3XX status codes verboseLogging: true ## -- Optional: Override the URL for push endpoints (/api/prom/push and /api/v1/push) ## If not specified, the default URL will be used, corresponding to the distributor service URL override_push_endpoint: "" image: repository: nginx tag: 1.31 pullPolicy: IfNotPresent service: type: ClusterIP annotations: {} labels: {} # -- Replaces default port value from nginx.http_listen_port when set port: "" serviceAccount: # -- "" disables the individual serviceAccount and uses the global serviceAccount for that component name: "" resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: {} nodeSelector: {} topologySpreadConstraints: [] affinity: {} annotations: {} persistentVolume: subPath: startupProbe: httpGet: path: /healthz port: http-metrics failureThreshold: 10 livenessProbe: httpGet: path: /healthz port: http-metrics readinessProbe: httpGet: path: /healthz port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: false strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 maxUnavailable: 1 terminationGracePeriodSeconds: 10 tolerations: [] podDisruptionBudget: maxUnavailable: 30% initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] autoscaling: # -- Creates a HorizontalPodAutoscaler for the nginx pods. enabled: false minReplicas: 2 maxReplicas: 30 targetCPUUtilizationPercentage: 80 targetMemoryUtilizationPercentage: 0 # 80 # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior behavior: {} # -- Optional custom and external metrics for the nginx pods to scale on # In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects extraMetrics: [] store_gateway: enabled: true replicas: 1 # -- https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies podManagementPolicy: OrderedReady service: annotations: {} labels: {} serviceAccount: # -- "" disables the individual serviceAccount and uses the global serviceAccount for that component name: "" serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' nodeSelector: {} topologySpreadConstraints: [] affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: - store-gateway topologyKey: 'kubernetes.io/hostname' annotations: {} autoscaling: enabled: false minReplicas: 3 maxReplicas: 30 targetMemoryUtilizationPercentage: 80 # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior behavior: {} # -- Optional custom and external metrics for the store gateway pods to scale on # In order to use this option , define a list of of specific following https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics and https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects extraMetrics: [] persistentVolume: # -- If true Store-gateway will create/use a Persistent Volume Claim # If false, use emptyDir enabled: true # -- Store-gateway data Persistent Volume Claim annotations annotations: {} # -- Store-gateway data Persistent Volume access modes # Must match those of existing PV or dynamic provisioner # Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ accessModes: - ReadWriteOnce # -- Store-gateway data Persistent Volume size size: 2Gi # -- Subdirectory of Store-gateway data Persistent Volume to mount # Useful if the volume's root directory is not empty subPath: '' # -- Store-gateway data Persistent Volume Storage Class # If defined, storageClassName: # If set to "-", storageClassName: "", which disables dynamic provisioning # If undefined (the default) or set to null, no storageClassName spec is # set, choosing the default provisioner. storageClass: null # -- StatefulSetAutoDeletePVC feature # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention retentionPolicy: {} # whenDeleted: Retain # whenScaled: Retain startupProbe: failureThreshold: 60 initialDelaySeconds: 120 periodSeconds: 30 httpGet: path: /ready port: http-metrics scheme: HTTP livenessProbe: {} readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate terminationGracePeriodSeconds: 240 tolerations: [] podDisruptionBudget: maxUnavailable: 1 initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] compactor: enabled: true replicas: 1 service: annotations: {} labels: {} serviceAccount: # -- "" disables the individual serviceAccount and uses the global serviceAccount for that component name: "" serviceMonitor: enabled: false additionalLabels: {} relabelings: [] metricRelabelings: [] # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint extraEndpointSpec: {} podTargetLabels: [] resources: {} # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) extraArgs: {} # -- Pod Labels podLabels: {} # -- Pod Annotations podAnnotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' nodeSelector: {} topologySpreadConstraints: [] affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: - compactor topologyKey: 'kubernetes.io/hostname' annotations: {} persistentVolume: # -- If true compactor will create/use a Persistent Volume Claim # If false, use emptyDir enabled: true # -- compactor data Persistent Volume Claim annotations annotations: {} # -- compactor data Persistent Volume access modes # Must match those of existing PV or dynamic provisioner # Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ accessModes: - ReadWriteOnce # compactor data Persistent Volume size size: 2Gi # -- Subdirectory of compactor data Persistent Volume to mount # Useful if the volume's root directory is not empty subPath: '' # -- compactor data Persistent Volume Storage Class # If defined, storageClassName: # If set to "-", storageClassName: "", which disables dynamic provisioning # If undefined (the default) or set to null, no storageClassName spec is # set, choosing the default provisioner. storageClass: null # -- StatefulSetAutoDeletePVC feature # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention retentionPolicy: {} # whenDeleted: Retain # whenScaled: Retain startupProbe: {} livenessProbe: {} readinessProbe: httpGet: path: /ready port: http-metrics securityContext: {} containerSecurityContext: enabled: true readOnlyRootFilesystem: true strategy: type: RollingUpdate terminationGracePeriodSeconds: 240 tolerations: [] podDisruptionBudget: maxUnavailable: 30% initContainers: [] extraContainers: [] extraVolumes: [] extraVolumeMounts: [] extraPorts: [] env: [] memcached-frontend: # -- Enables support for caching queries in the frontend enabled: true service: clusterIP: None architecture: "high-availability" replicaCount: 2 resources: {} # -- Bypass validation of the memcached configuration in case a custom image is in use disableValidation: false # -- Command line argument supplied to memcached args: # -- The amount of memory allocated to memcached for object storage - -m 1024 image: repository: memcached tag: "1.6.42" metrics: enabled: true image: repository: prom/memcached-exporter tag: "v0.16.0" serviceMonitor: enabled: false memcached-blocks-index: # -- Enables support for block index caching enabled: true service: clusterIP: None architecture: "high-availability" replicaCount: 2 resources: {} # -- Bypass validation of the memcached configuration in case a custom image is in use disableValidation: false # -- Command line argument supplied to memcached args: # -- The amount of memory allocated to memcached for object storage - -m 1024 image: repository: memcached tag: "1.6.42" metrics: enabled: true image: repository: prom/memcached-exporter tag: "v0.16.0" serviceMonitor: enabled: false memcached-blocks: # -- Enables support for block caching enabled: true service: clusterIP: None architecture: "high-availability" replicaCount: 2 resources: {} # -- Bypass validation of the memcached configuration in case a custom image is in use disableValidation: false # -- Command line argument supplied to memcached args: # -- The amount of memory allocated to memcached for object storage - -m 1024 image: repository: memcached tag: "1.6.42" metrics: enabled: true image: repository: prom/memcached-exporter tag: "v0.16.0" serviceMonitor: enabled: false memcached-blocks-metadata: # -- Enables support for block metadata caching enabled: true service: clusterIP: None architecture: "high-availability" replicaCount: 2 resources: {} # -- Bypass validation of the memcached configuration in case a custom image is in use disableValidation: false # -- Command line argument supplied to memcached args: # -- The amount of memory allocated to memcached for object storage - -m 1024 image: repository: memcached tag: "1.6.42" metrics: enabled: true image: repository: prom/memcached-exporter tag: "v0.16.0" serviceMonitor: enabled: false memcached-parquet-labels: # -- Enables support for parquet labels caching enabled: false service: clusterIP: None architecture: "high-availability" replicaCount: 2 resources: {} # -- Bypass validation of the memcached configuration in case a custom image is in use disableValidation: false # -- Command line argument supplied to memcached args: # -- The amount of memory allocated to memcached for object storage - -m 1024 image: repository: memcached tag: "1.6.42" metrics: enabled: true image: repository: prom/memcached-exporter tag: "v0.16.0" serviceMonitor: enabled: false memberlist: service: annotations: {} labels: {}