[
  {
    "path": ".github/pull_request_template.md",
    "content": "<!--  Thanks for sending a pull request!  Before submitting:\n\n1. Read our CONTRIBUTING.md guide\n2. Rebase your PR if it gets out of sync with master\n3. Please do not edit/bump the Chart.yaml \"version\" field\n-->\n\n**What this PR does**:\n\n**Which issue(s) this PR fixes**:\nFixes #<issue number>\n\n**Checklist**\n- [ ] `CHANGELOG.md` updated - the order of entries should be `[CHANGE]`, `[FEATURE]`, `[ENHANCEMENT]`, `[BUGFIX]`, `[DEPENDENCY]`\n"
  },
  {
    "path": ".github/stale.yml",
    "content": "# Days without any activity until an issue is labeled as stale\ndaysUntilStale: 60\n\n# Days after having the stale label that the issue will be closed\ndaysUntilClose: 30\n\n# Labels that prevent issues from being marked as stale\nexemptLabels:\n  - dependencies\n  - keepalive\n  - bug\n  - help wanted\n\n# Label to use to identify a stale issue\nstaleLabel: stale\n\n# Comment to post when marking an issue as stale. Leave as false\n# to disable.\nmarkComment: >\n  This issue has been automatically marked as stale because it has not had any\n  activity in the past 60 days. It will be closed in 30 days if no further\n  activity occurs. Thank you for your contributions.\n\n# Comment to post when closing a stale issue. Leave as\n# false to disable.\ncloseComment: false"
  },
  {
    "path": ".github/workflows/lint-test.yml",
    "content": "name: Lint and Test Charts\n\non:\n  pull_request:\n\njobs:\n  update-readme:\n    # Only runs on PRs from the same repo (not forks), where the CI token can push.\n    if: github.event.pull_request.head.repo.full_name == github.repository\n    runs-on: ubuntu-latest\n    outputs:\n      updated: ${{ steps.commit.outputs.updated }}\n    steps:\n      - name: Checkout PR branch\n        uses: actions/checkout@v6\n        with:\n          token: ${{ secrets.CORTEX_HELM_CHART_CI_TOKEN }}\n          ref: ${{ github.event.pull_request.head.ref }}\n          fetch-depth: 0\n\n      - name: Regenerate README.md\n        run: make README.md\n\n      - name: Commit and push if changed\n        id: commit\n        run: |\n          if git diff --quiet -- README.md; then\n            echo \"updated=false\" >> \"$GITHUB_OUTPUT\"\n          else\n            git config user.name \"$(git log -1 --format='%an')\"\n            git config user.email \"$(git log -1 --format='%ae')\"\n            git add README.md\n            git commit -s -m \"Auto-update README.md\" \\\n              -m \"Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\"\n            git push\n            echo \"updated=true\" >> \"$GITHUB_OUTPUT\"\n          fi\n\n  lint-test:\n    needs: update-readme\n    # Run unless update-readme pushed a new commit (which will re-trigger CI).\n    # Also runs when update-readme is skipped (fork PRs) or fails unexpectedly.\n    if: \"!cancelled() && needs.update-readme.outputs.updated != 'true'\"\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n\n      - name: Set up Helm\n        uses: azure/setup-helm@v5\n        with:\n          version: v3.12.1\n\n      # Python is required because `ct lint` runs Yamale (https://github.com/23andMe/Yamale) and\n      # yamllint (https://github.com/adrienverge/yamllint) which require Python\n      - uses: actions/setup-python@v6\n        with:\n          python-version: '3.14'\n          check-latest: true\n\n      - name: Set up chart-testing\n        uses: helm/chart-testing-action@v2.8.0\n\n      - name: Run chart-testing (lint)\n        run: ct lint --config ct.yaml\n\n      - name: Check README.md is up to date\n        run: |\n          make README.md\n          git diff --exit-code -- README.md\n\n      - name: Create kind cluster\n        uses: helm/kind-action@v1.14.0\n\n      - name: Run chart-testing (install)\n        run: |\n          kubectl create namespace cortex\n          ct install --config ct.yaml --namespace cortex\n"
  },
  {
    "path": ".github/workflows/release.yaml",
    "content": "name: Release Chart\n\non:\n  push:\n    branches:\n      - master\n  workflow_dispatch:\n    inputs:\n      version:\n        description: 'New version (e.g. 1.2.3). If omitted, bumps based on changelog.'\n        required: false\n        type: string\n\npermissions:\n  contents: write\n  pull-requests: write\n\njobs:\n  release:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n          token: ${{ secrets.CORTEX_HELM_CHART_CI_TOKEN }}\n\n      - name: Configure Git\n        run: |\n          git config user.name \"$GITHUB_ACTOR\"\n          git config user.email \"$GITHUB_ACTOR@users.noreply.github.com\"\n\n      - name: Install Helm\n        uses: azure/setup-helm@v5\n        with:\n          version: v3.12.1\n\n      - name: Bump Version\n        run: make bump-version VERSION=\"${{ inputs.version }}\"\n\n      - name: Get New Version\n        id: version\n        run: |\n          new_version=$(grep '^version:' Chart.yaml | awk '{print $2}')\n          echo \"new_version=$new_version\" >> $GITHUB_OUTPUT\n\n      - name: Update README\n        run: make README.md\n\n      - name: Package Chart\n        run: |\n          helm repo add bitnami https://charts.bitnami.com/bitnami\n          helm dependency build\n          helm package . -d docs\n          helm repo index ./docs/ --url https://cortexproject.github.io/cortex-helm-chart\n\n      - name: Create or Update Pull Request\n        env:\n          GITHUB_TOKEN: ${{ secrets.CORTEX_HELM_CHART_CI_TOKEN }}\n        run: |\n          git checkout -b release-${{ steps.version.outputs.new_version }}\n          git add Chart.yaml README.md CHANGELOG.md docs/\n          git commit -s -m \"Release ${{ steps.version.outputs.new_version }}\"\n          git push --force origin release-${{ steps.version.outputs.new_version }}\n\n          # Check if a PR already exists for this head branch\n          existing_pr=$(gh pr list --head release-${{ steps.version.outputs.new_version }} --json number --jq '.[0].number')\n          if [ -n \"$existing_pr\" ]; then\n            echo \"PR #$existing_pr already exists — updating title/body\"\n            gh pr edit \"$existing_pr\" \\\n              --title \"Release ${{ steps.version.outputs.new_version }}\" \\\n              --body \"Automated release PR for version ${{ steps.version.outputs.new_version }}\"\n          else\n            gh pr create \\\n              --title \"Release ${{ steps.version.outputs.new_version }}\" \\\n              --body \"Automated release PR for version ${{ steps.version.outputs.new_version }}\" \\\n              --base ${{ github.ref_name }} \\\n              --head release-${{ steps.version.outputs.new_version }}\n          fi\n"
  },
  {
    "path": ".github/workflows/renovate-config-validator.yml",
    "content": "name: Validate renovate config\n\non:\n  push:\n    paths:\n      - renovate.json\n\njobs:\n  validate:\n    name: validate\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n      - name: Validate\n        uses: rinchsan/renovate-config-validator@v0.2.1\n"
  },
  {
    "path": ".gitignore",
    "content": "./*.tgz\ncortex"
  },
  {
    "path": ".helmignore",
    "content": "# Git\n.git/\n.gitignore\n.github/\n\n# IDE\n.project\n.idea/\n*.tmproj\n\n# Common backup files\n*.swp\n*.bak\n*.tmp\n*~\n\n# Cortex ignore\ndocs/\ntools/\nct.yaml\nci/\nREADME.md.gotmpl\n.prettierignore\nCHANGELOG.md\nMAINTAINERS.md\nLICENSE\nMakefile\nrenovate.json\n\n"
  },
  {
    "path": ".prettierignore",
    "content": "*.yaml"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\n## master / unreleased\n\n## 3.3.1 / 2026-05-21\n\n* [DEPENDENCY] update kiwigrid/k8s-sidecar docker tag to v2.7.3 #628\n* [DEPENDENCY] update nginx docker tag to v1.31 #629\n* [DEPENDENCY] update memcached docker tag to v1.6.42 #631\n\n## 3.3.0 / 2026-04-27\n\n* [FEATURE] Add a parquet labels cache. #621\n* [DEPENDENCY] update quay.io/cortexproject/cortex docker tag to v1.21.0 #622\n* [DEPENDENCY] update kiwigrid/k8s-sidecar docker tag to v2.7.1 #623\n\n## 3.2.1 / 2026-04-20\n\n* [BUGFIX] Don't configure alertmanager in ruler if alertmanager is disabled #618\n* [DEPENDENCY] update memcached docker tag to v1.6.41 #603\n* [DEPENDENCY] update prom/memcached-exporter docker tag to v0.16.0 #612\n* [DEPENDENCY] update kiwigrid/k8s-sidecar docker tag to v2.6.0 #610\n\n## 3.2.0 / 2026-02-26\n\n* [ENHANCEMENT] enable readiness probe on kiwigrid/k8s-sidecar #597\n* [DEPENDENCY] update kiwigrid/k8s-sidecar docker tag to v2.5.0 #568\n* [DEPENDENCY] update memcached docker tag to v1.6.40 #580\n* [DEPENDENCY] update prom/memcached-exporter docker tag to v0.15.5 #581\n* [BUGFIX] override kiwigrid/k8s-sidecar health port to avoid conflict #597\n\n## 3.1.0 / 2026-02-24\n\n* [FEATURE] Add a parquet converter. #579\n* [ENHANCEMENT] Avoid scheduling queriers and ingesters on the same node #583\n* [ENHANCEMENT] Allow for the nginx service port and container port to be different #589\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.20.1 #577\n* [BUGFIX] Ruler is using the wrongly generated Alertmanager URL #593\n\n## 3.0.0 / 2025-11-27\n\n* [CHANGE] Replace bitnami images with community images. Config via .extraEnvVars must be migrated to .args. See memcached docs for standard args. #571\n* [CHANGE] Memcacheds are now enabled by default #551\n* [CHANGE] Change default config: distributors, rulers, queriers, query-frontend, nginx and compactors can be disrupted until 30%\n* [CHANGE] Remove startup probes from compactors from default values. It's not recommended in general #542\n* [CHANGE] Use default value for num_tokens in ingester configuration #544\n* [BUGFIX] Fix discovering memcached instances #551\n* [BUGFIX] Fix restarting query-schedulers when config changes #559\n* [ENHANCEMENT] Run overrides-exporter with high availability #557\n* [ENHANCEMENT] Persist subchart #572\n* [ENHANCEMENT] Expose query frontend GRPC port on service for ruler #574\n* [DEPENDENCY] Update dependency nginx to v1.29 #540\n* [DEPENDENCY] Update kiwigrid/k8s-sidecar docker tag to v1.30.11 #547\n* [DEPENDENCY] Update kiwigrid/k8s-sidecar docker tag to v1.30.5 #531\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.20.0 #566\n\n## 2.6.0 / 2025-05-07\n\n* [DEPENDENCY] Update Helm release memcached to v6.14.0 #528\n* [DEPENDENCY] Update dependency nginx to v1.27 #532\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.19.0 #521\n* [ENHANCEMENT] Add `nginx.config.override_push_endpoint` field to override push endpoint in the nginx configuration #522\n\n## 2.5.0 / 2025-01-17\n\n* [CHANGE] Updated default `align_queries_with_step` to **false** to match documentation #513\n* [ENHANCEMENT] Add `nginx.config.upstream_protocol` field to configure the upstream protocol in the nginx configuration #506\n* [ENHANCEMENT] Add ability to set `persistentVolumeClaimRetentionPolicy` on alertmanager, ingester, compactor, and store-gateway StatefulSets #517\n* [BUGFIX] fix: upstream_protocol reference in auth_orgs #509\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.18.1 #510\n\n## 2.4.0 / 2024-07-18\n\n* [CHANGE] Removed the default `livenessProbe` for store-gateway and compactor. You can still use a `livenessProbe` but we advise against it #502\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.17.1 #501\n\n## 2.3.0 / 2024-04-12\n\n* [ENHANCEMENT] Alertmanager: Add `grpc` port #494 \n* [ENHANCEMENT] Alertmanager: Expose 9094 TCP and UDP for gossip cluster #494\n  * 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 \n\n## 2.2.0 / 2024-01-16\n\n* [CHANGE] Removed `config.storage.engine` and any reference of it #488\n* [ENHANCEMENT] Add `appProtocol` field to templates/svc-memberlist-headless.yaml to fix issues wirth Istio #485\n* [ENHANCEMENT] Add option to autoscale on multiple metrics and custom metrics metrics #467\n* [ENHANCEMENT] Add control on store-gateway statefulset when autoscale (HPA) enabled or disabled #472\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.15.0 #453\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.15.1 #456\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.15.2 #459\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.15.3 #471\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.16.0 #489\n* [BUGFIX] Correctly interpret .Capabilities.KubeVersion when it looks like a prerelease #457\n* [BUGFIX] Removed non-existent `purger.enable` flags in some components #488\n* [BUGFIX] Fix podTargetLabels in all Prometheus ServiceMonitor CRDs #487\n\n## 2.1.0 / 2023-03-17\n\n* [FEATURE] add autoscaler for the ruler #430\n* [ENHANCEMENT] Add annotations and labels to memberlist service #433\n* [ENHANCEMENT] Add podTargetLabels to all Prometheus servicemonitor CRs #439\n* [DEPENDENCY] Update Helm release memcached to v6.3.12 #441\n\n# 2.0.1 / 2023-01-06\n\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.14.1 #422\n* [DEPENDENCY] Update Helm release memcached to v6.3.3 #424\n* [BUGFIX] Fix memcache dependency condition #425\n\n# 2.0.0 / 2022-12-15\n\n* [FEATURE] add purger components to cortex #407\n* [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\n* [CHANGE] Caching for block storage can now be individually enabled. For example use `memcached-blocks.enabled` to enable caching for blocks. #417\n* [CHANGE] Drop cortex chunk support. #417\n* [CHANGE] Drop cortex configdb support. #417\n* [CHANGE] Removed legacy ruler and alertmanager storage configuration. Please use `ruler_storage` and `alertmanager_storage`. #417\n* [CHANGE] Dropped `storage.index_queries_cache_config`. #417\n* [ENHANCEMENT] Add verboseLogging option to nginx config #402\n* [ENHANCEMENT] Start using autoscaling/v2 for HorizontalPodAutoscaler in v1.23+ #414\n* [ENHANCEMENT] Add pod topology spread constrant option to Ingester/Alertmanager statefulset #403\n* [ENHANCEMENT] Add HPA to store gateways #406\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.13.1 #401\n* [DEPENDENCY] Update Helm release memcached to v6 #303\n* [DEPENDENCY] Update Helm release memcached to v6.3.2 #418\n* [DEPENDENCY] Update Cortex to v1.14 #417\n\n# 1.7.0 / 2022-09-23\n\n* [BUGFIX] Fix nginx extraContainers to indent correctly #373\n* [DEPENDENCY] Update dependency nginx to v1.23 #375\n* [DEPENDENCY] Update dependency kiwigrid/k8s-sidecar to v1.19.2 #370\n* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.13.0 #381\n* [DEPENDENCY] Update kiwigrid/k8s-sidecar Docker tag to v1.19.4 #387\n* [DEPENDENCY] Update kiwigrid/k8s-sidecar Docker tag to v1.19.5 #392\n\n## 1.6.0 / 2022-06-10\n\n* [CHANGE] move from omegavvweapon/kopf-k8s-sidecar to kiwigrid/k8s-sidecar #365\n* [FEATURE] Add Overrides-Exporter #360\n* [ENHANCEMENT] Add dnsTTL option to nginx config #366\n* [BUGFIX] Fix query-scheduler address for query-frontend to use correct address #364\n* [DEPENDENCY] Update dependency nginx to v1.22 #357\n\n## 1.5.1 / 2022-05-25\n\n* [BUGFIX] Fix mounting cortex config when using configmap #355\n* [DEPENDENCY] Update dependency omegavveapon/kopf-k8s-sidecar to v1.4.1 #353\n\n## 1.5.0 / 2022-05-24\n\n* [FEATURE] Add Query-Scheduler #268\n* [ENHANCEMENT] Allow StoreGateway podManagementPolicy to be changed #332\n* [ENHANCEMENT] Add pod topology spread constrant option #343\n* [BUGFIX] Correct a typo in enabling distributor HPA #334\n* [BUGFIX] Frontend memcached address did not match the Service #337\n* [BUGFIX] Add service discovery method for query-scheduler addresses #338\n\n## 1.4.0 / 2022-03-08\n\n* [ENHANCEMENT] Upgrade to Cortex v1.11.1 #331\n* [ENHANCEMENT] Includes enable flags for each component #319\n* [ENHANCEMENT] Exclude cortex components endpoint from nginx config when disabled #326\n\n## 1.3.0 / 2022-02-10\n\n* [CHANGE] move from quay.io/kiwigrid/k8s-sidecar to omegavvweapon/kopf-k8s-sidecar image #302\n* [CHANGE] undo querier store optimization #304\n  * config.querier.query_ingesters_within: 13h -> 0s (default)\n  * config.querier.query_store_after: 12h -> 0s (default)\n* [CHANGE] Change sidecar default values to match values in documentation #317\n* [CHANGE] Remove ruler.persistentVolume.subPath since it was never persistent to begin with #317\n* [ENHANCEMENT] Fix the indentation of memcached guide #309\n* [ENHANCEMENT] Added api endpoints for Grafana 8 unified alerting #291\n* [ENHANCEMENT] Add guide on how to configure alertmanager/ruler with configmap #313\n* [DEPENDENCY] Update Helm release memcached to v5.15.14 #301\n\n## 1.2.0 / 2021-12-29\n\n* [CHANGE] Use port number for prometheus port annotations. #288\n* [CHANGE] Disable ingester startup probes by default. #286\n* [CHANGE] Moved HPA memory specification to be the first item in the list. #284\n* [FEATURE] Optionally manage cortex config as configmap. #280\n* [ENHANCEMENT] Upgrade to Cortex v1.11.0 #272\n* [DEPENDENCY] Update Helm release memcached to v5.15.12 #274\n\n## 1.1.0 / 2021-12-01\n\n* [FEATURE] Allow different service accounts per dep/statefulset. #264\n* [CHANGE] Enable bucket index by default #275\n* [CHANGE] Disable ingester liveness probes by default. #263\n* [BUGFIX] workaround for .Capabilities.APIVersions. #277\n* [DEPENDENCY] Update Helm release memcached to v5.15.9 #273\n\n## 1.0.1 / 2021-11-26\n\n* [BUGFIX] alertmanager/ruler deployment: fix indentation #266\n\n## 1.0.0 / 2021-11-25\n\n### This Release includes BREAKING CHANGES\n\n* [FEATURE] Add autoscaler for nginx #249\n* [FEATURE] Add in lifecycle for querier, querier-frontend, and distributor #243\n* [FEATURE] Add ingressClass to ingressResource #227\n* [ENHANCEMENT] Allow overriding cortex Version #227\n* [ENHANCEMENT] Update policy k8 Version #227\n* [ENHANCEMENT] Improved default values for bitnami/memcached #227\n* [ENHANCEMENT] Update container names to match cortex-mixin expectations #233\n* [CHANGE] Deprecate *.persistence #227\n* [CHANGE] Remove legacy clusterPort from alertmanager #227\n* [CHANGE] Remove useless nginx.serviceMonitor section #227\n* [CHANGE] Configure blocks storage engine by default instead of chunks #227\n* [CHANGE] Adjusted cortex default configuration #227\n  * server.grpc_server_max_recv_msg_size: 104857600 -> 10485760\n  * server.grpc_server_max_send_msg_size: 104857600 -> 10485760\n  * server.grpc_server_max_concurrent_streams: 1000 -> 10000\n  * server.ingester_client.grpc_client_config.max_recv_msg_size: 104857600 -> 10485760\n  * server.ingester_client.grpc_client_config.max_send_msg_size: 104857600 -> 10485760\n  * config.limits.enforce_metric_name: false -> true\n  * config.ruler.enable_api: false -> true\n  * configure memberlist automatically\n  * config.ingester.lifecycler.final_sleep: 0s -> 30s\n  * config.querier.query_ingesters_within: 12h -> 13h\n  * config.querier.query_store_after: 0 -> 12h\n* [BUGFIX] Fix nil pointer evaluation when using `ruler.dictonaries` option #242\n* [BUGFIX] Fixed hardcoding of containerSecurityContext in Ingester statefulset #258\n* [BUGFIX] Don't create nginx resources unless nginx is enabled. #261\n* [DEPENDENCY] Update Helm release memcached to v5.15.5 #241\n* [DEPENDENCY] Update Helm release memcached to v5.15.8 #247\n\n## 0.7.0 / 2021-10-05\n\n* [FEATURE] Support runtime configuration #209\n* [FEATURE] Add autoscaler for queriers #190\n* [FEATURE] Add autoscaler for distributors #189\n* [FEATURE] Add autoscaler for ingesters #182\n* [ENHANCEMENT] Support customizing the nginx config with values #213\n* [ENHANCEMENT] Upgrade to Cortex v1.10.0 #204\n* [ENHANCEMENT] Populate config.querier.store_gateway_addresses automatically based on other config #201\n* [ENHANCEMENT] Graceful shutdown of ingesters #195\n* [ENHANCEMENT] Define namespace in templates #184\n* [ENHANCEMENT] Use FQDN for memcached addresses #175\n* [ENHANCEMENT] Optionally generate endpoints for `X-Scope-OrgID` injection (multi-tenancy) #180\n* [ENHANCEMENT] Optionally configure Basic Auth within Nginx #205\n* [ENHANCEMENT] Add extraEndpointSpec to all servicemonitors for specifying things like TLS #216\n* [ENHANCEMENT] Add option to specify `podManagementPolicy` when using ingesters as statefulset #236\n* [BUGFIX] Fix whitespace in runtime-config annotations, introduced in #209, fixed in #212\n* [BUGFIX] Correcting nginx config for auth orgs to right proxy_pass #192\n* [DEPENDENCY] Update Helm release memcached to v5.15.4 #228\n\n## 0.6.0 / 2021-06-28\n\n* [CHANGE] Removed dnssrvnoa resolution from block memcached (probably oversight) and moved back to simple dns resolution #164\n* [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\n* [FEATURE] Support dynamic configuration of Ruler and AlertManager using sidecar #150\n* [ENHANCEMENT] Enable/Disable security & container security context #158\n* [ENHANCEMENT] ServiceMonitors: add options to configure metricRelabelings and relabelings #165\n* [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\n* [BUGFIX] Fixed the default label used in pod affinity expression #162\n* [BUGFIX] Fix label and annotation overrides for services (thanks @kwangil-ha) #164\n* [BUGFIX] Fix store gateway service name regression introduced in (#144) #166\n* [BUGFIX] Fix querier-frontend memcached arg #170\n\n## 0.5.0 / 2021-06-08\n\n* [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\n* [CHANGE] Minimum Kubernetes Version of this Chart is now 1.19 #144\n* [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\n* [CHANGE] Ingress is now disabled by default. You can re-enable it by setting `ingress.enabled` to `true` #144\n* [CHANGE] Configs is now disabled by default. You can re-enable it by setting `configs.enabled` to `true` #144\n* [CHANGE] PodDisruptionBudget is now enabled by default for all microservices once you have more than 1 replicas #144\n* [ENHANCEMENT] startupProbe has been added to all Pods and the default values for `livenessProbe` and `readinessProbe` has been adjusted #144\n* [ENHANCEMENT] You can now disable the alertmanager and ruler deployment by setting `ruler.enabled` or `alertmanager.enabled` to `false` #144\n* [ENHANCEMENT] Rules for the ruler can now be provisioned via values. Check `ruler.directories` in the default `values.yaml` for more information. #144\n* [ENHANCEMENT] Expose `client_max_body_size` config for nginx max request body size #137\n* [ENHANCEMENT] Adding option to add custom headers (ex. X-Scope-OrgID) to NGINX from values.yaml (key `nginx.config.setHeaders`). #127\n* [ENHANCEMENT] Headless service for distributor to allow GRPC load balancing #148\n* [BUGFIX] Fixed `priorityClassName` in alertmanager deployment configuration. #155\n* [BUGFIX] Replacing deprecated (in Cortex 1.9) configuration with appropriate replacements (max_look_back_period -> max_query_lookback & compress_responses -> response_compression_enabled). #154\n* [BUGFIX] Added missing ServiceMonitors `additionalLabels` placeholders in `values.yaml`. #146\n\n## 0.4.1 / 2021-03-22\n\n* [BUGFIX] Fix dependencies in charts dir to reflect recent update in 0.4.0 #139\n\n## 0.4.0 / 2021-03-01\n\n* [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\n* [CHANGE] Change memcached chart references from deprecated stable repo to bitnami source. #124\n* [BUGFIX] Corrected structural issues found in ingress resource yaml for kube versions 1.19+. #112\n\n## 0.3.0 / 2021-01-21\n\n* [ENHANCEMENT] Expose new HTTP API paths for remote-write and Query frontend to nginx #103\n* [ENHANCEMENT] Compactor service is no longer created if compactor is disabled. #82\n* [ENHANCEMENT] Headless service for alert manager is only enabled when the alert manager is deployed as a stateful set. #91\n* [ENHANCEMENT] Improved memcached configuration template, with support for both chunks & block storage caches. #92\n* [ENHANCEMENT] Update apiVersion: networking.k8s.io/v1beta1 -> networking.k8s.io/v1 for Kubernetes versions 1.19+  #94\n* [ENHANCEMENT] Service Monitors and Compactor Service #68, #80\n* [ENHANCEMENT] Updated default replication factor to match documentation #102\n* [BUGFIX] Update repository URL for memcache dependency charts. #96\n* [BUGFIX] nginx config using non-default clusterDomain #78\n* [BUGFIX] Add cluster DNS domain value #63\n* [BUGFIX] Fix grpc port for querier #71\n\n## 0.2.0 / 2020-10-25\n\n* [FEATURE] Add support for Blocks storage backend of Cortex. #52\n* [ENHANCEMENT] Adding dnsResolver option to nginx.config. #28\n* [ENHANCEMENT] Supporting externally managed Cortex Config. #31\n* [ENHANCEMENT] Enabling NGINX deployment to be optional. #32\n* [ENHANCEMENT] Adding option to deploy ingester as StatefulSet. #46\n* [ENHANCEMENT] Adding ability to run alertmanager as StatefulSet. #54\n* [ENHANCEMENT] Updating README.MD with values.yaml defaults, adding alertmanager paths to nginx. #57\n* [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\n* [BUGFIX] Fixed invalid config template. #40\n* [BUGFIX] Correct & add consistent target labels on components. #48\n* [BUGFIX] Fix values file duplicate config.storage section of Cortex config. #51\n* [BUGFIX] Add GRPC ports to store gateway pods and service. #52\n* [BUGFIX] Fix service ports, fix ruler endpoint for configs and alertmanager. #55\n"
  },
  {
    "path": "Chart.yaml",
    "content": "apiVersion: v2\nversion: 3.3.1\nappVersion: v1.21.0\ndescription: 'Horizontally scalable, highly available, multi-tenant, long term Prometheus.'\nhome: https://cortexmetrics.io/\nicon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\nkubeVersion: ^1.19.0-0\nmaintainers:\n  - email: thayward@infoblox.com\n    name: Tom Hayward\n    url: https://github.com/kd7lxl\n  - email: niclas.schad@stackit.cloud\n    name: Niclas Schad\n    url: https://github.com/nschad\nname: cortex\nsources:\n  - https://github.com/cortexproject/cortex-helm-chart\ndependencies:\n  - name: memcached\n    alias: memcached-frontend\n    version: 6.14.0\n    repository: https://charts.bitnami.com/bitnami\n    condition: memcached-frontend.enabled\n  - name: memcached\n    alias: memcached-blocks-index\n    version: 6.14.0\n    repository: https://charts.bitnami.com/bitnami\n    condition: memcached-blocks-index.enabled\n  - name: memcached\n    alias: memcached-blocks\n    version: 6.14.0\n    repository: https://charts.bitnami.com/bitnami\n    condition: memcached-blocks.enabled\n  - name: memcached\n    alias: memcached-blocks-metadata\n    version: 6.14.0\n    repository: https://charts.bitnami.com/bitnami\n    condition: memcached-blocks-metadata.enabled\n  - name: memcached\n    alias: memcached-parquet-labels\n    version: 6.14.0\n    repository: https://charts.bitnami.com/bitnami\n    condition: memcached-parquet-labels.enabled\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "MAINTAINERS.md",
    "content": "- Niclas Schad, STACKIT <niclas.schad@stackit.cloud> ([@nschad](https://github.com/nschad))\n- Tom Hayward, Infoblox <thayward@infoblox.com> ([@kd7lxl](https://github.com/kd7lxl))\n"
  },
  {
    "path": "Makefile",
    "content": ".PHONY: README.md\nREADME.md:\n\tdocker run --rm --volume \"$(shell pwd):/helm-docs\" -u $(shell id -u) jnorwood/helm-docs:v1.11.0\n\n.PHONY: bump-version\nbump-version:\n\t./tools/bump-version.sh $(VERSION)\n"
  },
  {
    "path": "README.md",
    "content": "<!-- README.md is a generated file. Make any changes in README.md.gotmpl or values.yaml. -->\n\n# cortex\n\n![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)\n\nHorizontally scalable, highly available, multi-tenant, long term Prometheus.\n\n**Homepage:** <https://cortexmetrics.io/>\n\n## Maintainers\n\n| Name | Email | Url |\n| ---- | ------ | --- |\n| Tom Hayward | <thayward@infoblox.com> | <https://github.com/kd7lxl> |\n| Niclas Schad | <niclas.schad@stackit.cloud> | <https://github.com/nschad> |\n\n## Documentation\n\nCheckout our documentation for the cortex-helm-chart [here](https://cortexproject.github.io/cortex-helm-chart/)\n\n## Dependencies\n\n### Key-Value store\n\nCortex 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.\n\nThe recommended approach is to use the built-in memberlist as a KV store, where supported.\n\nExternal 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.\n\n### Storage\n\nCortex requires a storage backend to store metrics and indexes.\nSee [cortex documentation](https://cortexmetrics.io/docs/) for details on storage types and documentation\n\n## Installation\n\n[Helm](https://helm.sh) must be installed to use the charts.\nPlease refer to Helm's [documentation](https://helm.sh/docs/) to get started.\n\nOnce Helm is set up properly, add the repo as follows:\n\n```bash\n  helm repo add cortex-helm https://cortexproject.github.io/cortex-helm-chart\n```\n\nCortex can now be installed with the following command:\n\n```bash\n  helm install cortex --namespace cortex cortex-helm/cortex\n```\n\nIf you have custom options or values you want to override:\n\n```bash\n  helm install cortex --namespace cortex -f my-cortex-values.yaml cortex-helm/cortex\n```\n\nSpecific versions of the chart can be installed using the `--version` option, with the default being the latest release.\nWhat versions are available for installation can be listed with the following command:\n\n```bash\n  helm search repo cortex-helm\n```\n\nAs part of this chart many different pods and services are installed which all\nhave varying resource requirements. Please make sure that you have sufficient\nresources (CPU/memory) available in your cluster before installing Cortex Helm\nchart.\n\n## Upgrades\n\nTo upgrade Cortex use the following command:\n\n```bash\n  helm upgrade cortex -f my-cortex-values.yaml cortex-helm/cortex\n```\nNote that it might be necessary to use `--reset-values` since some default values in the values.yaml might have changed or were removed.\n\nSource code can be found [here](https://cortexmetrics.io/)\n\n## Requirements\n\nKubernetes: `^1.19.0-0`\n\n| Repository | Name | Version |\n|------------|------|---------|\n| https://charts.bitnami.com/bitnami | memcached-frontend(memcached) | 6.14.0 |\n| https://charts.bitnami.com/bitnami | memcached-blocks-index(memcached) | 6.14.0 |\n| https://charts.bitnami.com/bitnami | memcached-blocks(memcached) | 6.14.0 |\n| https://charts.bitnami.com/bitnami | memcached-blocks-metadata(memcached) | 6.14.0 |\n| https://charts.bitnami.com/bitnami | memcached-parquet-labels(memcached) | 6.14.0 |\n\n## Values\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| alertmanager.&ZeroWidthSpace;affinity | object | `{}` |  |\n| alertmanager.&ZeroWidthSpace;annotations | object | `{}` |  |\n| alertmanager.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| alertmanager.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| alertmanager.&ZeroWidthSpace;enabled | bool | `true` |  |\n| alertmanager.&ZeroWidthSpace;env | list | `[]` | Extra env variables to pass to the cortex container |\n| alertmanager.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log level (debug, info, warn, error) |\n| alertmanager.&ZeroWidthSpace;extraContainers | list | `[]` | Additional containers to be added to the cortex pod. |\n| alertmanager.&ZeroWidthSpace;extraPorts | list | `[]` | Additional ports to the cortex services. Useful to expose extra container ports. |\n| alertmanager.&ZeroWidthSpace;extraVolumeMounts | list | `[]` | Extra volume mounts that will be added to the cortex container |\n| alertmanager.&ZeroWidthSpace;extraVolumes | list | `[]` | Additional volumes to the cortex pod. |\n| alertmanager.&ZeroWidthSpace;initContainers | list | `[]` | Init containers to be added to the cortex pod. |\n| alertmanager.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| alertmanager.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| alertmanager.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| alertmanager.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;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/ |\n| alertmanager.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;annotations | object | `{}` | Alertmanager data Persistent Volume Claim annotations |\n| alertmanager.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;enabled | bool | `true` | If true and alertmanager.statefulSet.enabled is true, Alertmanager will create/use a Persistent Volume Claim If false, use emptyDir |\n| alertmanager.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;retentionPolicy | object | `{}` | StatefulSetAutoDeletePVC feature https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention |\n| alertmanager.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;size | string | `\"2Gi\"` | Alertmanager data Persistent Volume size |\n| alertmanager.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;storageClass | string | `nil` | Alertmanager data Persistent Volume Storage Class If defined, storageClassName: <storageClass> 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. |\n| alertmanager.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;subPath | string | `\"\"` | Subdirectory of Alertmanager data Persistent Volume to mount Useful if the volume's root directory is not empty |\n| alertmanager.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"8080\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| alertmanager.&ZeroWidthSpace;podDisruptionBudget | object | `{\"maxUnavailable\":1}` | If not set then a PodDisruptionBudget will not be created |\n| alertmanager.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| alertmanager.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| alertmanager.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| alertmanager.&ZeroWidthSpace;replicas | int | `1` |  |\n| alertmanager.&ZeroWidthSpace;resources | object | `{}` |  |\n| alertmanager.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| alertmanager.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| alertmanager.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| alertmanager.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `\"\"` | \"\" disables the individual serviceAccount and uses the global serviceAccount for that component |\n| alertmanager.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| alertmanager.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| alertmanager.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| alertmanager.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| alertmanager.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| alertmanager.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;defaultFolderName | string | `\"\"` | The default folder name, it will create a subfolder under the `folder` and put rules in there instead |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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. |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;enabled | bool | `false` | Enable sidecar that collect the configmaps with specified label and stores the included files them into the respective folders |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;folder | string | `\"/data\"` | Folder where the files should be placed. |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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 |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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. |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"kiwigrid/k8s-sidecar\"` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;image.&ZeroWidthSpace;sha | string | `\"\"` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"2.7.3\"` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;imagePullPolicy | string | `\"IfNotPresent\"` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;label | string | `\"cortex_alertmanager\"` | Label that should be used for filtering |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;labelValue | string | `\"\"` | The value for the label you want to filter your resources on. Don't set a value to filter by any value |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/healthz\"` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"sidecar-health\"` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;periodSeconds | int | `5` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;resource | string | `\"both\"` | The resource type that the operator will filter for. Can be configmap, secret or both |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;resources | object | `{}` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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. |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;skipTlsVerify | bool | `false` | Set to true to skip tls verification for kube api calls |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/healthz\"` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"sidecar-health\"` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;periodSeconds | int | `5` |  |\n| alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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 |\n| alertmanager.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` |  |\n| alertmanager.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| alertmanager.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| alertmanager.&ZeroWidthSpace;statefulSet.&ZeroWidthSpace;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. |\n| alertmanager.&ZeroWidthSpace;statefulStrategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| alertmanager.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| alertmanager.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| alertmanager.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| alertmanager.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `60` |  |\n| alertmanager.&ZeroWidthSpace;tolerations | list | `[]` | Tolerations for pod assignment ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ |\n| alertmanager.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| clusterDomain | string | `\"cluster.local\"` | Kubernetes cluster DNS domain |\n| compactor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `\"app.kubernetes.io/component\"` |  |\n| compactor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `\"In\"` |  |\n| compactor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `\"compactor\"` |  |\n| compactor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `\"kubernetes.io/hostname\"` |  |\n| compactor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` |  |\n| compactor.&ZeroWidthSpace;annotations | object | `{}` |  |\n| compactor.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| compactor.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| compactor.&ZeroWidthSpace;enabled | bool | `true` |  |\n| compactor.&ZeroWidthSpace;env | list | `[]` |  |\n| compactor.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| compactor.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| compactor.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| compactor.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| compactor.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| compactor.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| compactor.&ZeroWidthSpace;livenessProbe | object | `{}` |  |\n| compactor.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| compactor.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;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/ |\n| compactor.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;annotations | object | `{}` | compactor data Persistent Volume Claim annotations |\n| compactor.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;enabled | bool | `true` | If true compactor will create/use a Persistent Volume Claim If false, use emptyDir |\n| compactor.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;retentionPolicy | object | `{}` | StatefulSetAutoDeletePVC feature https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention |\n| compactor.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;size | string | `\"2Gi\"` |  |\n| compactor.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;storageClass | string | `nil` | compactor data Persistent Volume Storage Class If defined, storageClassName: <storageClass> 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. |\n| compactor.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;subPath | string | `\"\"` | Subdirectory of compactor data Persistent Volume to mount Useful if the volume's root directory is not empty |\n| compactor.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"8080\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| compactor.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | string | `\"30%\"` |  |\n| compactor.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| compactor.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| compactor.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| compactor.&ZeroWidthSpace;replicas | int | `1` |  |\n| compactor.&ZeroWidthSpace;resources | object | `{}` |  |\n| compactor.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| compactor.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| compactor.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| compactor.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `\"\"` | \"\" disables the individual serviceAccount and uses the global serviceAccount for that component |\n| compactor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| compactor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| compactor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| compactor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| compactor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| compactor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| compactor.&ZeroWidthSpace;startupProbe | object | `{}` |  |\n| compactor.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| compactor.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `240` |  |\n| compactor.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| compactor.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| config.&ZeroWidthSpace;alertmanager.&ZeroWidthSpace;cluster | object | `{\"listen_address\":\"0.0.0.0:9094\"}` | Disable alertmanager gossip cluster by setting empty listen_address to empty string |\n| config.&ZeroWidthSpace;alertmanager.&ZeroWidthSpace;enable_api | bool | `false` | Enable the experimental alertmanager config api. |\n| config.&ZeroWidthSpace;alertmanager.&ZeroWidthSpace;external_url | string | `\"/api/prom/alertmanager\"` |  |\n| config.&ZeroWidthSpace;api.&ZeroWidthSpace;prometheus_http_prefix | string | `\"/prometheus\"` |  |\n| config.&ZeroWidthSpace;api.&ZeroWidthSpace;response_compression_enabled | bool | `true` | Use GZIP compression for API responses. Some endpoints serve large YAML or JSON blobs which can benefit from compression. |\n| config.&ZeroWidthSpace;auth_enabled | bool | `false` |  |\n| config.&ZeroWidthSpace;blocks_storage.&ZeroWidthSpace;bucket_store.&ZeroWidthSpace;bucket_index.&ZeroWidthSpace;enabled | bool | `true` |  |\n| config.&ZeroWidthSpace;blocks_storage.&ZeroWidthSpace;bucket_store.&ZeroWidthSpace;sync_dir | string | `\"/data/tsdb-sync\"` |  |\n| config.&ZeroWidthSpace;blocks_storage.&ZeroWidthSpace;tsdb.&ZeroWidthSpace;dir | string | `\"/data/tsdb\"` |  |\n| config.&ZeroWidthSpace;distributor.&ZeroWidthSpace;pool.&ZeroWidthSpace;health_check_ingesters | bool | `true` |  |\n| config.&ZeroWidthSpace;distributor.&ZeroWidthSpace;shard_by_all_labels | bool | `true` | Distribute samples based on all labels, as opposed to solely by user and metric name. |\n| config.&ZeroWidthSpace;frontend.&ZeroWidthSpace;log_queries_longer_than | string | `\"10s\"` |  |\n| config.&ZeroWidthSpace;ingester.&ZeroWidthSpace;lifecycler.&ZeroWidthSpace;final_sleep | string | `\"30s\"` | Duration to sleep for before exiting, to ensure metrics are scraped. |\n| config.&ZeroWidthSpace;ingester.&ZeroWidthSpace;lifecycler.&ZeroWidthSpace;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 |\n| config.&ZeroWidthSpace;ingester.&ZeroWidthSpace;lifecycler.&ZeroWidthSpace;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. |\n| config.&ZeroWidthSpace;ingester.&ZeroWidthSpace;lifecycler.&ZeroWidthSpace;ring.&ZeroWidthSpace;kvstore.&ZeroWidthSpace;store | string | `\"memberlist\"` |  |\n| config.&ZeroWidthSpace;ingester.&ZeroWidthSpace;lifecycler.&ZeroWidthSpace;ring.&ZeroWidthSpace;replication_factor | int | `3` | Ingester replication factor per default is 3 |\n| config.&ZeroWidthSpace;ingester_client.&ZeroWidthSpace;grpc_client_config.&ZeroWidthSpace;max_recv_msg_size | int | `10485760` |  |\n| config.&ZeroWidthSpace;ingester_client.&ZeroWidthSpace;grpc_client_config.&ZeroWidthSpace;max_send_msg_size | int | `10485760` |  |\n| config.&ZeroWidthSpace;limits.&ZeroWidthSpace;enforce_metric_name | bool | `true` | Enforce that every sample has a metric name |\n| config.&ZeroWidthSpace;limits.&ZeroWidthSpace;max_query_lookback | string | `\"0s\"` |  |\n| config.&ZeroWidthSpace;limits.&ZeroWidthSpace;reject_old_samples | bool | `true` |  |\n| config.&ZeroWidthSpace;limits.&ZeroWidthSpace;reject_old_samples_max_age | string | `\"168h\"` |  |\n| config.&ZeroWidthSpace;memberlist.&ZeroWidthSpace;bind_port | int | `7946` |  |\n| config.&ZeroWidthSpace;memberlist.&ZeroWidthSpace;join_members | list | `[\"{{ include \\\"cortex.fullname\\\" $ }}-memberlist\"]` | the service name of the memberlist if using memberlist discovery |\n| config.&ZeroWidthSpace;querier.&ZeroWidthSpace;active_query_tracker_dir | string | `\"/data/active-query-tracker\"` |  |\n| config.&ZeroWidthSpace;querier.&ZeroWidthSpace;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). |\n| config.&ZeroWidthSpace;query_range.&ZeroWidthSpace;align_queries_with_step | bool | `false` |  |\n| config.&ZeroWidthSpace;query_range.&ZeroWidthSpace;cache_results | bool | `true` |  |\n| config.&ZeroWidthSpace;query_range.&ZeroWidthSpace;results_cache.&ZeroWidthSpace;cache.&ZeroWidthSpace;memcached.&ZeroWidthSpace;expiration | string | `\"1h\"` |  |\n| config.&ZeroWidthSpace;query_range.&ZeroWidthSpace;results_cache.&ZeroWidthSpace;cache.&ZeroWidthSpace;memcached_client.&ZeroWidthSpace;timeout | string | `\"1s\"` |  |\n| config.&ZeroWidthSpace;query_range.&ZeroWidthSpace;split_queries_by_interval | string | `\"24h\"` |  |\n| config.&ZeroWidthSpace;ruler.&ZeroWidthSpace;enable_alertmanager_discovery | bool | `false` |  |\n| config.&ZeroWidthSpace;ruler.&ZeroWidthSpace;enable_api | bool | `true` | Enable the experimental ruler config api. |\n| config.&ZeroWidthSpace;runtime_config.&ZeroWidthSpace;file | string | `\"/etc/cortex-runtime-config/runtime_config.yaml\"` |  |\n| config.&ZeroWidthSpace;server.&ZeroWidthSpace;grpc_listen_port | int | `9095` |  |\n| config.&ZeroWidthSpace;server.&ZeroWidthSpace;grpc_server_max_concurrent_streams | int | `10000` |  |\n| config.&ZeroWidthSpace;server.&ZeroWidthSpace;grpc_server_max_recv_msg_size | int | `10485760` |  |\n| config.&ZeroWidthSpace;server.&ZeroWidthSpace;grpc_server_max_send_msg_size | int | `10485760` |  |\n| config.&ZeroWidthSpace;server.&ZeroWidthSpace;http_listen_port | int | `8080` |  |\n| config.&ZeroWidthSpace;store_gateway | object | `{\"sharding_enabled\":false}` | https://cortexmetrics.io/docs/configuration/configuration-file/#store_gateway_config |\n| distributor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `\"app.kubernetes.io/component\"` |  |\n| distributor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `\"In\"` |  |\n| distributor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `\"distributor\"` |  |\n| distributor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `\"kubernetes.io/hostname\"` |  |\n| distributor.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` |  |\n| distributor.&ZeroWidthSpace;annotations | object | `{}` |  |\n| distributor.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior |\n| distributor.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;enabled | bool | `false` | Creates a HorizontalPodAutoscaler for the distributor pods. |\n| distributor.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;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 |\n| distributor.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;maxReplicas | int | `30` |  |\n| distributor.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;minReplicas | int | `2` |  |\n| distributor.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetCPUUtilizationPercentage | int | `80` |  |\n| distributor.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetMemoryUtilizationPercentage | int | `0` |  |\n| distributor.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| distributor.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| distributor.&ZeroWidthSpace;enabled | bool | `true` |  |\n| distributor.&ZeroWidthSpace;env | list | `[]` |  |\n| distributor.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| distributor.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| distributor.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| distributor.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| distributor.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| distributor.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| distributor.&ZeroWidthSpace;lifecycle | object | `{}` |  |\n| distributor.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| distributor.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| distributor.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| distributor.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;subPath | string | `nil` |  |\n| distributor.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"8080\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| distributor.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | string | `\"30%\"` |  |\n| distributor.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| distributor.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| distributor.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| distributor.&ZeroWidthSpace;replicas | int | `2` |  |\n| distributor.&ZeroWidthSpace;resources | object | `{}` |  |\n| distributor.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| distributor.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| distributor.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| distributor.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `\"\"` | \"\" disables the individual serviceAccount and uses the global serviceAccount for that component |\n| distributor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| distributor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| distributor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| distributor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| distributor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| distributor.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| distributor.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` |  |\n| distributor.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| distributor.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| distributor.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| distributor.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| distributor.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| distributor.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `60` |  |\n| distributor.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| distributor.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| externalConfigSecretName | string | `\"secret-with-config.yaml\"` |  |\n| externalConfigVersion | string | `\"0\"` |  |\n| image.&ZeroWidthSpace;pullPolicy | string | `\"IfNotPresent\"` |  |\n| image.&ZeroWidthSpace;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/ |\n| image.&ZeroWidthSpace;repository | string | `\"quay.io/cortexproject/cortex\"` |  |\n| image.&ZeroWidthSpace;tag | string | `\"\"` | Allows you to override the cortex version in this chart. Use at your own risk. |\n| ingester.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `\"app.kubernetes.io/component\"` |  |\n| ingester.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `\"In\"` |  |\n| ingester.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `\"ingester\"` |  |\n| ingester.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[1] | string | `\"querier\"` |  |\n| ingester.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `\"kubernetes.io/hostname\"` |  |\n| ingester.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` |  |\n| ingester.&ZeroWidthSpace;annotations | object | `{}` |  |\n| ingester.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;behavior.&ZeroWidthSpace;scaleDown.&ZeroWidthSpace;policies | list | `[{\"periodSeconds\":1800,\"type\":\"Pods\",\"value\":1}]` | see https://cortexmetrics.io/docs/guides/ingesters-scaling-up-and-down/#scaling-down for scaledown details |\n| ingester.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;behavior.&ZeroWidthSpace;scaleDown.&ZeroWidthSpace;stabilizationWindowSeconds | int | `3600` | uses metrics from the past 1h to make scaleDown decisions |\n| ingester.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;behavior.&ZeroWidthSpace;scaleUp.&ZeroWidthSpace;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 |\n| ingester.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;enabled | bool | `false` |  |\n| ingester.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;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 |\n| ingester.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;maxReplicas | int | `30` |  |\n| ingester.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;minReplicas | int | `3` |  |\n| ingester.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetMemoryUtilizationPercentage | int | `80` |  |\n| ingester.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| ingester.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| ingester.&ZeroWidthSpace;enabled | bool | `true` |  |\n| ingester.&ZeroWidthSpace;env | list | `[]` |  |\n| ingester.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| ingester.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| ingester.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| ingester.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| ingester.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| ingester.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| ingester.&ZeroWidthSpace;lifecycle.&ZeroWidthSpace;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 |\n| ingester.&ZeroWidthSpace;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 |\n| ingester.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| ingester.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;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/ |\n| ingester.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;annotations | object | `{}` | Ingester data Persistent Volume Claim annotations |\n| ingester.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;enabled | bool | `true` | If true and ingester.statefulSet.enabled is true, Ingester will create/use a Persistent Volume Claim If false, use emptyDir |\n| ingester.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;retentionPolicy | object | `{}` | StatefulSetAutoDeletePVC feature https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention |\n| ingester.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;size | string | `\"2Gi\"` | Ingester data Persistent Volume size |\n| ingester.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;storageClass | string | `nil` | Ingester data Persistent Volume Storage Class If defined, storageClassName: <storageClass> 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. |\n| ingester.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;subPath | string | `\"\"` | Subdirectory of Ingester data Persistent Volume to mount Useful if the volume's root directory is not empty |\n| ingester.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"8080\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| ingester.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| ingester.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| ingester.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| ingester.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| ingester.&ZeroWidthSpace;replicas | int | `3` |  |\n| ingester.&ZeroWidthSpace;resources | object | `{}` |  |\n| ingester.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| ingester.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| ingester.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| ingester.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `nil` |  |\n| ingester.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| ingester.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| ingester.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| ingester.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| ingester.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| ingester.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| ingester.&ZeroWidthSpace;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 |\n| ingester.&ZeroWidthSpace;statefulSet.&ZeroWidthSpace;enabled | bool | `false` | If true, use a statefulset instead of a deployment for pod management. This is useful when using WAL |\n| ingester.&ZeroWidthSpace;statefulSet.&ZeroWidthSpace;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 |\n| ingester.&ZeroWidthSpace;statefulStrategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| ingester.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| ingester.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| ingester.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| ingester.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `240` |  |\n| ingester.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| ingester.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| ingress.&ZeroWidthSpace;annotations | object | `{}` |  |\n| ingress.&ZeroWidthSpace;enabled | bool | `false` |  |\n| ingress.&ZeroWidthSpace;hosts[0].&ZeroWidthSpace;host | string | `\"chart-example.local\"` |  |\n| ingress.&ZeroWidthSpace;hosts[0].&ZeroWidthSpace;paths[0] | string | `\"/\"` |  |\n| ingress.&ZeroWidthSpace;ingressClass.&ZeroWidthSpace;enabled | bool | `false` |  |\n| ingress.&ZeroWidthSpace;ingressClass.&ZeroWidthSpace;name | string | `\"nginx\"` |  |\n| ingress.&ZeroWidthSpace;tls | list | `[]` |  |\n| memberlist.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| memberlist.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| memcached-blocks-index.&ZeroWidthSpace;architecture | string | `\"high-availability\"` |  |\n| memcached-blocks-index.&ZeroWidthSpace;args | list | `[\"-m 1024\"]` | Command line argument supplied to memcached |\n| memcached-blocks-index.&ZeroWidthSpace;args[0] | string | `\"-m 1024\"` | The amount of memory allocated to memcached for object storage |\n| memcached-blocks-index.&ZeroWidthSpace;disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use |\n| memcached-blocks-index.&ZeroWidthSpace;enabled | bool | `true` | Enables support for block index caching |\n| memcached-blocks-index.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"memcached\"` |  |\n| memcached-blocks-index.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"1.6.42\"` |  |\n| memcached-blocks-index.&ZeroWidthSpace;metrics.&ZeroWidthSpace;enabled | bool | `true` |  |\n| memcached-blocks-index.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"prom/memcached-exporter\"` |  |\n| memcached-blocks-index.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"v0.16.0\"` |  |\n| memcached-blocks-index.&ZeroWidthSpace;metrics.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| memcached-blocks-index.&ZeroWidthSpace;replicaCount | int | `2` |  |\n| memcached-blocks-index.&ZeroWidthSpace;resources | object | `{}` |  |\n| memcached-blocks-index.&ZeroWidthSpace;service.&ZeroWidthSpace;clusterIP | string | `\"None\"` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;architecture | string | `\"high-availability\"` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;args | list | `[\"-m 1024\"]` | Command line argument supplied to memcached |\n| memcached-blocks-metadata.&ZeroWidthSpace;args[0] | string | `\"-m 1024\"` | The amount of memory allocated to memcached for object storage |\n| memcached-blocks-metadata.&ZeroWidthSpace;disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use |\n| memcached-blocks-metadata.&ZeroWidthSpace;enabled | bool | `true` | Enables support for block metadata caching |\n| memcached-blocks-metadata.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"memcached\"` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"1.6.42\"` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;metrics.&ZeroWidthSpace;enabled | bool | `true` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"prom/memcached-exporter\"` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"v0.16.0\"` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;metrics.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;replicaCount | int | `2` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;resources | object | `{}` |  |\n| memcached-blocks-metadata.&ZeroWidthSpace;service.&ZeroWidthSpace;clusterIP | string | `\"None\"` |  |\n| memcached-blocks.&ZeroWidthSpace;architecture | string | `\"high-availability\"` |  |\n| memcached-blocks.&ZeroWidthSpace;args | list | `[\"-m 1024\"]` | Command line argument supplied to memcached |\n| memcached-blocks.&ZeroWidthSpace;args[0] | string | `\"-m 1024\"` | The amount of memory allocated to memcached for object storage |\n| memcached-blocks.&ZeroWidthSpace;disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use |\n| memcached-blocks.&ZeroWidthSpace;enabled | bool | `true` | Enables support for block caching |\n| memcached-blocks.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"memcached\"` |  |\n| memcached-blocks.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"1.6.42\"` |  |\n| memcached-blocks.&ZeroWidthSpace;metrics.&ZeroWidthSpace;enabled | bool | `true` |  |\n| memcached-blocks.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"prom/memcached-exporter\"` |  |\n| memcached-blocks.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"v0.16.0\"` |  |\n| memcached-blocks.&ZeroWidthSpace;metrics.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| memcached-blocks.&ZeroWidthSpace;replicaCount | int | `2` |  |\n| memcached-blocks.&ZeroWidthSpace;resources | object | `{}` |  |\n| memcached-blocks.&ZeroWidthSpace;service.&ZeroWidthSpace;clusterIP | string | `\"None\"` |  |\n| memcached-frontend.&ZeroWidthSpace;architecture | string | `\"high-availability\"` |  |\n| memcached-frontend.&ZeroWidthSpace;args | list | `[\"-m 1024\"]` | Command line argument supplied to memcached |\n| memcached-frontend.&ZeroWidthSpace;args[0] | string | `\"-m 1024\"` | The amount of memory allocated to memcached for object storage |\n| memcached-frontend.&ZeroWidthSpace;disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use |\n| memcached-frontend.&ZeroWidthSpace;enabled | bool | `true` | Enables support for caching queries in the frontend |\n| memcached-frontend.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"memcached\"` |  |\n| memcached-frontend.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"1.6.42\"` |  |\n| memcached-frontend.&ZeroWidthSpace;metrics.&ZeroWidthSpace;enabled | bool | `true` |  |\n| memcached-frontend.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"prom/memcached-exporter\"` |  |\n| memcached-frontend.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"v0.16.0\"` |  |\n| memcached-frontend.&ZeroWidthSpace;metrics.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| memcached-frontend.&ZeroWidthSpace;replicaCount | int | `2` |  |\n| memcached-frontend.&ZeroWidthSpace;resources | object | `{}` |  |\n| memcached-frontend.&ZeroWidthSpace;service.&ZeroWidthSpace;clusterIP | string | `\"None\"` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;architecture | string | `\"high-availability\"` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;args | list | `[\"-m 1024\"]` | Command line argument supplied to memcached |\n| memcached-parquet-labels.&ZeroWidthSpace;args[0] | string | `\"-m 1024\"` | The amount of memory allocated to memcached for object storage |\n| memcached-parquet-labels.&ZeroWidthSpace;disableValidation | bool | `false` | Bypass validation of the memcached configuration in case a custom image is in use |\n| memcached-parquet-labels.&ZeroWidthSpace;enabled | bool | `false` | Enables support for parquet labels caching |\n| memcached-parquet-labels.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"memcached\"` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"1.6.42\"` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;metrics.&ZeroWidthSpace;enabled | bool | `true` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"prom/memcached-exporter\"` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;metrics.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"v0.16.0\"` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;metrics.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;replicaCount | int | `2` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;resources | object | `{}` |  |\n| memcached-parquet-labels.&ZeroWidthSpace;service.&ZeroWidthSpace;clusterIP | string | `\"None\"` |  |\n| nginx.&ZeroWidthSpace;affinity | object | `{}` |  |\n| nginx.&ZeroWidthSpace;annotations | object | `{}` |  |\n| nginx.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior |\n| nginx.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;enabled | bool | `false` | Creates a HorizontalPodAutoscaler for the nginx pods. |\n| nginx.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;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 |\n| nginx.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;maxReplicas | int | `30` |  |\n| nginx.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;minReplicas | int | `2` |  |\n| nginx.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetCPUUtilizationPercentage | int | `80` |  |\n| nginx.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetMemoryUtilizationPercentage | int | `0` |  |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;auth_orgs | list | `[]` | Optional list of [auth tenants](https://cortexmetrics.io/docs/guides/auth/) to set in the nginx config |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;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: <same as cortex installation>   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 |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;client_max_body_size | string | `\"1M\"` | ref: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;dnsResolver | string | `\"kube-dns.kube-system.svc.cluster.local\"` |  |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;dnsTTL | string | `\"15s\"` | Including the valid parameter to the `resolver` directive to re-resolve names every `dnsTTL` seconds/minutes |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;httpSnippet | string | `\"\"` | arbitrary snippet to inject in the http { } section of the nginx config |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;mainSnippet | string | `\"\"` | arbitrary snippet to inject in the top section of the nginx config |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;override_push_endpoint | string | `\"\"` |  |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;serverSnippet | string | `\"\"` | arbitrary snippet to inject in the server { } section of the nginx config |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;setHeaders | object | `{}` |  |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;upstream_protocol | string | `\"http\"` | protocol for the communication with the upstream |\n| nginx.&ZeroWidthSpace;config.&ZeroWidthSpace;verboseLogging | bool | `true` | Enables all access logs from nginx, otherwise ignores 2XX and 3XX status codes |\n| nginx.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| nginx.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `false` |  |\n| nginx.&ZeroWidthSpace;enabled | bool | `true` |  |\n| nginx.&ZeroWidthSpace;env | list | `[]` |  |\n| nginx.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| nginx.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| nginx.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| nginx.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| nginx.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| nginx.&ZeroWidthSpace;http_listen_port | int | `80` |  |\n| nginx.&ZeroWidthSpace;image.&ZeroWidthSpace;pullPolicy | string | `\"IfNotPresent\"` |  |\n| nginx.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"nginx\"` |  |\n| nginx.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | float | `1.31` |  |\n| nginx.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| nginx.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/healthz\"` |  |\n| nginx.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| nginx.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| nginx.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;subPath | string | `nil` |  |\n| nginx.&ZeroWidthSpace;podAnnotations | object | `{}` | Pod Annotations |\n| nginx.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | string | `\"30%\"` |  |\n| nginx.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| nginx.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/healthz\"` |  |\n| nginx.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| nginx.&ZeroWidthSpace;replicas | int | `2` |  |\n| nginx.&ZeroWidthSpace;resources | object | `{}` |  |\n| nginx.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| nginx.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| nginx.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| nginx.&ZeroWidthSpace;service.&ZeroWidthSpace;port | string | `\"\"` | Replaces default port value from nginx.http_listen_port when set |\n| nginx.&ZeroWidthSpace;service.&ZeroWidthSpace;type | string | `\"ClusterIP\"` |  |\n| nginx.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `\"\"` | \"\" disables the individual serviceAccount and uses the global serviceAccount for that component |\n| nginx.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` |  |\n| nginx.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/healthz\"` |  |\n| nginx.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| nginx.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| nginx.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| nginx.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| nginx.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `10` |  |\n| nginx.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| nginx.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `\"app.kubernetes.io/component\"` |  |\n| overrides_exporter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `\"In\"` |  |\n| overrides_exporter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `\"overrides-exporter\"` |  |\n| overrides_exporter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `\"kubernetes.io/hostname\"` |  |\n| overrides_exporter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` |  |\n| overrides_exporter.&ZeroWidthSpace;annotations | object | `{}` |  |\n| overrides_exporter.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| overrides_exporter.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| overrides_exporter.&ZeroWidthSpace;enabled | bool | `false` | https://cortexmetrics.io/docs/guides/overrides-exporter/ |\n| overrides_exporter.&ZeroWidthSpace;env | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| overrides_exporter.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;lifecycle | object | `{}` |  |\n| overrides_exporter.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| overrides_exporter.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| overrides_exporter.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| overrides_exporter.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"http-metrics\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| overrides_exporter.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | string | `\"30%\"` |  |\n| overrides_exporter.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| overrides_exporter.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| overrides_exporter.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| overrides_exporter.&ZeroWidthSpace;replicas | int | `1` |  |\n| overrides_exporter.&ZeroWidthSpace;resources | object | `{}` |  |\n| overrides_exporter.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| overrides_exporter.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| overrides_exporter.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| overrides_exporter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| overrides_exporter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| overrides_exporter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| overrides_exporter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` |  |\n| overrides_exporter.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| overrides_exporter.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| overrides_exporter.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| overrides_exporter.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| overrides_exporter.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| overrides_exporter.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `180` |  |\n| overrides_exporter.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| overrides_exporter.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `\"app.kubernetes.io/component\"` |  |\n| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `\"In\"` |  |\n| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `\"parquet-converter\"` |  |\n| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `\"kubernetes.io/hostname\"` |  |\n| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` |  |\n| parquet_converter.&ZeroWidthSpace;annotations | object | `{}` |  |\n| parquet_converter.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| parquet_converter.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| parquet_converter.&ZeroWidthSpace;enabled | bool | `false` | https://cortexmetrics.io/docs/guides/parquet-mode/ |\n| parquet_converter.&ZeroWidthSpace;env | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| parquet_converter.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;lifecycle | object | `{}` |  |\n| parquet_converter.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| parquet_converter.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| parquet_converter.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| parquet_converter.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"http-metrics\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| parquet_converter.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| parquet_converter.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| parquet_converter.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| parquet_converter.&ZeroWidthSpace;replicas | int | `1` |  |\n| parquet_converter.&ZeroWidthSpace;resources | object | `{}` |  |\n| parquet_converter.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| parquet_converter.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| parquet_converter.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` |  |\n| parquet_converter.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| parquet_converter.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| parquet_converter.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| parquet_converter.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| parquet_converter.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| parquet_converter.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `180` |  |\n| parquet_converter.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| parquet_converter.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| purger.&ZeroWidthSpace;affinity | object | `{}` |  |\n| purger.&ZeroWidthSpace;annotations | object | `{}` |  |\n| purger.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| purger.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| purger.&ZeroWidthSpace;enabled | bool | `false` |  |\n| purger.&ZeroWidthSpace;env | list | `[]` | Extra env variables to pass to the cortex container |\n| purger.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| purger.&ZeroWidthSpace;extraContainers | list | `[]` | Additional containers to be added to the cortex pod. |\n| purger.&ZeroWidthSpace;extraPorts | list | `[]` | Additional ports to the cortex services. Useful to expose extra container ports. |\n| purger.&ZeroWidthSpace;extraVolumeMounts | list | `[]` | Extra volume mounts that will be added to the cortex container |\n| purger.&ZeroWidthSpace;extraVolumes | list | `[]` | Additional volumes to the cortex pod. |\n| purger.&ZeroWidthSpace;initContainers | list | `[]` | Init containers to be added to the cortex pod. |\n| purger.&ZeroWidthSpace;lifecycle | object | `{}` |  |\n| purger.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| purger.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| purger.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;scheme | string | `\"HTTP\"` |  |\n| purger.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| purger.&ZeroWidthSpace;podAnnotations.&ZeroWidthSpace;\"prometheus.&ZeroWidthSpace;io/port\" | string | `\"8080\"` |  |\n| purger.&ZeroWidthSpace;podAnnotations.&ZeroWidthSpace;\"prometheus.&ZeroWidthSpace;io/scrape\" | string | `\"true\"` |  |\n| purger.&ZeroWidthSpace;podLabels | object | `{}` |  |\n| purger.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| purger.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| purger.&ZeroWidthSpace;replicas | int | `1` |  |\n| purger.&ZeroWidthSpace;resources | object | `{}` |  |\n| purger.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| purger.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| purger.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| purger.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `\"\"` |  |\n| purger.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| purger.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| purger.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` |  |\n| purger.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| purger.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| purger.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| purger.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `60` |  |\n| purger.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| purger.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| purger.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;scheme | string | `\"HTTP\"` |  |\n| purger.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;initialDelaySeconds | int | `120` |  |\n| purger.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;periodSeconds | int | `30` |  |\n| purger.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| purger.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `60` |  |\n| purger.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| querier.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `\"app.kubernetes.io/component\"` |  |\n| querier.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `\"In\"` |  |\n| querier.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `\"ingester\"` |  |\n| querier.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[1] | string | `\"querier\"` |  |\n| querier.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `\"kubernetes.io/hostname\"` |  |\n| querier.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` |  |\n| querier.&ZeroWidthSpace;annotations | object | `{}` |  |\n| querier.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior |\n| querier.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;enabled | bool | `false` | Creates a HorizontalPodAutoscaler for the querier pods. |\n| querier.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;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 |\n| querier.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;maxReplicas | int | `30` |  |\n| querier.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;minReplicas | int | `2` |  |\n| querier.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetCPUUtilizationPercentage | int | `80` |  |\n| querier.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetMemoryUtilizationPercentage | int | `0` |  |\n| querier.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| querier.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| querier.&ZeroWidthSpace;enabled | bool | `true` |  |\n| querier.&ZeroWidthSpace;env | list | `[]` |  |\n| querier.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| querier.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| querier.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| querier.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| querier.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| querier.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| querier.&ZeroWidthSpace;lifecycle | object | `{}` |  |\n| querier.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| querier.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| querier.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| querier.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;subPath | string | `nil` |  |\n| querier.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"8080\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| querier.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | string | `\"30%\"` |  |\n| querier.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| querier.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| querier.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| querier.&ZeroWidthSpace;replicas | int | `2` |  |\n| querier.&ZeroWidthSpace;resources | object | `{}` |  |\n| querier.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| querier.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| querier.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| querier.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `\"\"` | \"\" disables the individual serviceAccount and uses the global serviceAccount for that component |\n| querier.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| querier.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| querier.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| querier.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| querier.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| querier.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| querier.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` |  |\n| querier.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| querier.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| querier.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| querier.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| querier.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| querier.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `180` |  |\n| querier.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| querier.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `\"app.kubernetes.io/component\"` |  |\n| query_frontend.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `\"In\"` |  |\n| query_frontend.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `\"query-frontend\"` |  |\n| query_frontend.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `\"kubernetes.io/hostname\"` |  |\n| query_frontend.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` |  |\n| query_frontend.&ZeroWidthSpace;annotations | object | `{}` |  |\n| query_frontend.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| query_frontend.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| query_frontend.&ZeroWidthSpace;enabled | bool | `true` |  |\n| query_frontend.&ZeroWidthSpace;env | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| query_frontend.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;lifecycle | object | `{}` |  |\n| query_frontend.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| query_frontend.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| query_frontend.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| query_frontend.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;subPath | string | `nil` |  |\n| query_frontend.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"8080\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| query_frontend.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | string | `\"30%\"` |  |\n| query_frontend.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| query_frontend.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| query_frontend.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| query_frontend.&ZeroWidthSpace;replicas | int | `2` |  |\n| query_frontend.&ZeroWidthSpace;resources | object | `{}` |  |\n| query_frontend.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| query_frontend.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| query_frontend.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| query_frontend.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `\"\"` | \"\" disables the individual serviceAccount and uses the global serviceAccount for that component |\n| query_frontend.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| query_frontend.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| query_frontend.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| query_frontend.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` |  |\n| query_frontend.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| query_frontend.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| query_frontend.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| query_frontend.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| query_frontend.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| query_frontend.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `180` |  |\n| query_frontend.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| query_frontend.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `\"app.kubernetes.io/component\"` |  |\n| query_scheduler.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `\"In\"` |  |\n| query_scheduler.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `\"query-scheduler\"` |  |\n| query_scheduler.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `\"kubernetes.io/hostname\"` |  |\n| query_scheduler.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` |  |\n| query_scheduler.&ZeroWidthSpace;annotations | object | `{}` |  |\n| query_scheduler.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| query_scheduler.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| query_scheduler.&ZeroWidthSpace;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 |\n| query_scheduler.&ZeroWidthSpace;env | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| query_scheduler.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;lifecycle | object | `{}` |  |\n| query_scheduler.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| query_scheduler.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| query_scheduler.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| query_scheduler.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;subPath | string | `nil` |  |\n| query_scheduler.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"http-metrics\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| query_scheduler.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| query_scheduler.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| query_scheduler.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| query_scheduler.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| query_scheduler.&ZeroWidthSpace;replicas | int | `2` |  |\n| query_scheduler.&ZeroWidthSpace;resources | object | `{}` |  |\n| query_scheduler.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| query_scheduler.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| query_scheduler.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| query_scheduler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| query_scheduler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| query_scheduler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| query_scheduler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` |  |\n| query_scheduler.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| query_scheduler.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| query_scheduler.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| query_scheduler.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| query_scheduler.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| query_scheduler.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `180` |  |\n| query_scheduler.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| query_scheduler.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| ruler.&ZeroWidthSpace;affinity | object | `{}` |  |\n| ruler.&ZeroWidthSpace;annotations | object | `{}` |  |\n| ruler.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior |\n| ruler.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;enabled | bool | `false` | Creates a HorizontalPodAutoscaler for the ruler. |\n| ruler.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;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 |\n| ruler.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;maxReplicas | int | `30` |  |\n| ruler.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;minReplicas | int | `2` |  |\n| ruler.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetCPUUtilizationPercentage | int | `80` |  |\n| ruler.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetMemoryUtilizationPercentage | int | `80` |  |\n| ruler.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| ruler.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| ruler.&ZeroWidthSpace;directories | object | `{}` | allow configuring rules via configmap. ref: https://cortexproject.github.io/cortex-helm-chart/guides/configure_rules_via_configmap.html |\n| ruler.&ZeroWidthSpace;enabled | bool | `true` |  |\n| ruler.&ZeroWidthSpace;env | list | `[]` |  |\n| ruler.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| ruler.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| ruler.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| ruler.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| ruler.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| ruler.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| ruler.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| ruler.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| ruler.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| ruler.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"8080\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| ruler.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | string | `\"30%\"` |  |\n| ruler.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| ruler.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| ruler.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| ruler.&ZeroWidthSpace;replicas | int | `1` |  |\n| ruler.&ZeroWidthSpace;resources | object | `{}` |  |\n| ruler.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| ruler.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| ruler.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| ruler.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `\"\"` | \"\" disables the individual serviceAccount and uses the global serviceAccount for that component |\n| ruler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| ruler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| ruler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| ruler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| ruler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| ruler.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;defaultFolderName | string | `\"\"` | The default folder name, it will create a subfolder under the `folder` and put rules in there instead |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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. |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;enabled | bool | `false` | Enable sidecar that collect the configmaps with specified label and stores the included files them into the respective folders |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;folder | string | `\"/data/rules\"` | Folder where the files should be placed. |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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 |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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. |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;image.&ZeroWidthSpace;repository | string | `\"kiwigrid/k8s-sidecar\"` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;image.&ZeroWidthSpace;sha | string | `\"\"` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;image.&ZeroWidthSpace;tag | string | `\"2.7.3\"` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;imagePullPolicy | string | `\"IfNotPresent\"` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;label | string | `\"cortex_rules\"` | label that the configmaps with rules are marked with |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;labelValue | string | `\"\"` | The value for the label you want to filter your resources on. Don't set a value to filter by any value |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/healthz\"` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"sidecar-health\"` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;periodSeconds | int | `5` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;resource | string | `\"both\"` | The resource type that the operator will filter for. Can be configmap, secret or both |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;resources | object | `{}` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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. |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;skipTlsVerify | bool | `false` | Set to true to skip tls verification for kube api calls |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/healthz\"` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"sidecar-health\"` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;periodSeconds | int | `5` |  |\n| ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;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 |\n| ruler.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` |  |\n| ruler.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| ruler.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| ruler.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` |  |\n| ruler.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| ruler.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| ruler.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `180` |  |\n| ruler.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| ruler.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| ruler.&ZeroWidthSpace;validation.&ZeroWidthSpace;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. |\n| runtimeconfigmap.&ZeroWidthSpace;annotations | object | `{}` |  |\n| runtimeconfigmap.&ZeroWidthSpace;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. |\n| runtimeconfigmap.&ZeroWidthSpace;runtime_config | object | `{}` | https://cortexmetrics.io/docs/configuration/arguments/#runtime-configuration-file |\n| serviceAccount.&ZeroWidthSpace;annotations | object | `{}` |  |\n| serviceAccount.&ZeroWidthSpace;automountServiceAccountToken | bool | `true` |  |\n| serviceAccount.&ZeroWidthSpace;create | bool | `true` |  |\n| serviceAccount.&ZeroWidthSpace;name | string | `nil` |  |\n| store_gateway.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `\"app.kubernetes.io/component\"` |  |\n| store_gateway.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `\"In\"` |  |\n| store_gateway.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `\"store-gateway\"` |  |\n| store_gateway.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `\"kubernetes.io/hostname\"` |  |\n| store_gateway.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` |  |\n| store_gateway.&ZeroWidthSpace;annotations | object | `{}` |  |\n| store_gateway.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;behavior | object | `{}` | Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior |\n| store_gateway.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;enabled | bool | `false` |  |\n| store_gateway.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;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 |\n| store_gateway.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;maxReplicas | int | `30` |  |\n| store_gateway.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;minReplicas | int | `3` |  |\n| store_gateway.&ZeroWidthSpace;autoscaling.&ZeroWidthSpace;targetMemoryUtilizationPercentage | int | `80` |  |\n| store_gateway.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` |  |\n| store_gateway.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` |  |\n| store_gateway.&ZeroWidthSpace;enabled | bool | `true` |  |\n| store_gateway.&ZeroWidthSpace;env | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |\n| store_gateway.&ZeroWidthSpace;extraContainers | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;extraPorts | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;extraVolumeMounts | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;extraVolumes | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;initContainers | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;livenessProbe | object | `{}` |  |\n| store_gateway.&ZeroWidthSpace;nodeSelector | object | `{}` |  |\n| store_gateway.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;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/ |\n| store_gateway.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;annotations | object | `{}` | Store-gateway data Persistent Volume Claim annotations |\n| store_gateway.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;enabled | bool | `true` | If true Store-gateway will create/use a Persistent Volume Claim If false, use emptyDir |\n| store_gateway.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;retentionPolicy | object | `{}` | StatefulSetAutoDeletePVC feature https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention |\n| store_gateway.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;size | string | `\"2Gi\"` | Store-gateway data Persistent Volume size |\n| store_gateway.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;storageClass | string | `nil` | Store-gateway data Persistent Volume Storage Class If defined, storageClassName: <storageClass> 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. |\n| store_gateway.&ZeroWidthSpace;persistentVolume.&ZeroWidthSpace;subPath | string | `\"\"` | Subdirectory of Store-gateway data Persistent Volume to mount Useful if the volume's root directory is not empty |\n| store_gateway.&ZeroWidthSpace;podAnnotations | object | `{\"prometheus.io/port\":\"8080\",\"prometheus.io/scrape\":\"true\"}` | Pod Annotations |\n| store_gateway.&ZeroWidthSpace;podDisruptionBudget.&ZeroWidthSpace;maxUnavailable | int | `1` |  |\n| store_gateway.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |\n| store_gateway.&ZeroWidthSpace;podManagementPolicy | string | `\"OrderedReady\"` | https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies |\n| store_gateway.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| store_gateway.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| store_gateway.&ZeroWidthSpace;replicas | int | `1` |  |\n| store_gateway.&ZeroWidthSpace;resources | object | `{}` |  |\n| store_gateway.&ZeroWidthSpace;securityContext | object | `{}` |  |\n| store_gateway.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` |  |\n| store_gateway.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` |  |\n| store_gateway.&ZeroWidthSpace;serviceAccount.&ZeroWidthSpace;name | string | `\"\"` | \"\" disables the individual serviceAccount and uses the global serviceAccount for that component |\n| store_gateway.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` |  |\n| store_gateway.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` |  |\n| store_gateway.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |\n| store_gateway.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `60` |  |\n| store_gateway.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `\"/ready\"` |  |\n| store_gateway.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `\"http-metrics\"` |  |\n| store_gateway.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;scheme | string | `\"HTTP\"` |  |\n| store_gateway.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;initialDelaySeconds | int | `120` |  |\n| store_gateway.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;periodSeconds | int | `30` |  |\n| store_gateway.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `\"RollingUpdate\"` |  |\n| store_gateway.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `240` |  |\n| store_gateway.&ZeroWidthSpace;tolerations | list | `[]` |  |\n| store_gateway.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` |  |\n| useConfigMap | bool | `false` |  |\n| useExternalConfig | bool | `false` |  |\n\n"
  },
  {
    "path": "README.md.gotmpl",
    "content": "<!-- README.md is a generated file. Make any changes in README.md.gotmpl or values.yaml. -->\n\n{{ template \"chart.header\" . }}\n{{ template \"chart.deprecationWarning\" . }}\n\n{{ template \"chart.badgesSection\" . }}\n\n{{ template \"chart.description\" . }}\n\n{{ template \"chart.homepageLine\" . }}\n\n{{ template \"chart.maintainersSection\" . }}\n\n## Documentation\n\nCheckout our documentation for the cortex-helm-chart [here](https://cortexproject.github.io/cortex-helm-chart/)\n\n## Dependencies\n\n### Key-Value store\n\nCortex 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.\n\nThe recommended approach is to use the built-in memberlist as a KV store, where supported.\n\nExternal 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.\n\n### Storage\n\nCortex requires a storage backend to store metrics and indexes.\nSee [cortex documentation](https://cortexmetrics.io/docs/) for details on storage types and documentation\n\n## Installation\n\n[Helm](https://helm.sh) must be installed to use the charts.\nPlease refer to Helm's [documentation](https://helm.sh/docs/) to get started.\n\nOnce Helm is set up properly, add the repo as follows:\n\n```bash\n  helm repo add cortex-helm https://cortexproject.github.io/cortex-helm-chart\n```\n\nCortex can now be installed with the following command:\n\n```bash\n  helm install cortex --namespace cortex cortex-helm/cortex\n```\n\nIf you have custom options or values you want to override:\n\n```bash\n  helm install cortex --namespace cortex -f my-cortex-values.yaml cortex-helm/cortex\n```\n\nSpecific versions of the chart can be installed using the `--version` option, with the default being the latest release.\nWhat versions are available for installation can be listed with the following command:\n\n```bash\n  helm search repo cortex-helm\n```\n\nAs part of this chart many different pods and services are installed which all\nhave varying resource requirements. Please make sure that you have sufficient\nresources (CPU/memory) available in your cluster before installing Cortex Helm\nchart.\n\n\n## Upgrades\n\nTo upgrade Cortex use the following command:\n\n```bash\n  helm upgrade cortex -f my-cortex-values.yaml cortex-helm/cortex\n```\nNote that it might be necessary to use `--reset-values` since some default values in the values.yaml might have changed or were removed.\n\nSource code can be found [here](https://cortexmetrics.io/)\n\n{{ template \"chart.requirementsSection\" . }}\n\n\n{{ define \"chart.valuesTable\" }}\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n  {{- range .Values }}\n| {{ .Key | replace \".\" \".&ZeroWidthSpace;\" }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} |\n  {{- end }}\n{{ end }}\n\n{{ template \"chart.valuesSection\" . }}\n"
  },
  {
    "path": "ci/test-configmap-values.yaml",
    "content": "ingress:\n  enabled: true\n\nuseConfigMap: true\n\nconfig:\n  ingester:\n    lifecycler:\n      join_after: 30s\n      final_sleep: 30s\n      tokens_file_path: \"/data/tokens\"\n      ring:\n        replication_factor: 1\n        kvstore:\n          store: \"memberlist\"\n\n  blocks_storage:\n    backend: \"filesystem\"\n    tsdb:\n      dir: \"/data/tsdb\"\n    bucket_store:\n      sync_dir: \"/data/tsdb-sync\"\n    filesystem:\n      dir: \"/data/store\"\n\n  distributor:\n    ring:\n      kvstore:\n        store: memberlist\n\n  ruler:\n    ring:\n      kvstore:\n        store: memberlist\n\n  ruler_storage:\n    backend: \"filesystem\"\n    filesystem:\n      dir: \"/data/store\"\n\n  alertmanager_storage:\n    backend: \"filesystem\"\n    filesystem:\n      dir: \"/data/store\"\n\n  memberlist:\n    join_members:\n      - '{{ include \"cortex.fullname\" $ }}-memberlist'\n\ningester:\n  replicas: 1\n  autoscaling:\n    enabled: true\n    minReplicas: 1\n  statefulSet:\n    enabled: false\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\ncompactor:\n  replicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\ndistributor:\n  replicas: 1\n  autoscaling:\n    enabled: true\n    minReplicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nquerier:\n  replicas: 1\n  autoscaling:\n    enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nquery_frontend:\n  replicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nnginx:\n  replicas: 1\n  autoscaling:\n    enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n  config:\n    httpSnippet: |-\n      # http snippet\n    mainSnippet: |-\n      # main snippet\n    serverSnippet: |-\n      # server snippet\nruntimeconfigmap:\n  annotations:\n    foo: bar\nalertmanager:\n  replicas: 1\n  statefulSet:\n    enabled: false\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n  sidecar:\n    enabled: true\nruler:\n  replicas: 1\n  enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n  sidecar:\n    enabled: true\nstore_gateway:\n  startupProbe: null\n  replicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n\nmemcached-frontend:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\nmemcached-blocks:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\nmemcached-blocks-index:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\nmemcached-blocks-metadata:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\n"
  },
  {
    "path": "ci/test-deployment-values.yaml",
    "content": "ingress:\n  enabled: true\n\nconfig:\n  ingester:\n    lifecycler:\n      join_after: 30s\n      final_sleep: 30s\n      tokens_file_path: \"/data/tokens\"\n      ring:\n        replication_factor: 1\n        kvstore:\n          store: \"memberlist\"\n\n  blocks_storage:\n    backend: \"filesystem\"\n    tsdb:\n      dir: \"/data/tsdb\"\n    bucket_store:\n      sync_dir: \"/data/tsdb-sync\"\n    filesystem:\n      dir: \"/data/store\"\n\n  distributor:\n    ring:\n      kvstore:\n        store: memberlist\n\n  ruler:\n    ring:\n      kvstore:\n        store: memberlist\n\n  ruler_storage:\n    backend: \"filesystem\"\n    filesystem:\n      dir: \"/data/store\"\n\n  alertmanager_storage:\n    backend: \"filesystem\"\n    filesystem:\n      dir: \"/data/store\"\n\n  memberlist:\n    join_members:\n      - '{{ include \"cortex.fullname\" $ }}-memberlist'\n\ningester:\n  replicas: 1\n  autoscaling:\n    enabled: true\n    minReplicas: 1\n  statefulSet:\n    enabled: false\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\ncompactor:\n  replicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\ndistributor:\n  replicas: 1\n  autoscaling:\n    enabled: true\n    minReplicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nquerier:\n  replicas: 1\n  autoscaling:\n    enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nquery_frontend:\n  replicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nquery_scheduler:\n  replicas: 1\n  enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nnginx:\n  replicas: 1\n  autoscaling:\n    enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n  config:\n    httpSnippet: |-\n      # http snippet\n    mainSnippet: |-\n      # main snippet\n    serverSnippet: |-\n      # server snippet\nruntimeconfigmap:\n  annotations:\n    foo: bar\nalertmanager:\n  replicas: 3\n  statefulSet:\n    enabled: false\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n  sidecar:\n    enabled: true\nruler:\n  replicas: 1\n  enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n  sidecar:\n    enabled: true\nstore_gateway:\n  startupProbe: null\n  replicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n\nmemcached-frontend:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\nmemcached-blocks:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\nmemcached-blocks-index:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\nmemcached-blocks-metadata:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\n"
  },
  {
    "path": "ci/test-sts-values.yaml",
    "content": "ingress:\n  enabled: true\n\nconfig:\n  ingester:\n    lifecycler:\n      join_after: 30s\n      final_sleep: 30s\n      tokens_file_path: \"/data/tokens\"\n      ring:\n        replication_factor: 1\n        kvstore:\n          store: \"memberlist\"\n\n  blocks_storage:\n    backend: \"filesystem\"\n    tsdb:\n      dir: \"/data/tsdb\"\n    bucket_store:\n      sync_dir: \"/data/tsdb-sync\"\n    filesystem:\n      dir: \"/data/store\"\n\n  distributor:\n    ring:\n      kvstore:\n        store: memberlist\n\n  ruler:\n    ring:\n      kvstore:\n        store: memberlist\n\n  ruler_storage:\n    backend: \"filesystem\"\n    filesystem:\n      dir: \"/data/store\"\n\n  alertmanager_storage:\n    backend: \"filesystem\"\n    filesystem:\n      dir: \"/data/store\"\n\n  memberlist:\n    join_members:\n      - '{{ include \"cortex.fullname\" $ }}-memberlist'\n\ningester:\n  replicas: 1\n  autoscaling:\n    enabled: true\n    minReplicas: 1\n  statefulSet:\n    enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\ncompactor:\n  replicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\ndistributor:\n  replicas: 1\n  autoscaling:\n    enabled: true\n    minReplicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nquerier:\n  replicas: 1\n  autoscaling:\n    enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nquery_frontend:\n  replicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\nnginx:\n  replicas: 1\n  autoscaling:\n    enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n  config:\n    httpSnippet: |-\n      # http snippet\n    mainSnippet: |-\n      # main snippet\n    serverSnippet: |-\n      # server snippet\nruntimeconfigmap:\n  annotations:\n    foo: bar\nalertmanager:\n  replicas: 3\n  statefulSet:\n    enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n  sidecar:\n    enabled: true\nruler:\n  replicas: 1\n  enabled: true\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n  sidecar:\n    enabled: true\nstore_gateway:\n  startupProbe: null\n  replicas: 1\n  extraVolumes:\n    - name: tmp-test\n      emptyDir: {}\n  extraVolumeMounts:\n    - name: tmp-test\n      mountPath: /tmp-test\n\nmemcached-frontend:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\nmemcached-blocks:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\nmemcached-blocks-index:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\nmemcached-blocks-metadata:\n  enabled: true\n  architecture: standalone\n  replicaCount: 1\n  resources:\n    requests:\n      cpu: 0\n      memory: 0\n"
  },
  {
    "path": "ct.yaml",
    "content": "# See https://github.com/helm/chart-testing#configuration\nremote: origin\nvalidate-maintainers: false  # ct requires the maintainers to be a github name, which is not valid for this chart.\ncharts:\n  - \"./\"\nchart-repos:\n  - base-charts=https://charts.helm.sh/stable\n  - bitnami=https://charts.bitnami.com/bitnami\nhelm-extra-args: --timeout 600s\n"
  },
  {
    "path": "docs/.gitignore",
    "content": "_site\n.sass-cache\n.jekyll-cache\n.jekyll-metadata\nvendor\n"
  },
  {
    "path": "docs/404.html",
    "content": "---\npermalink: /404.html\nlayout: default\n---\n\n<style type=\"text/css\" media=\"screen\">\n  .container {\n    margin: 10px auto;\n    max-width: 600px;\n    text-align: center;\n  }\n  h1 {\n    margin: 30px 0;\n    font-size: 4em;\n    line-height: 1;\n    letter-spacing: -1px;\n  }\n</style>\n\n<div class=\"container\">\n  <h1>404</h1>\n\n  <p><strong>Page not found :(</strong></p>\n  <p>The requested page could not be found.</p>\n</div>\n"
  },
  {
    "path": "docs/Gemfile",
    "content": "source \"https://rubygems.org\"\n# Hello! This is where you manage which Jekyll version is used to run.\n# When you want to use a different version, change it below, save the\n# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:\n#\n#     bundle exec jekyll serve\n#\n# This will help ensure the proper Jekyll version is running.\n# Happy Jekylling!\n# gem \"jekyll\", \"~> 4.2.0\"\n# This is the default theme for new Jekyll sites. You may change this to anything you like.\ngem \"minima\", \"~> 2.5\"\n# If you want to use GitHub Pages, remove the \"gem \"jekyll\"\" above and\n# uncomment the line below. To upgrade, run `bundle update github-pages`.\ngem \"github-pages\",\"~> 228\", group: :jekyll_plugins\ngem \"just-the-docs\"\n# If you have any plugins, put them here!\ngroup :jekyll_plugins do\n  gem \"jekyll-feed\", \"~> 0.12\"\nend\n\n# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem\n# and associated library.\nplatforms :mingw, :x64_mingw, :mswin, :jruby do\n  gem \"tzinfo\", \"~> 2.0\"\n  gem \"tzinfo-data\"\nend\n\n# Performance-booster for watching directories on Windows\ngem \"wdm\", \"~> 0.1.1\", :platforms => [:mingw, :x64_mingw, :mswin]\n\n"
  },
  {
    "path": "docs/_config.yml",
    "content": "title: cortex-helm-chart\nemail: cortex-team@googlegroups.com\ndescription: >-\n  Cortex is a horizontally scalable, highly available, multi-tenant, long term Prometheus.\n  The cortex-helm-chart helps the operator with deploying cortex on a Kubernetes cluster.\ntwitter_username: CortexMetrics\ngithub_username: cortexproject\n\n# Build settings\nremote_theme: pmarsceill/just-the-docs\n# color_scheme: \"dark\"\n\nfooter_content: \"Copyright &copy; 2022 cortexproject. Distributed by an <a href=\\\"https://github.com/cortexproject/cortex-helm-chart/blob/master/LICENSE\\\">Apache License 2.0.</a>\"\n"
  },
  {
    "path": "docs/_layouts/home.html",
    "content": "---\nlayout: default\n---\n{{ content }}"
  },
  {
    "path": "docs/_layouts/page.html",
    "content": "---\nlayout: default\n---\n{{ content }}"
  },
  {
    "path": "docs/development/developing_the_docs.md",
    "content": "---\nlayout: page\ntitle: Working with the cortex-helm-chart docs\nparent: Development\nhas_children: false\nhas_toc: false\n---\n# Working with the cortex-helm-chart docs\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. TOC\n{:toc}\n\n---\n# Setup\n\nThe 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.\n\n# Preview\n\nAfter installing ruby and bundle. Simply change into the `/docs` folder of the cortex-helm-chart and run:\n\n```\nbundle exec jekyll serve --incremental --livereload\n```\n\nFor further options you can consult `bundle exec jekyll serve --help`"
  },
  {
    "path": "docs/development.md",
    "content": "---\nlayout: page\ntitle: Development\nnav_order: 3\nhas_children: true\npermalink: /docs/development\n---\n# Development\n{: .no_toc }\n\nTutorials on how to develop the chart locally\n{: .fs-6 .fw-300 }"
  },
  {
    "path": "docs/guides/configure_configmap.markdown",
    "content": "---\nlayout: page\ntitle: Configuring Cortex with configmap\nparent: Guides\nhas_children: false\nhas_toc: false\n---\n# Configuring Cortex with configmap\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. TOC\n{:toc}\n\n---\n# Configuring Cortex with configmap\n\nBy default, cortex configuration is managed using a `Secret`. To use a `ConfigMap` instead, set **useConfigMap**:\n\n{% raw %}\n```yaml\nuseConfigMap: true\n```\n{% endraw %}\n\nNote: 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.\n"
  },
  {
    "path": "docs/guides/configure_memberlist.markdown",
    "content": "---\nlayout: page\ntitle: Configure memberlist\nparent: Guides\nhas_children: false\nhas_toc: false\n---\n# Configure memberlist\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. TOC\n{:toc}\n\n---\n# Setup\n\nThe 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/)\n\nFor example:\n\n```yaml\n[...]\nkvstore:\n    store: \"memberlist\"\n```\n"
  },
  {
    "path": "docs/guides/configure_memcached.markdown",
    "content": "---\nlayout: page\ntitle: Configure memcached\nparent: Guides\nhas_children: false\nhas_toc: false\n---\n# Configuring memcached as the caching store\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. TOC\n{:toc}\n\n---\n# Configuring memcached as the caching store\n\nCorrectly configuring memcached for your needs is a very delicate  task. But courtesy of [@thobianchi](https://github.com/thobianchi) this might be a good start.\n\n{% raw %}\n```yaml\nindex_cache:\n  backend: memcached\n  memcached:\n    addresses: 'dns+{{ include \"cortex.fullname\" $ }}-memcached-blocks-index:11211'\n    timeout: 300ms\n    max_idle_connections: 750\n    max_async_concurrency: 100\n    max_async_buffer_size: 10000000\n    max_get_multi_concurrency: 750\n    max_get_multi_batch_size: 1000\n    max_item_size: 16777216\nchunks_cache:\n  backend: memcached\n  memcached:\n    addresses: 'dns+{{ include \"cortex.fullname\" $ }}-memcached-blocks:11211'\n    timeout: 300ms\n    max_idle_connections: 750\n    max_async_concurrency: 100\n    max_async_buffer_size: 10000000\n    max_get_multi_concurrency: 750\n    max_get_multi_batch_size: 1000\n    max_item_size: 33554432\nmetadata_cache:\n  backend: memcached\n  memcached:\n    addresses: 'dns+{{ include \"cortex.fullname\" $ }}-blocks-metadata:11211'\n    timeout: 300ms\n    max_idle_connections: 750\n    max_async_concurrency: 100\n    max_async_buffer_size: 10000000\n    max_get_multi_concurrency: 750\n    max_get_multi_batch_size: 1000\n    max_item_size: 16777216\n```\n{% endraw %}\n"
  },
  {
    "path": "docs/guides/configure_ruler_and_alertmanager_with_configmap.markdown",
    "content": "---\nlayout: page\ntitle: Configure Ruler and Alertmanager with configmap\nparent: Guides\nhas_children: false\nhas_toc: false\n---\n# Configure Ruler and Alertmanager with configmap\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. TOC\n{:toc}\n\n---\n# Preface\n\nCortex's Ruler and Alertmanager can be setup to use ConfigMaps to provide themselves with a configuration that can be dynamically updated.\nWe 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.\nThe containers are also constantly polling for changes to the ConfigMaps. If any changes are found, the configuration file on the container will be updated.\n\nIt should be noted that this guide is assuming that multi-tenancy is enabled :\n```yaml\nauth_enabled: true\n```\n# Setup\n\nIn order to get this working, we must do a couple things.\n\n## Create Ruler ConfigMap\n\nTo 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.\n\n**IMPORTANT** things to note:\n\n- This ruleset is ONLY for tenantfoo (We will explicitly map it to tenantfoo later).\n- 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.\n- [Prometheus recording rules](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/) are also configured here in the same way as alerting rules.\n\n```yaml\nkind: ConfigMap\nmetadata:\n  name: tenantfoo-ruler-config\n  namespace: cortex\napiVersion: v1\ndata:\n  tenantfoo.yaml: |-\n    groups:\n      - name: <group name>\n        rules:\n          - alert: <alert name>\n            expr: <promql expression>\n            for: <duration>\n            labels:\n              severity: <severity>\n            annotations:\n              description: <description>\n          <remainder of alerts...>\n```\n\n## Create Alertmanager ConfigMap\n\nTo 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.\n\n**IMPORTANT** things to note:\n\n- 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.\n- 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.\n\n```yaml\nkind: ConfigMap\nmetadata:\n  name: tenantfoo-alertmanager-config\n  namespace: cortex\napiVersion: v1\ndata:\n  tenantfoo.yaml: |\n    global:\n      resolve_timeout: <duration>\n      http_config: {}\n      smtp_from: ExamplePerson <exampleperson@example.com>\n      smtp_hello: example.com\n      smtp_smarthost: example-smtp.example.com\n    route:\n      receiver: team-X-mails\n      group_by: ['alertname']\n      group_wait: <duration>\n      group_interval: <duration>\n      repeat_interval: <duration>\n    receivers:\n    - name: 'team-X-mails'\n      email_configs:\n      - to: 'example@example.com'\n```\n\n## Helm Chart Configuration\n\nNow that the ConfigMaps are created, we can tinker the helm chart to achieve our goal.\n\n### Configuration for Ruler and Alertmanager Config\nAdd this to the `values.yaml` under the `config` section as shown.\n\n```yaml\nconfig:\n  ruler:\n    enable_api: true\n    # already set-up temporary emptyDir volume. Cortex will parse rules from /data/rules\n    # and copy them here for prometheus rule evaluation\n    rule_path: /rules\n\n  ruler_storage:\n    backend: \"local\"\n    local:\n      # where your mounted configmap data will be temporary stored\n      directory: /data/rules\n\n  alertmanager:\n    enable_api: true\n    # temporary volume if not using stateful alertmanagers\n    data_dir: /data\n\n  alertmanager_storage:\n    backend: \"local\"\n    local:\n      # temporary volume if not using stateful alertmanagers\n      path: /data\n```\n\n### Configuration for Ruler and Alertmanager\nAdd this to the `values.yaml`.\nNote 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`.\nAlso 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.\n\n```yaml\nruler:\n  extraVolumes:\n    - configMap:\n        defaultMode: 420\n        name: tenantfoo-ruler-config\n      name: tenantfoo-ruler-config\n  extraVolumeMounts:\n    - name: tenantfoo-ruler-config\n      mountPath: /data/rules/tenantfoo\nalertmanager:\n  extraVolumes:\n    - configMap:\n        defaultMode: 420\n        name: tenantfoo-alertmanager-config\n      name: tenantfoo-alertmanager-config\n  extraVolumeMounts:\n    - name: tenantfoo-alertmanager-config\n      mountPath: /data/tenantfoo\n```\n\n# Result\n\nYou can now install the helm chart.\n\nYou may use the section below to verify the configuration went according to plan.\n\n### Verify Alertmanager\n\n1. Port-forward the alertmanager pod\n2. Run `curl -X GET -H \"X-Scope-OrgID: <name of tenant>\" localhost:8080/api/v1/alerts`\n3. Verify the correct configuration shows up\n\n### Verify Ruler\n\n1. Port-forward the ruler pod\n2. Run `curl -X GET -H \"X-Scope-OrgID: <name of tenant>\" localhost:8080/api/v1/rules`\n3. Verify the correct configuration shows up\n\n# Moving forward\n\nYou 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.\n\nDefining 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:\n\n1. Create another set of ConfigMaps for the new tenants, being sure to adhere to the naming policies stated in this guide\n\n2. 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\n\n3. [Verify the new tenant is configured](#result)"
  },
  {
    "path": "docs/guides/configure_rules_via_configmap.markdown",
    "content": "---\nlayout: page\ntitle: Configure rules via configmap\nparent: Guides\nhas_children: false\nhas_toc: false\n---\n# Configure rules via configmap\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. TOC\n{:toc}\n\n---\n# Configure rules via configmap\n\nIn your cortex-helm-chart you can now specify a static configuration of ruler rules. \n\n```yaml\nruler:\n  directories:\n    tenant_foo:\n      rules1.txt: |\n        groups:\n          - name: should_fire\n            rules:\n              - alert: HighPercentageError\n                expr: |\n                  sum(rate({app=\"foo\", env=\"production\"} |= \"error\" [5m])) by (job)\n                    /\n                  sum(rate({app=\"foo\", env=\"production\"}[5m])) by (job)\n                    > 0.05\n                for: 10m\n                labels:\n                  severity: warning\n                annotations:\n                  summary: High error rate\n```"
  },
  {
    "path": "docs/guides/configure_rules_via_sidecar.markdown",
    "content": "---\nlayout: page\ntitle: Configure rules via sidecar\nparent: Guides\nhas_children: false\nhas_toc: false\n---\n# Configure rules via sidecar\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. TOC\n{:toc}\n\n---\n# Rules and AlertManager configuration\nCortex 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).\nPut 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.\nThis feature is disabled by default. Here is a simple example:\n\nPlease 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:\n- local alertmanager config storage is read-only (cortex API is severely limited to read-only requests)\n- local alertmanager storage does not support state persistency (however your configurations are saved in etcd via kubernetes)\n- local ruler storage does not support RuleGroups\n- local ruler storage does not support namespaces\n\n[^1]: Also referenced here as the sidecar. Effectively the sidecar is an image which is an kubernetes operator.\n\n## Helm values config\n\n```yaml\nruler:\n  sidecar:\n    enabled: true\n    searchNamespace: cortex-rules\n\nalertmanager:\n  sidecar:\n    enabled: true\n    searchNamespace: cortex-alertmanager\n```\nAnd here are the related configuration values in AlertManager and Ruler:\n```yaml\nconfig:\n  ruler:\n    enable_api: true\n    # already set-up temporary emptyDir volume. Cortex will parse rules from /data/rules\n    # and copy them here for prometheus rule evaluation\n    rule_path: /rules\n\n  ruler_storage:\n    backend: \"local\"\n    local:\n      # temporary volume of type emptyDir\n      directory: /data/rules\n\n  alertmanager:\n    enable_api: true\n    # temporary volume if not using stateful alertmanagers\n    data_dir: /data\n\n  alertmanager_storage:\n    backend: \"local\"\n    local:\n      # temporary volume if not using stateful alertmanagers\n      path: /data\n```\n\n## Creating alerting/recording rules and alertmanager configs\n\nIn AlertManager, the `data_dir` and local storage directory should be the same.\nIn 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).\nExample ConfigMap containing an alerting rule:\n\n{% raw %}\n```yaml\nkind: ConfigMap\nmetadata:\n  annotations:\n    # Override destination folder so we can save the config under /data/rules/<TENANT>/tenantfoo.yaml\n    k8s-sidecar-target-directory: /data/rules/tenantfoo\n  labels:\n    # Label cortex_rules must exist unless overridden by ruler.sidecar.label\n    cortex_rules: \"1\"\n  name: rules-cortex-9f99md47tc\n  namespace: cortex-rules\napiVersion: v1\ndata:\n  tenantfoo.yaml: |-\n    groups:\n      - name: tenantfoo-system-metrics\n        rules:\n          - alert: HighCPUUsage\n            expr: avg(100 - rate(node_cpu_seconds_total{instance=~\"qag1ge1l.+\",mode=\"idle\"}[5m]) * 100) by (instance) > 100\n            for: 3m\n            labels:\n              severity: warning\n            annotations:\n              description: Metrics from {{ $labels.job }} on {{ $labels.instance }} show CPU > 90% for 3m.\n              title: Node {{ $labels.instance }} has high CPU usage\n\n```\n{% endraw %}\n\nExample ConfigMap containing an alertmanager-config:\n\n```yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  annotations:\n    k8s-sidecar-target-directory: /data/tenantfoo\n  labels:\n    cortex_alertmanager: \"1\"\n  name: alertmanager-example-config\ndata:\n  tenantfoo.yaml: |-\n    global:\n      resolve_timeout: 5m\n      http_config: {}\n      smtp_hello: localhost\n      smtp_require_tls: true\n    route:\n      receiver: team-X-mails\n      group_by:\n      - alertname\n      routes:\n      - receiver: \"null\"\n        match:\n          alertname: Watchdog\n      group_wait: 30s\n      group_interval: 5m\n      repeat_interval: 12h\n    receivers:\n    - name: 'team-X-mails'\n      email_configs:\n      - to: 'team-X+alerts@example.org'\n```"
  },
  {
    "path": "docs/guides/getting_started_with_block_storage.markdown",
    "content": "---\nlayout: page\ntitle: Getting started with block storage\nparent: Guides\nhas_children: false\nhas_toc: false\nnav_order: 1\n---\n# Getting started with block storage\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. TOC\n{:toc}\n\n---\n# Getting Started\n\nA quick example configuration on how to get started with block storage can be found here\n\n```yaml\n# This file provides helm values to configure Cortex for blocks storage on AWS S3.\n# Be sure to edit region, endpoint, and bucket_name for your environment.\nconfig:\n  alertmanager_storage:\n    s3:\n      bucket_name: # your bucket name\n      region: us-east-1\n      endpoint: s3.us-east-1.amazonaws.com\n  blocks_storage:\n    backend: s3\n    s3:\n      bucket_name: # your bucket name\n      region: us-east-1\n      # -- The S3 bucket endpoint. It could be an AWS S3 endpoint listed at\n      # https://docs.aws.amazon.com/general/latest/gr/s3.html or the address of an\n      # S3-compatible service in hostname:port format.\n      endpoint: s3.us-east-1.amazonaws.com\n    bucket_store:\n      sync_dir: \"/data\"\n    tsdb:\n      dir: \"/data\"\n  querier:\n    # -- Comma separated list of store-gateway addresses in DNS Service Discovery\n    # format. This option should be set when using the blocks storage and the\n    # store-gateway sharding is disabled (when enabled, the store-gateway instances\n    # form a ring and addresses are picked from the ring).\n    store_gateway_addresses: dns+cortex-store-gateway-headless.cortex.svc:9095\n  ruler_storage:\n    s3:\n      bucket_name: # your bucket name\n      region: us-east-1\n      endpoint: s3.us-east-1.amazonaws.com\n```\n"
  },
  {
    "path": "docs/guides/upgrade-v1.markdown",
    "content": "---\nlayout: page\ntitle: Upgrading to chart version v1.0.0\nparent: Guides\nhas_children: false\nhas_toc: false\n---\n# Upgrading to chart version v1.0.0\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. TOC\n{:toc}\n\n---\n# Upgrading to chart version v1.0.0\n\ncortex-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.\n\nThis 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.\n\n## Migrating to Memberlist\n\nThe default kvstore changed from `consul` to `memberlist`. Migrating from one kvstore to another requires either downtime or a multi-stage process.\n\n### Downtime\n\nIf 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`.\n\n### Multi KV\n\nCortex 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\n\nAssuming you have an existing installation of cortex-helm-chart v0.6.0, here is an example of how to convert it to `memberlist`.\n#### Stage 1 - mirror to both kvstores\n\n_Be sure to augment this command with any other options you used for the initial installation._\n```\nhelm upgrade cortex cortex-helm/cortex --version 0.6.0 -f kvstore-mirror.yaml\n```\n\nkvstore-mirror.yaml:\n```yaml\nconfig:\n  alertmanager:\n    sharding_ring:\n      kvstore: &kvstore\n        store: multi\n        multi:\n          primary: consul\n          secondary: memberlist\n          mirror_enabled: true\n  compactor:\n    sharding_ring:\n      kvstore: *kvstore\n  distributor:\n    ring:\n      kvstore: *kvstore\n  ingester:\n    lifecycler:\n      ring:\n        kvstore: *kvstore\n  store_gateway:\n    sharding_ring:\n      kvstore: *kvstore\n```\n\n#### Stage 2 - use runtime config to make memberlist the primary\n\n_Be sure to augment this command with any other options you used for the initial installation._\n```\nhelm upgrade cortex cortex-helm/cortex --version 0.6.0 -f kvstore-mirror.yaml -f kvstore-runtime.yaml\n```\n\nkvstore-runtime.yaml:\n```yaml\nruntimeconfigmap:\n  runtime_config:\n    multi_kv_config:\n      mirror_enabled: false\n      primary: memberlist\n```\n\n#### Stage 3 - disable consul\n\n_Be sure to augment this command with any other options you used for the initial installation._\n```\nhelm upgrade cortex cortex-helm/cortex --version 0.6.0 -f kvstore-memberlist.yaml\n```\n\nkvstore-memberlist.yaml:\n```yaml\nconfig:\n  alertmanager:\n    sharding_ring:\n      kvstore: &kvstore\n        store: memberlist\n  compactor:\n    sharding_ring:\n      kvstore: *kvstore\n  distributor:\n    ring:\n      kvstore: *kvstore\n  ingester:\n    lifecycler:\n      ring:\n        kvstore: *kvstore\n  store_gateway:\n    sharding_ring:\n      kvstore: *kvstore\n```\n\n## Migrate from chucks to block storage\n\nhttps://cortexmetrics.io/docs/blocks-storage/migrate-cortex-cluster-from-chunks-to-blocks/\n"
  },
  {
    "path": "docs/guides.md",
    "content": "---\nlayout: page\ntitle: Guides\nnav_order: 2\nhas_children: true\nhas_toc: true\npermalink: /docs/guides\n---\n# Guides\n{: .no_toc }\n\nGuides & Best-Practices on how to configure the cortex-helm-chart.\n{: .fs-6 .fw-300 }"
  },
  {
    "path": "docs/index.markdown",
    "content": "---\nlayout: home\ntitle: Home\nnav_order: 1\ndescription: \"Horizontally scalable, highly available, multi-tenant, long term Prometheus.\"\npermalink: /\n---\n\n# Welcome\n<img src=\"https://cortexmetrics.io/images/cortex-horizontal.svg\" alt=\"Cortex Logo\"\n     style=\"display: block; margin-left: auto; magin-right: auto\" />\nThis is the official cortex-helm-chart documentation. Here you can find Guides & Best-Practices on How-To setup cortex.\n\n---\n## About the project\n\nCortex 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.\n\nFollow our socials:\n* [Twitter](https://twitter.com/CortexMetrics)\n\nJoin us on Slack:\n* [Slack](https://cloud-native.slack.com/?redir=%2Fmessages%2Fcortex%2F)\n\n### License\n\ncortex-helm-chart is distributed by an [Apache License 2.0](https://github.com/cortexproject/cortex-helm-chart/blob/master/LICENSE).\n\n### Contributing\n\nWhen 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).\n\n#### Thank you to the contributors of cortex-helm-chart!\n\n<ul class=\"list-style-none\">\n{% for contributor in site.github.contributors %}\n  <li class=\"d-inline-block mr-1\">\n     <a href=\"{{ contributor.html_url }}\"><img src=\"{{ contributor.avatar_url }}\" width=\"32\" height=\"32\" alt=\"{{ contributor.login }}\"/></a>\n  </li>\n{% endfor %}\n</ul>"
  },
  {
    "path": "docs/index.yaml",
    "content": "apiVersion: v1\nentries:\n  cortex:\n  - apiVersion: v2\n    appVersion: v1.21.0\n    created: \"2026-05-21T01:14:12.921801856Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-parquet-labels\n      condition: memcached-parquet-labels.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: d78913504745162e5c7165b17e19ec7b6da931865de191bcc9c7cac2804131d8\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: niclas.schad@stackit.cloud\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-3.3.1.tgz\n    version: 3.3.1\n  - apiVersion: v2\n    appVersion: v1.21.0\n    created: \"2026-05-21T01:14:12.914049046Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-parquet-labels\n      condition: memcached-parquet-labels.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 6c70fc5005db876972c133ff3219e581bd67e5d0f5ea83dc9f5f1a92b6916df4\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: niclas.schad@stackit.cloud\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-3.3.0.tgz\n    version: 3.3.0\n  - apiVersion: v2\n    appVersion: v1.20.1\n    created: \"2026-05-21T01:14:12.906110823Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: a7486f58f7d9a18e99cf681575a0114e617b4e82be28c24acc843163f0ca7406\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: niclas.schad@stackit.cloud\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-3.2.1.tgz\n    version: 3.2.1\n  - apiVersion: v2\n    appVersion: v1.20.1\n    created: \"2026-05-21T01:14:12.898615686Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: eb8f8c762478d5208fe12b23df18a18ec450a1ed93ed6112c3ebf9d235a5010d\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: niclas.schad@stackit.cloud\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-3.2.0.tgz\n    version: 3.2.0\n  - apiVersion: v2\n    appVersion: v1.20.1\n    created: \"2026-05-21T01:14:12.891236544Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: e9361694cfc519a3a74a467d91ab603f3e48444f51e5174bb62ac061c76c976e\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: niclas.schad@stackit.cloud\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-3.1.0.tgz\n    version: 3.1.0\n  - apiVersion: v2\n    appVersion: v1.20.0\n    created: \"2026-05-21T01:14:12.884627897Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: d530351308ec7d6dc5de8499083b6a9c95f4415a75efc5958935b6fedfd9929d\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: niclas.schad@stackit.cloud\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-3.0.0.tgz\n    version: 3.0.0\n  - apiVersion: v2\n    appVersion: v1.19.0\n    created: \"2026-05-21T01:14:12.877391415Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.14.0\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 0b78c77ae81f05530ba63209ab5e95c5755cb7a9d72f312651717b01390fa9cc\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: niclas.schad@stackit.cloud\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-2.6.0.tgz\n    version: 2.6.0\n  - apiVersion: v2\n    appVersion: v1.18.1\n    created: \"2026-05-21T01:14:12.870212303Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 4d42accac9056999338a4b599a39bcaf62df0859d1288f0718ad0df7d7e2b95e\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: niclas.schad@stackit.cloud\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-2.5.0.tgz\n    version: 2.5.0\n  - apiVersion: v2\n    appVersion: v1.17.1\n    created: \"2026-05-21T01:14:12.864102457Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: e2f16f77fa728ef78535d2392103f4566ba0d0111d1a3e22f06883bebcec3ec6\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-2.4.0.tgz\n    version: 2.4.0\n  - apiVersion: v2\n    appVersion: v1.16.0\n    created: \"2026-05-21T01:14:12.857289332Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 8d0f0ba40732f7b1b6bb2ed632f6ae41e096557119e6aab5ffb18bae0a1f6a07\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-2.3.0.tgz\n    version: 2.3.0\n  - apiVersion: v2\n    appVersion: v1.16.0\n    created: \"2026-05-21T01:14:12.850510759Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 8cdc1eab1131ac3d3dca5c211b2ec0eef1350c79bcdef895753210cff02871a0\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-2.2.0.tgz\n    version: 2.2.0\n  - apiVersion: v2\n    appVersion: v1.14.1\n    created: \"2026-05-21T01:14:12.844205638Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.12\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 5fcc5e224c00958879a191937cebc293c4b589c32972fed9a0b16c9543df90a0\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-2.1.0.tgz\n    version: 2.1.0\n  - apiVersion: v2\n    appVersion: v1.14.1\n    created: \"2026-05-21T01:14:12.837488243Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.3\n    - alias: memcached-blocks-index\n      condition: memcached-blocks-index.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.3\n    - alias: memcached-blocks\n      condition: memcached-blocks.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.3\n    - alias: memcached-blocks-metadata\n      condition: memcached-blocks-metadata.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.3\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 882f4610c9e3feb3f08b9d29ec3052ec8139413321bfd7f6820b81076c21bda9\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-2.0.1.tgz\n    version: 2.0.1\n  - apiVersion: v2\n    appVersion: v1.14.0\n    created: \"2026-05-21T01:14:12.830634066Z\"\n    dependencies:\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.2\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.2\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.2\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 6.3.2\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: f2d054751936c8d2d32948cbc6ac462334bc8a8ca08ebc1c14a668745b07aaad\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-2.0.0.tgz\n    version: 2.0.0\n  - apiVersion: v2\n    appVersion: v1.13.0\n    created: \"2026-05-21T01:14:12.823777896Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: d33816711a3a4535313c633374a24ee5a02b8cc6d7c1a2af6788fd7016651575\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.7.0.tgz\n    version: 1.7.0\n  - apiVersion: v2\n    appVersion: v1.11.1\n    created: \"2026-05-21T01:14:12.817564303Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 6d4f643081754d21e6b0b260c42a4a7aa8277963f9489decd05d9be9815b80fa\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.6.0.tgz\n    version: 1.6.0\n  - apiVersion: v2\n    appVersion: v1.11.1\n    created: \"2026-05-21T01:14:12.810791193Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: dea0406b03fb33581127038b91fa69a1ec2cfb5221f89841da93485b3e704978\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.5.1.tgz\n    version: 1.5.1\n  - apiVersion: v2\n    appVersion: v1.11.1\n    created: \"2026-05-21T01:14:12.804163918Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: bff7b1439f5fad8b395b0402099d7d8a93e70072ba88ec80730de7e2ff67ebba\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.5.0.tgz\n    version: 1.5.0\n  - apiVersion: v2\n    appVersion: v1.11.1\n    created: \"2026-05-21T01:14:12.798422806Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 93e1b41b19a8c4c66a46edff09fb4d38e3c007529df26816caaadeb90f9081cf\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.4.0.tgz\n    version: 1.4.0\n  - apiVersion: v2\n    appVersion: v1.11.0\n    created: \"2026-05-21T01:14:12.792033589Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.14\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.14\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 5fbcb04f7a6396430eea431aef58bfcde95c9a58da4468338b0f0e4ac1f983a7\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@mail.schwarz\n      name: Niclas Schad\n      url: https://github.com/nschad\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.3.0.tgz\n    version: 1.3.0\n  - apiVersion: v2\n    appVersion: v1.11.0\n    created: \"2026-05-21T01:14:12.785889647Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.12\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.12\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.12\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.12\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.12\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.12\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.12\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: deec676a2931bea6e777384f67fcc88b707014a482c13df92dc6a48351fb59ec\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@plusserver.com\n      name: Niclas Schad\n      url: https://github.com/ShuzZzle\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.2.0.tgz\n    version: 1.2.0\n  - apiVersion: v2\n    appVersion: v1.10.0\n    created: \"2026-05-21T01:14:12.78012526Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.9\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.9\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.9\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.9\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.9\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.9\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.9\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: b6e8db75efc9a2f0beab49f39e672cbe2176597927c007ca362e1b66d851002c\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@plusserver.com\n      name: Niclas Schad\n      url: https://github.com/ShuzZzle\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.1.0.tgz\n    version: 1.1.0\n  - apiVersion: v2\n    appVersion: v1.10.0\n    created: \"2026-05-21T01:14:12.773197377Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.8\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.8\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.8\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.8\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.8\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.8\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.8\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 982cc50648ec7120536e21a9a6b6e9dfa357fa607bb7da91e86e0964821c704d\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@plusserver.com\n      name: Niclas Schad\n      url: https://github.com/ShuzZzle\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.0.1.tgz\n    version: 1.0.1\n  - apiVersion: v2\n    appVersion: v1.10.0\n    created: \"2026-05-21T01:14:12.7665988Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.8\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.8\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.8\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.8\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.8\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.8\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.8\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: acbd37df2d268072adb0650b0016e0a9779e893d54ce2acd380ff95c3d85af96\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@plusserver.com\n      name: Niclas Schad\n      url: https://github.com/ShuzZzle\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-1.0.0.tgz\n    version: 1.0.0\n  - apiVersion: v2\n    appVersion: v1.10.0\n    created: \"2026-05-21T01:14:12.76036035Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.4\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.4\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.4\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.15.4\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.4\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.4\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.15.4\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: 04835dd68822bf7cfa062258eceffc71ed6a756627252c33565935584a3a6a38\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: thayward@infoblox.com\n      name: Tom Hayward\n      url: https://github.com/kd7lxl\n    - email: Niclas.Schad@plusserver.com\n      name: Niclas Schad\n      url: https://github.com/ShuzZzle\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-0.7.0.tgz\n    version: 0.7.0\n  - apiVersion: v2\n    appVersion: v1.9.0\n    created: \"2026-05-21T01:14:12.753951208Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.13.0\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.13.0\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.13.0\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.13.0\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.13.0\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.13.0\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.13.0\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: f56085791d745403dc72f855e3236f190ee24fa9feb152ff89fa1c01e06d3e8a\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: cortex-team@googlegroups.com\n      name: Cortex Maintainers\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-0.6.0.tgz\n    version: 0.6.0\n  - apiVersion: v2\n    appVersion: v1.9.0\n    created: \"2026-05-21T01:14:12.748734726Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.5.1\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.5.1\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.5.1\n    description: Horizontally scalable, highly available, multi-tenant, long term\n      Prometheus.\n    digest: e0e77c0ad09b3f1e56e6d13ab1382f95ac32ea1d56944597f94bdacbe8fdf3d2\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.19.0-0\n    maintainers:\n    - email: cortex-team@googlegroups.com\n      name: Cortex Maintainers\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-0.5.0.tgz\n    version: 0.5.0\n  - apiVersion: v2\n    appVersion: v1.7.0\n    created: \"2026-05-21T01:14:12.744167181Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.5.1\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.5.1\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.5.1\n    description: Cortex\n    digest: 24973d79321a31304380317444648f5c00d89759fae3bcb7ac7120d1d86e3816\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.10.0-0\n    maintainers:\n    - email: cortex-team@googlegroups.com\n      name: Cortex Maintainers\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-0.4.1.tgz\n    version: 0.4.1\n  - apiVersion: v2\n    appVersion: v1.7.0\n    created: \"2026-05-21T01:14:12.739906718Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      version: 5.5.1\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.5.1\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.5.1\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.bitnami.com/bitnami\n      tags:\n      - blocks-storage-memcached\n      version: 5.5.1\n    description: Cortex\n    digest: f08f403a75fb08226aaebc74fbec3c154541a6de1b9ffba5534d2d09829ed700\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.10.0-0\n    maintainers:\n    - email: cortex-team@googlegroups.com\n      name: Cortex Maintainers\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-0.4.0.tgz\n    version: 0.4.0\n  - apiVersion: v2\n    appVersion: v1.6.0\n    created: \"2026-05-21T01:14:12.736264135Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://charts.helm.sh/stable\n      version: 3.2.3\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://charts.helm.sh/stable\n      version: 3.2.3\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://charts.helm.sh/stable\n      version: 3.2.3\n    - alias: memcached-frontend\n      condition: memcached-frontend.enabled\n      name: memcached\n      repository: https://charts.helm.sh/stable\n      version: 3.2.3\n    - alias: memcached-blocks-index\n      name: memcached\n      repository: https://charts.helm.sh/stable\n      tags:\n      - blocks-storage-memcached\n      version: 3.2.3\n    - alias: memcached-blocks\n      name: memcached\n      repository: https://charts.helm.sh/stable\n      tags:\n      - blocks-storage-memcached\n      version: 3.2.3\n    - alias: memcached-blocks-metadata\n      name: memcached\n      repository: https://charts.helm.sh/stable\n      tags:\n      - blocks-storage-memcached\n      version: 3.2.3\n    description: Cortex\n    digest: 9436f5dd360d8b6daf738cd487e8095a22b27e2312a06947dd0d6ac6b9621e83\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.10.0-0\n    maintainers:\n    - email: cortex-team@googlegroups.com\n      name: Cortex Maintainers\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-0.3.0.tgz\n    version: 0.3.0\n  - apiVersion: v2\n    appVersion: v1.4.0\n    created: \"2026-05-21T01:14:12.732461191Z\"\n    dependencies:\n    - alias: memcached\n      condition: memcached.enabled\n      name: memcached\n      repository: https://kubernetes-charts.storage.googleapis.com/\n      version: 3.2.3\n    - alias: memcached-index-read\n      condition: memcached-index-read.enabled\n      name: memcached\n      repository: https://kubernetes-charts.storage.googleapis.com/\n      version: 3.2.3\n    - alias: memcached-index-write\n      condition: memcached-index-write.enabled\n      name: memcached\n      repository: https://kubernetes-charts.storage.googleapis.com/\n      version: 3.2.3\n    description: Cortex\n    digest: f3c06fb19af521cd0daf02e5aaf8236d622df3f372fb8d3237a1103ecc0b810e\n    home: https://cortexmetrics.io/\n    icon: https://avatars2.githubusercontent.com/u/43045022?s=200&v=4\n    kubeVersion: ^1.10.0-0\n    maintainers:\n    - email: cortex-team@googlegroups.com\n      name: Cortex Maintainers\n    name: cortex\n    sources:\n    - https://github.com/cortexproject/cortex-helm-chart\n    urls:\n    - https://cortexproject.github.io/cortex-helm-chart/cortex-0.2.0.tgz\n    version: 0.2.0\ngenerated: \"2026-05-21T01:14:12.723689263Z\"\n"
  },
  {
    "path": "renovate.json",
    "content": "{\n    \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n    \"extends\": [\n        \"config:base\",\n        \":gitSignOff\",\n        \":rebaseStalePrs\"\n    ],\n    \"assignees\": [\n        \"nschad\",\n        \"kd7lxl\"\n    ],\n    \"labels\": [\"dependencies\"],\n    \"regexManagers\": [{\n            \"description\": \"Update cortex in Chart.yaml\",\n            \"fileMatch\": [\"^Chart\\\\.yaml$\"],\n            \"matchStrings\": [\n                \"appVersion: (?<currentValue>.*?)\\\\n\"\n            ],\n            \"depNameTemplate\": \"quay.io/cortexproject/cortex\",\n            \"datasourceTemplate\": \"docker\"\n        },\n        {\n            \"description\": \"Update cortex in README.md\",\n            \"fileMatch\": [\"^README\\\\.md$\"],\n            \"matchStrings\": [\n                \"\\\\bAppVersion:\\\\s+(?<currentValue>v\\\\d+\\\\.\\\\d+\\\\.\\\\d+(?:\\\\+\\\\d+)?)\",\n                \"\\\\bAppVersion-+(?<currentValue>v\\\\d+\\\\.\\\\d+\\\\.\\\\d+(?:\\\\+\\\\d+)?)\"\n            ],\n            \"depNameTemplate\": \"quay.io/cortexproject/cortex\",\n            \"datasourceTemplate\": \"docker\"\n        },\n        {\n            \"description\": \"Update nginx image in README.md\",\n            \"fileMatch\": [\"^README\\\\.md$\"],\n            \"matchStrings\": [\n                \"\\\\|\\\\s+nginx.&ZeroWidthSpace;image.&ZeroWidthSpace;tag\\\\s+\\\\|\\\\s+float\\\\s+\\\\|\\\\s+\\\\`(?<currentValue>.*?)\\\\`\\\\s+\\\\|\\\\s+\\\\|\\\\s+\"\n            ],\n            \"depNameTemplate\": \"nginx\",\n            \"datasourceTemplate\": \"docker\"\n        },\n        {\n            \"description\": \"Update kiwigrid/k8s-sidecar image in README.md\",\n            \"fileMatch\": [\"^README\\\\.md$\"],\n            \"matchStrings\": [\n                \"\\\\|\\\\s+ruler.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;image.&ZeroWidthSpace;tag\\\\s+\\\\|\\\\s+string\\\\s+\\\\|\\\\s+`\\\"(?<currentValue>.*?)\\\"`\\\\s+\\\\|\\\\s+\\\\|\\\\s+\",\n                \"\\\\|\\\\s+alertmanager.&ZeroWidthSpace;sidecar.&ZeroWidthSpace;image.&ZeroWidthSpace;tag\\\\s+\\\\|\\\\s+string\\\\s+\\\\|\\\\s+`\\\"(?<currentValue>.*?)\\\"`\\\\s+\\\\|\\\\s+\\\\|\\\\s+\"\n            ],\n            \"depNameTemplate\": \"kiwigrid/k8s-sidecar\",\n            \"datasourceTemplate\": \"docker\"\n        },\n        {\n            \"description\": \"Update memcached image in README.md\",\n            \"fileMatch\": [\"^README\\\\.md$\"],\n            \"matchStrings\": [\n                \"\\\\|[^|]*\\\\|[^|]*\\\\(memcached\\\\)[^|]*\\\\|\\\\s+(?<currentValue>.*?)\\\\s+\\\\|\\\\s+\"\n            ],\n            \"depNameTemplate\": \"memcached\",\n            \"registryUrlTemplate\": \"https://charts.bitnami.com/bitnami\",\n            \"datasourceTemplate\": \"helm\"\n        }\n    ]\n}\n"
  },
  {
    "path": "templates/NOTES.txt",
    "content": "{{- include \"cortex.validateMemcached\" (index .Values \"memcached-frontend\") }}\n{{- include \"cortex.validateMemcached\" (index .Values \"memcached-blocks-index\") }}\n{{- include \"cortex.validateMemcached\" (index .Values \"memcached-blocks\") }}\n{{- include \"cortex.validateMemcached\" (index .Values \"memcached-blocks-metadata\") }}\n\nVerify the application is working by running these commands:\n  kubectl --namespace {{ .Release.Namespace }} port-forward service/{{ include \"cortex.querierFullname\" . }} {{ .Values.config.server.http_listen_port }}\n  curl http://127.0.0.1:{{ .Values.config.server.http_listen_port }}/services\n"
  },
  {
    "path": "templates/_helpers.tpl",
    "content": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"cortex.name\" -}}\n{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix \"-\" -}}\n{{- end -}}\n\n{{/*\nCreate a default fully qualified app name.\nWe truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).\nIf release name contains chart name it will be used as a full name.\n*/}}\n{{- define \"cortex.fullname\" -}}\n{{- if .Values.fullnameOverride -}}\n{{- .Values.fullnameOverride | trunc 63 | trimSuffix \"-\" -}}\n{{- else -}}\n{{- $name := default .Chart.Name .Values.nameOverride -}}\n{{- if contains $name .Release.Name -}}\n{{- .Release.Name | trunc 63 | trimSuffix \"-\" -}}\n{{- else -}}\n{{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" -}}\n{{- end -}}\n{{- end -}}\n{{- end -}}\n\n{{/*\nCreate chart name and version as used by the chart label.\n*/}}\n{{- define \"cortex.chart\" -}}\n{{- printf \"%s-%s\" .Chart.Name .Chart.Version | replace \"+\" \"_\" | trunc 63 | trimSuffix \"-\" -}}\n{{- end -}}\n\n{{/*\nCreate the name of the service account\n*/}}\n{{- define \"cortex.serviceAccountName\" -}}\n{{- if .Values.serviceAccount.create -}}\n    {{ default (include \"cortex.fullname\" .) .Values.serviceAccount.name }}\n{{- else -}}\n    {{ default \"default\" .Values.serviceAccount.name }}\n{{- end -}}\n{{- end -}}\n\n{{/*\nCreate the app name of cortex clients. Defaults to the same logic as \"cortex.fullname\", and default client expects \"prometheus\".\n*/}}\n{{- define \"client.name\" -}}\n{{- if .Values.client.name -}}\n{{- .Values.client.name -}}\n{{- else if .Values.client.fullnameOverride -}}\n{{- .Values.client.fullnameOverride | trunc 63 | trimSuffix \"-\" -}}\n{{- else -}}\n{{- $name := default \"prometheus\" .Values.client.nameOverride -}}\n{{- if contains $name .Release.Name -}}\n{{- .Release.Name | trunc 63 | trimSuffix \"-\" -}}\n{{- else -}}\n{{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" -}}\n{{- end -}}\n{{- end -}}\n{{- end -}}\n\n\n{{/*\nCommon labels\n*/}}\n{{- define \"cortex.labels\" -}}\nhelm.sh/chart: {{ include \"cortex.chart\" . }}\n{{ include \"cortex.selectorLabels\" . }}\n{{- if .Chart.AppVersion }}\napp.kubernetes.io/version: {{ .Chart.AppVersion | quote }}\n{{- end }}\napp.kubernetes.io/managed-by: {{ .Release.Service }}\n{{- end }}\n\n{{/*\nSelector labels\n*/}}\n{{- define \"cortex.selectorLabels\" -}}\napp.kubernetes.io/name: {{ include \"cortex.name\" . }}\napp.kubernetes.io/instance: {{ .Release.Name }}\n{{- end }}\n\n{{/*\nCreate configuration parameters for memcached configuration\n*/}}\n{{- define \"cortex.memcached\" -}}\n{{- if index .Values \"memcached-blocks-index\" \"enabled\" }}\n- \"-blocks-storage.bucket-store.index-cache.backend=memcached\"\n- \"-blocks-storage.bucket-store.index-cache.memcached.addresses=dns+{{ .Release.Name }}-memcached-blocks-index.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211\"\n{{- end -}}\n{{- if index .Values \"memcached-blocks\" \"enabled\" }}\n- \"-blocks-storage.bucket-store.chunks-cache.backend=memcached\"\n- \"-blocks-storage.bucket-store.chunks-cache.memcached.addresses=dns+{{ .Release.Name }}-memcached-blocks.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211\"\n{{- end -}}\n{{- if index .Values \"memcached-blocks-metadata\" \"enabled\" }}\n- \"-blocks-storage.bucket-store.metadata-cache.backend=memcached\"\n- \"-blocks-storage.bucket-store.metadata-cache.memcached.addresses=dns+{{ .Release.Name }}-memcached-blocks-metadata.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211\"\n{{- end -}}\n{{- if index .Values \"memcached-parquet-labels\" \"enabled\" }}\n- \"-blocks-storage.bucket-store.parquet-labels-cache.backend=memcached\"\n- \"-blocks-storage.bucket-store.parquet-labels-cache.memcached.addresses=dns+{{ .Release.Name }}-memcached-parquet-labels.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211\"\n{{- end -}}\n{{- end -}}\n\n{{/*\nCreate configuration for frontend memcached configuration\n*/}}\n{{- define \"cortex.frontend-memcached\" -}}\n{{- if index .Values \"memcached-frontend\" \"enabled\" }}\n- \"-frontend.memcached.addresses=dns+{{ .Release.Name }}-memcached-frontend.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:11211\"\n{{- end -}}\n{{- end -}}\n\n{{/*\nDetermine the policy api version\n*/}}\n{{- define \"cortex.pdbVersion\" -}}\n{{- if or (.Capabilities.APIVersions.Has \"policy/v1/PodDisruptionBudget\") (semverCompare \">=1.21-0\" .Capabilities.KubeVersion.Version) -}}\npolicy/v1\n{{- else -}}\npolicy/v1beta1\n{{- end -}}\n{{- end -}}\n\n{{/*\nGet checksum of config secret or configMap\n*/}}\n{{- define \"cortex.configChecksum\" -}}\n{{- if .Values.useExternalConfig -}}\n{{- .Values.externalConfigVersion -}}\n{{- else if .Values.useConfigMap -}}\n{{- include (print $.Template.BasePath \"/configmap.yaml\") . | sha256sum -}}\n{{- else -}}\n{{- include (print $.Template.BasePath \"/secret.yaml\") . | sha256sum -}}\n{{- end -}}\n{{- end -}}\n\n{{/*\nGet volume of config secret of configMap\n*/}}\n{{- define \"cortex.configVolume\" -}}\n- name: config\n  {{- if .Values.useExternalConfig }}\n  secret:\n    secretName: {{ .Values.externalConfigSecretName }}\n  {{- else if .Values.useConfigMap }}\n  configMap:\n    name: {{ template \"cortex.fullname\" . }}-config\n  {{- else }}\n  secret:\n    secretName: {{ template \"cortex.fullname\" . }}\n  {{- end }}\n{{- end -}}\n\n{{/*\nGet cortex hpa version by k8s version\n*/}}\n{{- define \"cortex.hpaVersion\" -}}\n{{- if or (.Capabilities.APIVersions.Has \"autoscaling/v2/HorizontalPodAutoscaler\") (semverCompare \">=1.23-0\" .Capabilities.KubeVersion.Version) -}}\nautoscaling/v2\n{{- else -}}\nautoscaling/v2beta2\n{{- end -}}\n{{- end -}}\n\n{{/*\nbitnami/memcached was configured with env vars while memcached official image requires args\nThis helper validates that if memcached image is set to official image, args are used instead of env vars\n*/}}\n{{- define \"cortex.validateMemcached\" -}}\n{{- if .enabled -}}\n{{- if not .disableValidation -}}\n{{- if and .image (eq .image.repository \"memcached\") -}}\n{{- if .extraEnvVars -}}\n{{- fail \"memcached must be configured with .args not .extraEnvVars\" -}}\n{{- end -}}\n{{- end -}}\n{{- end -}}\n{{- end -}}\n{{- end -}}\n"
  },
  {
    "path": "templates/alertmanager/_helpers-alertmanager.tpl",
    "content": "\n{{/*\nalertmanager fullname\n*/}}\n{{- define \"cortex.alertmanagerFullname\" -}}\n{{ include \"cortex.fullname\" . }}-alertmanager\n{{- end }}\n\n{{/*\nalertmanager common labels\n*/}}\n{{- define \"cortex.alertmanagerLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: alertmanager\n{{- end }}\n\n{{/*\nalertmanager selector labels\n*/}}\n{{- define \"cortex.alertmanagerSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: alertmanager\n{{- end }}\n"
  },
  {
    "path": "templates/alertmanager/alertmanager-dep.yaml",
    "content": "{{- if .Values.alertmanager.enabled -}}\n{{- if not .Values.alertmanager.statefulSet.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.alertmanagerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.alertmanagerLabels\" . | nindent 4 }}\n    app.kubernetes.io/part-of: memberlist\n  annotations:\n    {{- toYaml .Values.alertmanager.annotations | nindent 4 }}\nspec:\n  replicas: {{ .Values.alertmanager.replicas }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.alertmanagerSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.alertmanager.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.alertmanagerLabels\" . | nindent 8 }}\n        app.kubernetes.io/part-of: memberlist\n        {{- with .Values.alertmanager.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n        {{- with .Values.alertmanager.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.alertmanager.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n    {{- if .Values.alertmanager.priorityClassName }}\n      priorityClassName: {{ .Values.alertmanager.priorityClassName }}\n    {{- end }}\n      {{- if .Values.alertmanager.securityContext.enabled }}\n      securityContext: {{- omit .Values.alertmanager.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.alertmanager.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        {{- if .Values.alertmanager.sidecar.enabled }}\n        - name: {{ template \"cortex.name\" . }}-sc-alertmanager\n          {{- if .Values.alertmanager.sidecar.image.sha }}\n          image: \"{{ .Values.alertmanager.sidecar.image.repository }}:{{ .Values.alertmanager.sidecar.image.tag }}@sha256:{{ .Values.alertmanager.sidecar.image.sha }}\"\n          {{- else }}\n          image: \"{{ .Values.alertmanager.sidecar.image.repository }}:{{ .Values.alertmanager.sidecar.image.tag }}\"\n          {{- end }}\n          imagePullPolicy: {{ .Values.alertmanager.sidecar.imagePullPolicy }}\n          env:\n            {{- if .Values.alertmanager.sidecar.watchMethod }}\n            - name: METHOD\n              value: {{ .Values.alertmanager.sidecar.watchMethod }}\n            {{ end }}\n            - name: LABEL\n              value: \"{{ .Values.alertmanager.sidecar.label }}\"\n            {{- if .Values.alertmanager.sidecar.labelValue }}\n            - name: LABEL_VALUE\n              value: {{ quote .Values.alertmanager.sidecar.labelValue }}\n            {{- end }}\n            - name: FOLDER\n              value: \"{{ .Values.alertmanager.sidecar.folder }}{{- with .Values.alertmanager.sidecar.defaultFolderName }}/{{ . }}{{- end }}\"\n            {{- if .Values.alertmanager.sidecar.resource}}\n            - name: RESOURCE\n              value: {{ quote .Values.alertmanager.sidecar.resource }}\n            {{- end }}\n            {{- if .Values.alertmanager.sidecar.enableUniqueFilenames }}\n            - name: UNIQUE_FILENAMES\n              value: \"{{ .Values.alertmanager.sidecar.enableUniqueFilenames }}\"\n            {{- end }}\n            {{- if .Values.alertmanager.sidecar.searchNamespace }}\n            - name: NAMESPACE\n              value: \"{{ .Values.alertmanager.sidecar.searchNamespace }}\"\n            {{- end }}\n            {{- if .Values.alertmanager.sidecar.skipTlsVerify }}\n            - name: SKIP_TLS_VERIFY\n              value: \"{{ .Values.alertmanager.sidecar.skipTlsVerify }}\"\n            {{- end }}\n            {{- if .Values.alertmanager.sidecar.folderAnnotation }}\n            - name: FOLDER_ANNOTATION\n              value: \"{{ .Values.alertmanager.sidecar.folderAnnotation }}\"\n            {{- end }}\n          {{- with .Values.alertmanager.sidecar.healthPort }}\n            - name: HEALTH_PORT\n              value: \"{{ . }}\"\n          ports:\n            - name: sidecar-health\n              containerPort: {{ . }}\n              protocol: TCP\n          {{- end }}\n          {{- with .Values.alertmanager.sidecar.startupProbe }}\n          startupProbe:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          {{- with .Values.alertmanager.sidecar.readinessProbe }}\n          readinessProbe:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          resources:\n            {{- toYaml .Values.alertmanager.sidecar.resources | nindent 12 }}\n          {{- if .Values.alertmanager.sidecar.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.alertmanager.sidecar.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          volumeMounts:\n            - name: storage\n              mountPath: \"/data\"\n        {{- end }}\n        - name: alertmanager\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=alertmanager\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n          {{- range $key, $value := .Values.alertmanager.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          volumeMounts:\n          {{- if .Values.alertmanager.extraVolumeMounts }}\n          {{- toYaml .Values.alertmanager.extraVolumeMounts | nindent 12}}\n          {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n            - name: storage\n              mountPath: \"/data\"\n              {{- with .Values.alertmanager.persistentVolume.subPath }}\n              subPath: {{ . }}\n              {{- end }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: gossip\n              containerPort: {{ .Values.config.memberlist.bind_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.alertmanager.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.alertmanager.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.alertmanager.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.alertmanager.resources | nindent 12 }}\n          {{- if .Values.alertmanager.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.alertmanager.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.alertmanager.env }}\n          env:\n            {{- toYaml .Values.alertmanager.env | nindent 12 }}\n          {{- end }}\n        {{- if .Values.alertmanager.extraContainers }}\n        {{- toYaml .Values.alertmanager.extraContainers | nindent 8}}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.alertmanager.nodeSelector | nindent 8 }}\n      {{- if .Values.alertmanager.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.alertmanager.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.alertmanager.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.alertmanager.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.alertmanager.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        - name: storage\n          emptyDir: {}\n        {{- if .Values.alertmanager.extraVolumes }}\n        {{- toYaml .Values.alertmanager.extraVolumes | nindent 8 }}\n        {{- end }}\n{{- end -}}\n{{- end -}}\n"
  },
  {
    "path": "templates/alertmanager/alertmanager-poddisruptionbudget.yaml",
    "content": "{{- if and (gt (int .Values.alertmanager.replicas) 1) (.Values.alertmanager.podDisruptionBudget) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.alertmanagerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.alertmanagerLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.alertmanagerSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.alertmanager.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/alertmanager/alertmanager-servicemonitor.yaml",
    "content": "{{- if .Values.alertmanager.serviceMonitor.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.alertmanagerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.alertmanagerLabels\" . | nindent 4 }}\n    {{- if .Values.alertmanager.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.alertmanager.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.alertmanager.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.alertmanager.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.alertmanagerSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.alertmanager.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.alertmanager.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.alertmanager.serviceMonitor.interval }}\n    interval: {{ .Values.alertmanager.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.alertmanager.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.alertmanager.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.alertmanager.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.alertmanager.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.alertmanager.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.alertmanager.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.alertmanager.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/alertmanager/alertmanager-statefulset.yaml",
    "content": "{{- $svcClusterAddress := ((.Values.config.alertmanager.cluster).listen_address) | default \"0.0.0.0:9094\" }}\n{{- $svcClusterPort := (split \":\" $svcClusterAddress)._1 }}\n{{- if .Values.alertmanager.enabled -}}\n{{- if .Values.alertmanager.statefulSet.enabled -}}\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: {{ include \"cortex.alertmanagerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.alertmanagerLabels\" . | nindent 4 }}\n    app.kubernetes.io/part-of: memberlist\n  annotations:\n    {{- toYaml .Values.alertmanager.annotations | nindent 4 }}\nspec:\n  replicas: {{ .Values.alertmanager.replicas }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.alertmanagerSelectorLabels\" . | nindent 6 }}\n  updateStrategy:\n    {{- toYaml .Values.alertmanager.statefulStrategy | nindent 4 }}\n  serviceName: {{ template \"cortex.fullname\" . }}-alertmanager-headless\n  {{- if .Values.alertmanager.persistentVolume.enabled }}\n  {{- if semverCompare \">=1.23-0\" .Capabilities.KubeVersion.Version }}\n  {{- with .Values.alertmanager.persistentVolume.retentionPolicy }}\n  persistentVolumeClaimRetentionPolicy:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- end }}\n  volumeClaimTemplates:\n    - metadata:\n        name: storage\n        {{- if .Values.alertmanager.persistentVolume.annotations }}\n        annotations:\n          {{ toYaml .Values.alertmanager.persistentVolume.annotations | nindent 10 }}\n        {{- end }}\n      spec:\n        {{- if .Values.alertmanager.persistentVolume.storageClass }}\n        {{- if (eq \"-\" .Values.alertmanager.persistentVolume.storageClass) }}\n        storageClassName: \"\"\n        {{- else }}\n        storageClassName: \"{{ .Values.alertmanager.persistentVolume.storageClass }}\"\n        {{- end }}\n        {{- end }}\n        accessModes:\n          {{ toYaml .Values.alertmanager.persistentVolume.accessModes | nindent 10 }}\n        resources:\n          requests:\n            storage: \"{{ .Values.alertmanager.persistentVolume.size }}\"\n  {{- end }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.alertmanagerLabels\" . | nindent 8 }}\n        app.kubernetes.io/part-of: memberlist\n        {{- with .Values.alertmanager.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n        {{- with .Values.alertmanager.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.alertmanager.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.alertmanager.priorityClassName }}\n      priorityClassName: {{ .Values.alertmanager.priorityClassName }}\n      {{- end }}\n      {{- if .Values.alertmanager.securityContext.enabled }}\n      securityContext: {{- omit .Values.alertmanager.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.alertmanager.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.alertmanager.nodeSelector | nindent 8 }}\n      {{- if .Values.alertmanager.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.alertmanager.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.alertmanager.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.alertmanager.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.alertmanager.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        {{- if not .Values.alertmanager.persistentVolume.enabled }}\n        - name: storage\n          emptyDir: {}\n        {{- end }}\n        {{- if .Values.alertmanager.extraVolumes }}\n        {{- toYaml .Values.alertmanager.extraVolumes | nindent 8 }}\n        {{- end }}\n      containers:\n        {{- if .Values.alertmanager.extraContainers }}\n        {{ toYaml .Values.alertmanager.extraContainers | nindent 8 }}\n        {{- end }}\n        {{- if .Values.alertmanager.sidecar.enabled }}\n        - name: {{ template \"cortex.name\" . }}-sc-alertmanager\n          {{- if .Values.alertmanager.sidecar.image.sha }}\n          image: \"{{ .Values.alertmanager.sidecar.image.repository }}:{{ .Values.alertmanager.sidecar.image.tag }}@sha256:{{ .Values.alertmanager.sidecar.image.sha }}\"\n          {{- else }}\n          image: \"{{ .Values.alertmanager.sidecar.image.repository }}:{{ .Values.alertmanager.sidecar.image.tag }}\"\n          {{- end }}\n          imagePullPolicy: {{ .Values.alertmanager.sidecar.imagePullPolicy }}\n          env:\n            {{- if .Values.alertmanager.sidecar.watchMethod }}\n            - name: METHOD\n              value: {{ .Values.alertmanager.sidecar.watchMethod }}\n            {{ end }}\n            - name: LABEL\n              value: \"{{ .Values.alertmanager.sidecar.label }}\"\n            {{- if .Values.alertmanager.sidecar.labelValue }}\n            - name: LABEL_VALUE\n              value: {{ quote .Values.alertmanager.sidecar.labelValue }}\n            {{- end }}\n            - name: FOLDER\n              value: \"{{ .Values.alertmanager.sidecar.folder }}{{- with .Values.alertmanager.sidecar.defaultFolderName }}/{{ . }}{{- end }}\"\n            {{- if .Values.alertmanager.sidecar.resource}}\n            - name: RESOURCE\n              value: {{ quote .Values.alertmanager.sidecar.resource }}\n            {{- end }}\n            {{- if .Values.alertmanager.sidecar.enableUniqueFilenames }}\n            - name: UNIQUE_FILENAMES\n              value: \"{{ .Values.alertmanager.sidecar.enableUniqueFilenames }}\"\n            {{- end }}\n            {{- if .Values.alertmanager.sidecar.searchNamespace }}\n            - name: NAMESPACE\n              value: \"{{ .Values.alertmanager.sidecar.searchNamespace }}\"\n            {{- end }}\n            {{- if .Values.alertmanager.sidecar.skipTlsVerify }}\n            - name: SKIP_TLS_VERIFY\n              value: \"{{ .Values.alertmanager.sidecar.skipTlsVerify }}\"\n            {{- end }}\n            {{- if .Values.alertmanager.sidecar.folderAnnotation }}\n            - name: FOLDER_ANNOTATION\n              value: \"{{ .Values.alertmanager.sidecar.folderAnnotation }}\"\n            {{- end }}\n          {{- with .Values.alertmanager.sidecar.healthPort }}\n            - name: HEALTH_PORT\n              value: \"{{ . }}\"\n          ports:\n            - name: sidecar-health\n              containerPort: {{ . }}\n              protocol: TCP\n          {{- end }}\n          {{- with .Values.alertmanager.sidecar.startupProbe }}\n          startupProbe:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          {{- with .Values.alertmanager.sidecar.readinessProbe }}\n          readinessProbe:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          resources:\n            {{- toYaml .Values.alertmanager.sidecar.resources | nindent 12 }}\n          {{- if .Values.alertmanager.sidecar.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.alertmanager.sidecar.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          volumeMounts:\n            - name: storage\n              mountPath: \"/data\"\n        {{- end }}\n        - name: alertmanager\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=alertmanager\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n            {{- if and (gt (int .Values.alertmanager.replicas) 1) (ne .Values.config.alertmanager.cluster.listen_address \"\") }}\n            {{- $fullName := include \"cortex.alertmanagerFullname\" . }}\n            {{- $peers := list }}\n            {{- range $i := until (int .Values.alertmanager.replicas) }}\n\t      {{- $peer := printf \"%s-%d.%s-headless.%s.svc.cluster.local:%s\" $fullName $i $fullName $.Release.Namespace $svcClusterPort }}\n              {{- $peers = append $peers $peer }}\n            {{- end }}\n            - \"-alertmanager.cluster.peers={{ join \",\" $peers }}\"\n            {{- end }}\n            {{- range $key, $value := .Values.alertmanager.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n            {{- end }}\n          volumeMounts:\n            {{- if .Values.alertmanager.extraVolumeMounts }}\n            {{- toYaml .Values.alertmanager.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n            - name: storage\n              mountPath: \"/data\"\n              {{- with .Values.alertmanager.persistentVolume.subPath }}\n              subPath: {{ . }}\n              {{- end }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: gossip\n              containerPort: {{ .Values.config.memberlist.bind_port }}\n              protocol: TCP\n            - name: grpc\n              containerPort: {{ .Values.config.server.grpc_listen_port }}\n              protocol: TCP\n            - containerPort: {{ $svcClusterPort }}\n              name: alert-clu-tcp\n              protocol: TCP\n            - containerPort: {{ $svcClusterPort }}\n              name: alert-clu-udp\n              protocol: UDP\n          startupProbe:\n            {{- toYaml .Values.alertmanager.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.alertmanager.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.alertmanager.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.alertmanager.resources | nindent 12 }}\n          {{- if .Values.alertmanager.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.alertmanager.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.alertmanager.env }}\n          env:\n            {{- toYaml .Values.alertmanager.env | nindent 12 }}\n          {{- end }}\n{{- end -}}\n{{- end -}}\n"
  },
  {
    "path": "templates/alertmanager/alertmanager-svc-headless.yaml",
    "content": "{{- if .Values.alertmanager.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.alertmanagerFullname\" . }}-headless\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.alertmanagerLabels\" . | nindent 4 }}\n    {{- with .Values.alertmanager.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.alertmanager.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  clusterIP: None\n  publishNotReadyAddresses: true\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n    - port: {{ .Values.config.server.grpc_listen_port }}\n      protocol: TCP\n      name: grpc\n      targetPort: grpc\n    - port: 9094\n      protocol: UDP\n      name: alert-clu-udp\n      targetPort: alert-clu-udp\n    - port: 9094\n      protocol: TCP\n      name: alert-clu-tcp\n      targetPort: alert-clu-tcp\n  selector:\n    {{- include \"cortex.alertmanagerSelectorLabels\" . | nindent 4 }}\n{{- end -}}\n"
  },
  {
    "path": "templates/alertmanager/alertmanager-svc.yaml",
    "content": "{{- if .Values.alertmanager.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.alertmanagerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.alertmanagerLabels\" . | nindent 4 }}\n    {{- with .Values.alertmanager.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.alertmanager.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.alertmanagerSelectorLabels\" . | nindent 4 }}\n{{- end -}}\n"
  },
  {
    "path": "templates/clusterrole.yaml",
    "content": "{{- if or .Values.ruler.sidecar.enabled .Values.alertmanager.sidecar.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: {{ template \"cortex.fullname\" . }}-clusterrole\n  labels:\n  {{- include \"cortex.labels\" . | nindent 4 }}\nrules:\n  - apiGroups: [\"\"] # \"\" indicates the core API group\n    resources: [\"configmaps\", \"secrets\"]\n    verbs: [\"get\", \"watch\", \"list\"]\n{{- end }}\n"
  },
  {
    "path": "templates/clusterrolebinding.yaml",
    "content": "{{- if or .Values.ruler.sidecar.enabled .Values.alertmanager.sidecar.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: {{ template \"cortex.fullname\" . }}-clusterrolebinding\n  labels:\n  {{- include \"cortex.labels\" . | nindent 4 }}\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: {{ template \"cortex.fullname\" . }}-clusterrole\nsubjects:\n  - kind: ServiceAccount\n    name: {{ template \"cortex.serviceAccountName\" . }}\n    namespace: {{ .Release.Namespace }}\n{{- end }}\n"
  },
  {
    "path": "templates/compactor/_helpers-compactor.tpl",
    "content": "\n{{/*\ncompactor fullname\n*/}}\n{{- define \"cortex.compactorFullname\" -}}\n{{ include \"cortex.fullname\" . }}-compactor\n{{- end }}\n\n{{/*\ncompactor common labels\n*/}}\n{{- define \"cortex.compactorLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: compactor\n{{- end }}\n\n{{/*\ncompactor selector labels\n*/}}\n{{- define \"cortex.compactorSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: compactor\n{{- end }}\n"
  },
  {
    "path": "templates/compactor/compactor-poddisruptionbudget.yaml",
    "content": "{{- if and (gt (int .Values.compactor.replicas) 1) (.Values.compactor.podDisruptionBudget) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.compactorFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.compactorLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.compactorSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.compactor.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/compactor/compactor-servicemonitor.yaml",
    "content": "{{- if .Values.compactor.serviceMonitor.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.compactorFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.compactorLabels\" . | nindent 4 }}\n    {{- if .Values.compactor.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.compactor.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.compactor.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.compactor.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.compactorSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.compactor.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.compactor.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.compactor.serviceMonitor.interval }}\n    interval: {{ .Values.compactor.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.compactor.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.compactor.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.compactor.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.compactor.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.compactor.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.compactor.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.compactor.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/compactor/compactor-statefulset.yaml",
    "content": "{{- if .Values.compactor.enabled -}}\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: {{ include \"cortex.compactorFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.compactorLabels\" . | nindent 4 }}\n    app.kubernetes.io/part-of: memberlist\n  annotations:\n    {{- toYaml .Values.compactor.annotations | nindent 4 }}\nspec:\n  replicas: {{ .Values.compactor.replicas }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.compactorSelectorLabels\" . | nindent 6 }}\n  updateStrategy:\n    {{- toYaml .Values.compactor.strategy | nindent 4 }}\n  serviceName: {{ template \"cortex.fullname\" . }}-compactor\n  {{- if .Values.compactor.persistentVolume.enabled }}\n  {{- if semverCompare \">=1.23-0\" .Capabilities.KubeVersion.Version }}\n  {{- with .Values.compactor.persistentVolume.retentionPolicy }}\n  persistentVolumeClaimRetentionPolicy:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- end }}\n  volumeClaimTemplates:\n    - metadata:\n        name: storage\n        {{- if .Values.compactor.persistentVolume.annotations }}\n        annotations:\n          {{ toYaml .Values.compactor.persistentVolume.annotations | nindent 10 }}\n        {{- end }}\n      spec:\n        {{- if .Values.compactor.persistentVolume.storageClass }}\n        {{- if (eq \"-\" .Values.compactor.persistentVolume.storageClass) }}\n        storageClassName: \"\"\n        {{- else }}\n        storageClassName: \"{{ .Values.compactor.persistentVolume.storageClass }}\"\n        {{- end }}\n        {{- end }}\n        accessModes:\n          {{ toYaml .Values.compactor.persistentVolume.accessModes | nindent 10 }}\n        resources:\n          requests:\n            storage: \"{{ .Values.compactor.persistentVolume.size }}\"\n  {{- end }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.compactorLabels\" . | nindent 8 }}\n        app.kubernetes.io/part-of: memberlist\n        {{- with .Values.compactor.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n        {{- with .Values.compactor.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.compactor.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.compactor.priorityClassName }}\n      priorityClassName: {{ .Values.compactor.priorityClassName }}\n      {{- end }}\n      {{- if .Values.compactor.securityContext.enabled }}\n      securityContext: {{- omit .Values.compactor.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.compactor.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.compactor.nodeSelector | nindent 8 }}\n      {{- if .Values.compactor.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.compactor.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.compactor.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.compactor.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.compactor.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        {{- if not .Values.compactor.persistentVolume.enabled }}\n        - name: storage\n          emptyDir: {}\n        {{- end }}\n        {{- if .Values.compactor.extraVolumes }}\n        {{- toYaml .Values.compactor.extraVolumes | nindent 8 }}\n        {{- end }}\n      containers:\n        {{- if .Values.compactor.extraContainers }}\n        {{ toYaml .Values.compactor.extraContainers | nindent 8 }}\n        {{- end }}\n        - name: compactor\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=compactor\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n            {{- include \"cortex.memcached\" . | nindent 12}}\n            {{- range $key, $value := .Values.compactor.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n            {{- end }}\n          volumeMounts:\n            {{- if .Values.compactor.extraVolumeMounts }}\n            {{- toYaml .Values.compactor.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n            - name: storage\n              mountPath: \"/data\"\n              {{- if .Values.compactor.persistentVolume.subPath }}\n              subPath: {{ .Values.compactor.persistentVolume.subPath }}\n              {{- end }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: gossip\n              containerPort: {{ .Values.config.memberlist.bind_port }}\n              protocol: TCP\n          {{- if .Values.compactor.startupProbe }}\n          startupProbe:\n            {{- toYaml .Values.compactor.startupProbe | nindent 12 }}\n          {{- end }}\n          {{- if .Values.compactor.livenessProbe }}\n          livenessProbe:\n            {{- toYaml .Values.compactor.livenessProbe | nindent 12 }}\n          {{- end }}\n          readinessProbe:\n            {{- toYaml .Values.compactor.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.compactor.resources | nindent 12 }}\n          {{- if .Values.compactor.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.compactor.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.compactor.env }}\n          env:\n            {{- toYaml .Values.compactor.env | nindent 12 }}\n          {{- end }}\n{{- end -}}\n"
  },
  {
    "path": "templates/compactor/compactor-svc.yaml",
    "content": "{{- if .Values.compactor.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.compactorFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.compactorLabels\" . | nindent 4 }}\n    {{- with .Values.compactor.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.compactor.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.compactorSelectorLabels\" . | nindent 4 }}\n{{- end -}}\n"
  },
  {
    "path": "templates/configmap.yaml",
    "content": "{{- if (and (not .Values.useExternalConfig) (.Values.useConfigMap)) }}\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: {{ template \"cortex.fullname\" . }}-config\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.labels\" . | nindent 4 }}\ndata:\n  cortex.yaml: |\n    {{- tpl (toYaml .Values.config) . | nindent 4 }}\n{{- end }}\n"
  },
  {
    "path": "templates/distributor/_helpers-distributor.tpl",
    "content": "\n{{/*\ndistributor fullname\n*/}}\n{{- define \"cortex.distributorFullname\" -}}\n{{ include \"cortex.fullname\" . }}-distributor\n{{- end }}\n\n{{/*\ndistributor common labels\n*/}}\n{{- define \"cortex.distributorLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: distributor\n{{- end }}\n\n{{/*\ndistributor selector labels\n*/}}\n{{- define \"cortex.distributorSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: distributor\n{{- end }}\n"
  },
  {
    "path": "templates/distributor/distributor-dep.yaml",
    "content": "{{- if .Values.distributor.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.distributorFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.distributorLabels\" . | nindent 4 }}\n    app.kubernetes.io/part-of: memberlist\n  annotations:\n    {{- toYaml .Values.distributor.annotations | nindent 4 }}\nspec:\n  {{- if not .Values.distributor.autoscaling.enabled }}\n  replicas: {{ .Values.distributor.replicas }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.distributorSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.distributor.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.distributorLabels\" . | nindent 8 }}\n        app.kubernetes.io/part-of: memberlist\n        {{- with .Values.distributor.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n        {{- with .Values.distributor.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.distributor.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.distributor.priorityClassName }}\n      priorityClassName: {{ .Values.distributor.priorityClassName }}\n      {{- end }}\n      {{- if .Values.distributor.securityContext.enabled }}\n      securityContext: {{- omit .Values.distributor.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.distributor.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        - name: distributor\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=distributor\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n          {{- range $key, $value := .Values.distributor.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          volumeMounts:\n            {{- if .Values.distributor.extraVolumeMounts }}\n            {{- toYaml .Values.distributor.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n            - name: storage\n              mountPath: \"/data\"\n              subPath: {{ .Values.distributor.persistentVolume.subPath }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: gossip\n              containerPort: {{ .Values.config.memberlist.bind_port }}\n              protocol: TCP\n            - name: grpc\n              containerPort: {{ .Values.config.server.grpc_listen_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.distributor.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.distributor.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.distributor.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.distributor.resources | nindent 12 }}\n          {{- if .Values.distributor.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.distributor.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.distributor.env }}\n          env:\n            {{- toYaml .Values.distributor.env | nindent 12 }}\n          {{- end }}\n          {{- with .Values.distributor.lifecycle }}\n          lifecycle:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n      {{- if .Values.distributor.extraContainers }}\n      {{- toYaml .Values.distributor.extraContainers | nindent 8}}\n      {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.distributor.nodeSelector | nindent 8 }}\n      {{- if .Values.distributor.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.distributor.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.distributor.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.distributor.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.distributor.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        - name: storage\n          emptyDir: {}\n        {{- if .Values.distributor.extraVolumes }}\n        {{- toYaml .Values.distributor.extraVolumes | nindent 8}}\n        {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/distributor/distributor-hpa.yaml",
    "content": "{{- if and .Values.distributor.enabled .Values.distributor.autoscaling.enabled }}\n{{- with .Values.distributor.autoscaling -}}\napiVersion: {{ include \"cortex.hpaVersion\" $ }}\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: {{ include \"cortex.distributorFullname\" $ }}\n  namespace: {{ $.Release.Namespace }}\n  labels:\n    {{- include \"cortex.distributorLabels\" $ | nindent 4 }}\nspec:\n  scaleTargetRef:\n    apiVersion: apps/v1\n    kind: Deployment\n    name: {{ include \"cortex.distributorFullname\" $ }}\n  minReplicas: {{ .minReplicas }}\n  maxReplicas: {{ .maxReplicas }}\n  metrics:\n  {{- with .targetMemoryUtilizationPercentage }}\n    - type: Resource\n      resource:\n        name: memory\n        target:\n          type: Utilization\n          averageUtilization: {{ . }}\n  {{- end }}\n  {{- with .targetCPUUtilizationPercentage }}\n    - type: Resource\n      resource:\n        name: cpu\n        target:\n          type: Utilization\n          averageUtilization: {{ . }}\n  {{- end }}\n  {{- with .extraMetrics }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- with .behavior }}\n  behavior:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/distributor/distributor-poddisruptionbudget.yaml",
    "content": "{{- if and (gt (int .Values.distributor.replicas) 1) (.Values.distributor.podDisruptionBudget) (.Values.distributor.enabled) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.distributorFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.distributorLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.distributorSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.distributor.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/distributor/distributor-servicemonitor.yaml",
    "content": "{{- if and .Values.distributor.serviceMonitor.enabled .Values.distributor.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.distributorFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.distributorLabels\" . | nindent 4 }}\n    {{- if .Values.distributor.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.distributor.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.distributor.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.distributor.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.distributorSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.distributor.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.distributor.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.distributor.serviceMonitor.interval }}\n    interval: {{ .Values.distributor.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.distributor.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.distributor.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.distributor.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.distributor.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.distributor.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.distributor.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.distributor.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/distributor/distributor-svc-headless.yaml",
    "content": "{{- if .Values.distributor.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.distributorFullname\" . }}-headless\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.distributorLabels\" . | nindent 4 }}\n    {{- with .Values.distributor.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.distributor.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  clusterIP: None\n  publishNotReadyAddresses: true\n  ports:\n    - port: {{ .Values.config.server.grpc_listen_port }}\n      protocol: TCP\n      name: grpc\n      targetPort: grpc\n  selector:\n    {{- include \"cortex.distributorSelectorLabels\" . | nindent 4 }}\n{{- end }}"
  },
  {
    "path": "templates/distributor/distributor-svc.yaml",
    "content": "{{- if .Values.distributor.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.distributorFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.distributorLabels\" . | nindent 4 }}\n    {{- with .Values.distributor.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.distributor.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.distributorSelectorLabels\" . | nindent 4 }}\n{{- end }}"
  },
  {
    "path": "templates/ingester/_helpers-ingester.tpl",
    "content": "\n{{/*\ningester fullname\n*/}}\n{{- define \"cortex.ingesterFullname\" -}}\n{{ include \"cortex.fullname\" . }}-ingester\n{{- end }}\n\n{{/*\ningester common labels\n*/}}\n{{- define \"cortex.ingesterLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: ingester\n{{- end }}\n\n{{/*\ningester selector labels\n*/}}\n{{- define \"cortex.ingesterSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: ingester\n{{- end }}\n"
  },
  {
    "path": "templates/ingester/ingester-dep.yaml",
    "content": "{{- if and (not .Values.ingester.statefulSet.enabled) .Values.ingester.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.ingesterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.ingesterLabels\" . | nindent 4 }}\n    app.kubernetes.io/part-of: memberlist\n  annotations:\n    {{- toYaml .Values.ingester.annotations | nindent 4 }}\nspec:\n  {{- if not .Values.ingester.autoscaling.enabled }}\n  replicas: {{ .Values.ingester.replicas }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.ingesterSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.ingester.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.ingesterLabels\" . | nindent 8 }}\n        app.kubernetes.io/part-of: memberlist\n        {{- with .Values.ingester.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n        {{- with .Values.ingester.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.ingester.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.ingester.priorityClassName }}\n      priorityClassName: {{ .Values.ingester.priorityClassName }}\n      {{- end }}\n      {{- if .Values.ingester.securityContext.enabled }}\n      securityContext: {{- omit .Values.ingester.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.ingester.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        - name: ingester\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=ingester\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n            {{- include \"cortex.memcached\" . | nindent 12}}\n            {{- range $key, $value := .Values.ingester.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n            {{- end }}\n          volumeMounts:\n            {{- if .Values.ingester.extraVolumeMounts }}\n            {{- toYaml .Values.ingester.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n            - name: storage\n              mountPath: \"/data\"\n              {{- with .Values.ingester.persistentVolume.subPath }}\n              subPath: {{ . }}\n              {{- end }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: grpc\n              containerPort: {{ .Values.config.server.grpc_listen_port }}\n              protocol: TCP\n            - name: gossip\n              containerPort: {{ .Values.config.memberlist.bind_port }}\n              protocol: TCP\n          {{- if .Values.ingester.startupProbe }}\n          startupProbe:\n            {{- toYaml .Values.ingester.startupProbe | nindent 12 }}\n          {{- end }}\n          {{- if .Values.ingester.livenessProbe }}\n          livenessProbe:\n            {{- toYaml .Values.ingester.livenessProbe | nindent 12 }}\n          {{- end }}\n          readinessProbe:\n            {{- toYaml .Values.ingester.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.ingester.resources | nindent 12 }}\n          {{- if .Values.ingester.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.ingester.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          env:\n            {{- if .Values.ingester.env }}\n            {{ toYaml .Values.ingester.env | nindent 12 }}\n            {{- end }}\n          {{- with .Values.ingester.lifecycle }}\n          lifecycle:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n        {{- with .Values.ingester.extraContainers }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.ingester.nodeSelector | nindent 8 }}\n      {{- if .Values.ingester.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.ingester.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.ingester.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.ingester.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.ingester.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        - name: storage\n          emptyDir: {}\n        {{- if .Values.ingester.extraVolumes }}\n        {{- toYaml .Values.ingester.extraVolumes | nindent 8}}\n        {{- end }}\n{{- end -}}\n"
  },
  {
    "path": "templates/ingester/ingester-hpa.yaml",
    "content": "{{- if and .Values.ingester.enabled .Values.ingester.autoscaling.enabled -}}\n{{- with .Values.ingester.autoscaling -}}\napiVersion: {{ include \"cortex.hpaVersion\" $ }}\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: {{ include \"cortex.ingesterFullname\" $ }}\n  namespace: {{ $.Release.Namespace }}\n  labels:\n    {{- include \"cortex.ingesterLabels\" $ | nindent 4 }}\nspec:\n  scaleTargetRef:\n    apiVersion: apps/v1\n    kind: {{ if $.Values.ingester.statefulSet.enabled }}StatefulSet{{ else }}Deployment{{ end }}\n    name: {{ include \"cortex.ingesterFullname\" $ }}\n  minReplicas: {{ .minReplicas }}\n  maxReplicas: {{ .maxReplicas }}\n  metrics:\n    - type: Resource\n      resource:\n        name: memory\n        target:\n          type: Utilization\n          averageUtilization: {{ .targetMemoryUtilizationPercentage }}\n  {{- with .extraMetrics }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- with .behavior }}\n  behavior:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/ingester/ingester-poddisruptionbudget.yaml",
    "content": "{{- if and (gt (int .Values.ingester.replicas) 1) (.Values.ingester.podDisruptionBudget) (.Values.ingester.enabled) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.ingesterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.ingesterLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.ingesterSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.ingester.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/ingester/ingester-servicemonitor.yaml",
    "content": "{{- if and .Values.ingester.serviceMonitor.enabled .Values.ingester.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.ingesterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.ingesterLabels\" . | nindent 4 }}\n    {{- if .Values.ingester.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.ingester.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.ingester.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.ingester.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.ingesterSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.ingester.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.ingester.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.ingester.serviceMonitor.interval }}\n    interval: {{ .Values.ingester.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.ingester.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.ingester.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.ingester.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.ingester.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.ingester.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.ingester.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.ingester.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/ingester/ingester-statefulset.yaml",
    "content": "{{- if and .Values.ingester.statefulSet.enabled .Values.ingester.enabled -}}\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: {{ include \"cortex.ingesterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.ingesterLabels\" . | nindent 4 }}\n    app.kubernetes.io/part-of: memberlist\n  annotations:\n    {{- toYaml .Values.ingester.annotations | nindent 4 }}\nspec:\n  {{- if not .Values.ingester.autoscaling.enabled }}\n  replicas: {{ .Values.ingester.replicas }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.ingesterSelectorLabels\" . | nindent 6 }}\n  updateStrategy:\n    {{- toYaml .Values.ingester.statefulStrategy | nindent 4 }}          \n  podManagementPolicy: \"{{ .Values.ingester.statefulSet.podManagementPolicy }}\"\n  serviceName: {{ template \"cortex.fullname\" . }}-ingester-headless\n  {{- if .Values.ingester.persistentVolume.enabled }}\n  {{- if semverCompare \">=1.23-0\" .Capabilities.KubeVersion.Version }}\n  {{- with .Values.ingester.persistentVolume.retentionPolicy }}\n  persistentVolumeClaimRetentionPolicy:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- end }}\n  volumeClaimTemplates:\n    - metadata:\n        name: storage\n        {{- if .Values.ingester.persistentVolume.annotations }}\n        annotations:\n          {{ toYaml .Values.ingester.persistentVolume.annotations | nindent 10 }}\n        {{- end }}\n      spec:\n        {{- if .Values.ingester.persistentVolume.storageClass }}\n        {{- if (eq \"-\" .Values.ingester.persistentVolume.storageClass) }}\n        storageClassName: \"\"\n        {{- else }}\n        storageClassName: \"{{ .Values.ingester.persistentVolume.storageClass }}\"\n        {{- end }}\n        {{- end }}\n        accessModes:\n          {{ toYaml .Values.ingester.persistentVolume.accessModes | nindent 10 }}\n        resources:\n          requests:\n            storage: \"{{ .Values.ingester.persistentVolume.size }}\"\n  {{- end }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.ingesterLabels\" . | nindent 8 }}\n        app.kubernetes.io/part-of: memberlist\n        {{- with .Values.ingester.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n        {{- with .Values.ingester.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.ingester.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.ingester.priorityClassName }}\n      priorityClassName: {{ .Values.ingester.priorityClassName }}\n      {{- end }}\n      {{- if .Values.ingester.securityContext.enabled }}\n      securityContext: {{- omit .Values.ingester.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.ingester.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.ingester.nodeSelector | nindent 8 }}\n      {{- if .Values.ingester.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.ingester.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.ingester.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.ingester.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.ingester.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        {{- if not .Values.ingester.persistentVolume.enabled }}\n        - name: storage\n          emptyDir: {}\n        {{- end }}\n        {{- if .Values.ingester.extraVolumes }}\n        {{- toYaml .Values.ingester.extraVolumes | nindent 8 }}\n        {{- end }}\n      containers:\n        {{- if .Values.ingester.extraContainers }}\n        {{- toYaml .Values.ingester.extraContainers | nindent 8 }}\n        {{- end }}\n        - name: ingester\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=ingester\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n            {{- include \"cortex.memcached\" . | nindent 12}}\n            {{- range $key, $value := .Values.ingester.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n            {{- end }}\n          volumeMounts:\n            {{- if .Values.ingester.extraVolumeMounts }}\n            {{- toYaml .Values.ingester.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n            - name: storage\n              mountPath: \"/data\"\n              {{- with .Values.ingester.persistentVolume.subPath }}\n              subPath: {{ . }}\n              {{- end }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: grpc\n              containerPort: {{ .Values.config.server.grpc_listen_port }}\n              protocol: TCP\n            - name: gossip\n              containerPort: {{ .Values.config.memberlist.bind_port }}\n              protocol: TCP\n          {{- if .Values.ingester.startupProbe }}\n          startupProbe:\n            {{- toYaml .Values.ingester.startupProbe | nindent 12 }}\n          {{- end }}\n          {{- if .Values.ingester.livenessProbe }}\n          livenessProbe:\n            {{- toYaml .Values.ingester.livenessProbe | nindent 12 }}\n          {{- end }}\n          readinessProbe:\n            {{- toYaml .Values.ingester.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.ingester.resources | nindent 12 }}\n          {{- if .Values.ingester.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.ingester.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.ingester.env }}\n          env:\n            {{- toYaml .Values.ingester.env | nindent 12 }}\n          {{- end }}\n          {{- with .Values.ingester.lifecycle }}\n          lifecycle:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n{{- end -}}\n"
  },
  {
    "path": "templates/ingester/ingester-svc-headless.yaml",
    "content": "{{- if .Values.ingester.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.ingesterFullname\" . }}-headless\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.ingesterLabels\" . | nindent 4 }}\n    {{- with .Values.ingester.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.ingester.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  clusterIP: None\n  ports:\n    - port: {{ .Values.config.server.grpc_listen_port }}\n      protocol: TCP\n      name: grpc\n      targetPort: grpc\n  selector:\n    {{- include \"cortex.ingesterSelectorLabels\" . | nindent 4 }}\n{{- end }}"
  },
  {
    "path": "templates/ingester/ingester-svc.yaml",
    "content": "{{- if .Values.ingester.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.ingesterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.ingesterLabels\" . | nindent 4 }}\n    {{- with .Values.ingester.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.ingester.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.ingesterSelectorLabels\" . | nindent 4 }}\n{{- end }}"
  },
  {
    "path": "templates/nginx/_helpers-nginx.tpl",
    "content": "\n{{/*\nnginx fullname\n*/}}\n{{- define \"cortex.nginxFullname\" -}}\n{{ include \"cortex.fullname\" . }}-nginx\n{{- end }}\n\n{{/*\nnginx common labels\n*/}}\n{{- define \"cortex.nginxLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: nginx\n{{- end }}\n\n{{/*\nnginx selector labels\n*/}}\n{{- define \"cortex.nginxSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: nginx\n{{- end }}\n"
  },
  {
    "path": "templates/nginx/nginx-config.yaml",
    "content": "{{- if .Values.nginx.enabled }}\n{{- $rootDomain := printf \"%s.svc.%s:%d\" .Release.Namespace .Values.clusterDomain (.Values.config.server.http_listen_port | int) }}\nkind: ConfigMap\napiVersion: v1\nmetadata:\n  name: {{ include \"cortex.nginxFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.nginxLabels\" . | nindent 4 }}\ndata:\n  nginx.conf: |-\n    worker_processes  5;  ## Default: 1\n    error_log  /dev/stderr;\n    pid        /tmp/nginx.pid;\n    worker_rlimit_nofile 8192;\n\n    events {\n      worker_connections  4096;  ## Default: 1024\n    }\n\n    {{- with .Values.nginx.config.mainSnippet }}\n    {{ tpl . $ | nindent 4 }}\n    {{- end }}\n\n    http {\n      default_type application/octet-stream;\n      client_max_body_size {{.Values.nginx.config.client_max_body_size}};\n      log_format   main '$remote_addr - $remote_user [$time_local]  $status '\n        '\"$request\" $body_bytes_sent \"$http_referer\" '\n        '\"$http_user_agent\" \"$http_x_forwarded_for\" $http_x_scope_orgid';\n\n      {{- if .Values.nginx.config.verboseLogging }}\n      access_log   /dev/stderr  main;\n      {{- else }}\n      map $status $loggable {\n        ~^[23]  0;\n        default 1;\n      }\n      access_log   /dev/stderr  main  if=$loggable;\n      {{- end }}\n\n      sendfile     on;\n      tcp_nopush   on;\n      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 }};\n\n      {{- with .Values.nginx.config.httpSnippet }}\n      {{ tpl . $ | nindent 6 }}\n      {{- end }}\n\n      server { # simple reverse-proxy\n        listen {{ .Values.nginx.http_listen_port }};\n        proxy_connect_timeout 300s;\n        proxy_send_timeout 300s;\n        proxy_read_timeout 300s;\n        proxy_http_version 1.1;\n\n        {{- range $key, $value := .Values.nginx.config.setHeaders }}\n        proxy_set_header {{ $key }} {{ $value }};\n        {{- end }}\n\n        {{ if .Values.nginx.config.basicAuthSecretName -}}\n        auth_basic \"Restricted Content\";\n        auth_basic_user_file /etc/apache2/.htpasswd;\n        {{- end }}\n\n        {{- with .Values.nginx.config.serverSnippet }}\n        {{ tpl . $ | nindent 8 }}\n        {{- end }}\n\n        location = /healthz {\n          # auth_basic off is not set here, even when a basic auth directive is\n          # included in the server block, as Nginx's NGX_HTTP_REWRITE_PHASE\n          # (point when this return statement is evaluated) comes before the\n          # NGX_HTTP_ACCESS_PHASE (point when basic auth is evaluated). Thus,\n          # this return statement returns a response before basic auth is\n          # evaluated.\n          return 200 'alive';\n        }\n\n        {{- if .Values.distributor.enabled }}\n\n        # Distributor Config\n        location = /ring {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-distributor.{{ $rootDomain }}$request_uri;\n        }\n\n        location = /all_user_stats {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-distributor.{{ $rootDomain }}$request_uri;\n        }\n        {{- $push_endpoint := .Values.nginx.config.override_push_endpoint | default (printf \"%s://%s-distributor.%s\" .Values.nginx.config.upstream_protocol (include \"cortex.fullname\" .) $rootDomain) }}\n        # Push API endpoints\n        location = /api/prom/push {\n          proxy_pass      {{ $push_endpoint }}$request_uri;\n        }\n\n        ## New Remote write API. Ref: https://cortexmetrics.io/docs/api/#remote-write\n        location = /api/v1/push {\n          proxy_pass      {{ $push_endpoint }}$request_uri;\n        }\n        {{- end }}\n\n        {{- if .Values.alertmanager.enabled }}\n\n        # Alertmanager Config\n        location ~ /api/prom/alertmanager/.* {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-alertmanager.{{ $rootDomain }}$request_uri;\n        }\n\n        location ~ /api/v1/alerts {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-alertmanager.{{ $rootDomain }}$request_uri;\n        }\n\n        location ~ /multitenant_alertmanager/status {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-alertmanager.{{ $rootDomain }}$request_uri;\n        }\n\n        location = /api/prom/api/v1/alerts {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-alertmanager.{{ $rootDomain }}/api/v1/alerts;\n        }\n\n        {{- end }}\n\n        {{- if .Values.ruler.enabled }}\n\n        # Ruler Config\n        location ~ /api/v1/rules {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-ruler.{{ $rootDomain }}$request_uri;\n        }\n\n        location ~ /ruler/ring {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-ruler.{{ $rootDomain }}$request_uri;\n        }\n\n        location ~ /api/prom/rules {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-ruler.{{ $rootDomain }}$request_uri;\n        }\n\n        {{- end }}\n\n        {{- if .Values.query_frontend.enabled }}\n\n        # Query Config\n        location ~ /api/prom/.* {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-query-frontend.{{ $rootDomain }}$request_uri;\n        }\n\n        ## New Query frontend APIs as per https://cortexmetrics.io/docs/api/#querier--query-frontend\n        location ~ ^{{.Values.config.api.prometheus_http_prefix}}/api/v1/(read|metadata|labels|series|query_range|query) {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-query-frontend.{{ $rootDomain }}$request_uri;\n        }\n\n        location ~ {{.Values.config.api.prometheus_http_prefix}}/api/v1/label/.* {\n          proxy_pass      {{ .Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" . }}-query-frontend.{{ $rootDomain }}$request_uri;\n        }\n\n        {{- end }}\n\n        {{- if and (.Values.config.auth_enabled) (.Values.nginx.config.auth_orgs) }}\n        # Auth orgs\n        {{- range $org := compact .Values.nginx.config.auth_orgs | uniq }}\n        location = /api/v1/push/{{ $org }} {\n          proxy_set_header      X-Scope-OrgID {{ $org }};\n          proxy_pass      {{ $.Values.nginx.config.upstream_protocol }}://{{ template \"cortex.fullname\" $ }}-distributor.{{ $rootDomain }}/api/v1/push;\n        }\n        {{- end }}\n        {{- end }}\n      }\n    }\n{{- end }}\n"
  },
  {
    "path": "templates/nginx/nginx-dep.yaml",
    "content": "{{- if .Values.nginx.enabled }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.nginxFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.nginxLabels\" . | nindent 4 }}\n  annotations:\n    {{- toYaml .Values.nginx.annotations | nindent 4 }}\nspec:\n  {{- if not .Values.nginx.autoscaling.enabled }}\n  replicas: {{ .Values.nginx.replicas }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.nginxSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.nginx.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.nginxLabels\" . | nindent 8 }}\n        {{- with .Values.nginx.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include (print $.Template.BasePath \"/nginx/nginx-config.yaml\") . | sha256sum }}\n        {{- with .Values.nginx.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.nginx.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.nginx.priorityClassName }}\n      priorityClassName: {{ .Values.nginx.priorityClassName }}\n      {{- end }}\n      {{- if .Values.nginx.securityContext.enabled }}\n      securityContext: {{- omit .Values.nginx.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.nginx.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        - name: nginx\n          image: \"{{ .Values.nginx.image.repository }}:{{ .Values.nginx.image.tag }}\"\n          imagePullPolicy: {{ .Values.nginx.image.pullPolicy }}\n          {{- if .Values.nginx.extraArgs }}\n          args:\n          {{- range $key, $value := .Values.nginx.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          {{- end }}\n          volumeMounts:\n            {{- if .Values.nginx.extraVolumeMounts }}\n            {{- toYaml .Values.nginx.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/nginx\n            {{- if .Values.nginx.config.basicAuthSecretName }}\n            - name: htpasswd\n              mountPath: /etc/apache2\n              readOnly: true\n            {{- end }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.nginx.http_listen_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.nginx.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.nginx.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.nginx.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.nginx.resources | nindent 12 }}\n          {{- if .Values.nginx.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.nginx.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.nginx.env }}\n          env:\n            {{- toYaml .Values.nginx.env | nindent 12 }}\n          {{- end }}\n        {{- if .Values.nginx.extraContainers }}\n        {{- toYaml .Values.nginx.extraContainers | nindent 8}}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.nginx.nodeSelector | nindent 8 }}\n      {{- if .Values.nginx.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.nginx.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.nginx.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.nginx.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.nginx.terminationGracePeriodSeconds }}\n      volumes:\n        - name: config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-nginx\n        {{- if .Values.nginx.config.basicAuthSecretName }}\n        - name: htpasswd\n          secret:\n            defaultMode: 420\n            secretName: {{ .Values.nginx.config.basicAuthSecretName }}\n        {{- end }}\n        {{- if .Values.nginx.extraVolumes }}\n        {{- toYaml .Values.nginx.extraVolumes | nindent 8}}\n        {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/nginx/nginx-hpa.yaml",
    "content": "{{- if and .Values.nginx.enabled .Values.nginx.autoscaling.enabled }}\n{{- with .Values.nginx.autoscaling -}}\napiVersion: {{ include \"cortex.hpaVersion\" $ }}\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: {{ include \"cortex.nginxFullname\" $ }}\n  namespace: {{ $.Release.Namespace }}\n  labels:\n    {{- include \"cortex.nginxLabels\" $ | nindent 4 }}\nspec:\n  scaleTargetRef:\n    apiVersion: apps/v1\n    kind: Deployment\n    name: {{ include \"cortex.nginxFullname\" $ }}\n  minReplicas: {{ .minReplicas }}\n  maxReplicas: {{ .maxReplicas }}\n  metrics:\n  {{- with .targetMemoryUtilizationPercentage }}\n    - type: Resource\n      resource:\n        name: memory\n        target:\n          type: Utilization\n          averageUtilization: {{ . }}\n  {{- end }}\n  {{- with .targetCPUUtilizationPercentage }}\n    - type: Resource\n      resource:\n        name: cpu\n        target:\n          type: Utilization\n          averageUtilization: {{ . }}\n  {{- end }}\n  {{- with .extraMetrics }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- with .behavior }}\n  behavior:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/nginx/nginx-ingress.yaml",
    "content": "{{- if and .Values.ingress.enabled .Values.nginx.enabled -}}\napiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n  name: {{ include \"cortex.nginxFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.nginxLabels\" . | nindent 4 }}\n  annotations:\n    {{- toYaml .Values.ingress.annotations | nindent 4 }}\nspec:\n{{- if .Values.ingress.ingressClass.enabled }}\n  ingressClassName: {{ .Values.ingress.ingressClass.name }}\n{{- end }}\n{{- if .Values.ingress.tls }}\n  tls:\n  {{- range .Values.ingress.tls }}\n    - hosts:\n      {{- range .hosts }}\n        - {{ . | quote }}\n      {{- end }}\n      secretName: {{ .secretName }}\n  {{- end }}\n{{- end }}\n  rules:\n  {{- range .Values.ingress.hosts }}\n    - host: {{ .host | quote }}\n      http:\n        paths:\n        {{- range .paths }}\n          - path: {{ . }}\n            pathType: \"Prefix\"\n            backend:\n              service:\n                name: {{ include \"cortex.nginxFullname\" $ }}\n                port:\n                  number: {{ $.Values.nginx.service.port | default $.Values.nginx.http_listen_port }}\n        {{- end }}\n  {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/nginx/nginx-poddisruptionbudget.yaml",
    "content": "{{- if and (.Values.nginx.enabled) (gt (int .Values.nginx.replicas) 1) (.Values.nginx.podDisruptionBudget) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.nginxFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.nginxLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.nginxSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.nginx.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/nginx/nginx-svc.yaml",
    "content": "{{- if .Values.nginx.enabled }}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.nginxFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.nginxLabels\" . | nindent 4 }}\n    {{- with .Values.nginx.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.nginx.service.annotations | nindent 4 }}\nspec:\n  type: {{ .Values.nginx.service.type }}\n  ports:\n    - port: {{ .Values.nginx.service.port | default .Values.nginx.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.nginxSelectorLabels\" . | nindent 4 }}\n{{- end }}\n"
  },
  {
    "path": "templates/overrides-exporter/_helpers-overrides-exporter.tpl",
    "content": "\n{{/*\noverrides-exporter fullname\n*/}}\n{{- define \"cortex.overridesExporterFullname\" -}}\n{{ include \"cortex.fullname\" . }}-overrides-exporter\n{{- end }}\n\n{{/*\noverrides-exporter common labels\n*/}}\n{{- define \"cortex.overridesExporterLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: overrides-exporter\n{{- end }}\n\n{{/*\noverrides-exporter selector labels\n*/}}\n{{- define \"cortex.overridesExporterSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: overrides-exporter\n{{- end }}\n"
  },
  {
    "path": "templates/overrides-exporter/overrides-exporter-dep.yaml",
    "content": "{{- if .Values.overrides_exporter.enabled }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.overridesExporterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.overridesExporterLabels\" . | nindent 4 }}\n  annotations:\n    {{- toYaml .Values.overrides_exporter.annotations | nindent 4 }}\nspec:\n  replicas: {{ .Values.overrides_exporter.replicas }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.overridesExporterSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.overrides_exporter.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.overridesExporterLabels\" . | nindent 8 }}\n        {{- with .Values.overrides_exporter.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n      {{- if .Values.useExternalConfig }}\n        checksum/config: {{ .Values.externalConfigVersion }}\n      {{- else }}\n        checksum/config: {{ include (print $.Template.BasePath \"/secret.yaml\") . | sha256sum }}\n      {{- end }}\n      {{- with .Values.overrides_exporter.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n    spec:\n      serviceAccountName: {{ template \"cortex.serviceAccountName\" . }}\n      {{- if .Values.overrides_exporter.priorityClassName }}\n      priorityClassName: {{ .Values.overrides_exporter.priorityClassName }}\n      {{- end }}\n      {{- if .Values.overrides_exporter.securityContext.enabled }}\n      securityContext: {{- omit .Values.overrides_exporter.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.overrides_exporter.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        - name: overrides-exporter\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=overrides-exporter\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n          {{- range $key, $value := .Values.overrides_exporter.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          volumeMounts:\n            {{- if .Values.overrides_exporter.extraVolumeMounts }}\n            {{- toYaml .Values.overrides_exporter.extraVolumeMounts | nindent 12 }}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.overrides_exporter.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.overrides_exporter.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.overrides_exporter.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.overrides_exporter.resources | nindent 12 }}\n          {{- if .Values.overrides_exporter.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.overrides_exporter.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.overrides_exporter.env }}\n          env:\n            {{- toYaml .Values.overrides_exporter.env | nindent 12 }}\n          {{- end }}\n          {{- with .Values.overrides_exporter.lifecycle }}\n          lifecycle:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n        {{- if .Values.overrides_exporter.extraContainers }}\n        {{- toYaml .Values.overrides_exporter.extraContainers | nindent 8 }}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.overrides_exporter.nodeSelector | nindent 8 }}\n      {{- if .Values.overrides_exporter.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.overrides_exporter.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.overrides_exporter.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.overrides_exporter.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.overrides_exporter.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        {{- if .Values.overrides_exporter.extraVolumes }}\n        {{- toYaml .Values.overrides_exporter.extraVolumes | nindent 8 }}\n        {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/overrides-exporter/overrides-exporter-poddisruptionbudget.yaml",
    "content": "{{- if and (gt (int .Values.overrides_exporter.replicas) 1) (.Values.overrides_exporter.podDisruptionBudget) (.Values.overrides_exporter.enabled) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.overridesExporterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.overridesExporterLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.overridesExporterSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.overrides_exporter.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/overrides-exporter/overrides-exporter-servicemonitor.yaml",
    "content": "{{- if and .Values.overrides_exporter.enabled .Values.overrides_exporter.serviceMonitor.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.overridesExporterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.overridesExporterLabels\" . | nindent 4 }}\n    {{- if .Values.overrides_exporter.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.overrides_exporter.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.overrides_exporter.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.overrides_exporter.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.overridesExporterSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.overrides_exporter.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.overrides_exporter.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.overrides_exporter.serviceMonitor.interval }}\n    interval: {{ .Values.overrides_exporter.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.overrides_exporter.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.overrides_exporter.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.overrides_exporter.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.overrides_exporter.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.overrides_exporter.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.overrides_exporter.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.overrides_exporter.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/overrides-exporter/overrides-exporter-svc.yaml",
    "content": "{{- if .Values.overrides_exporter.enabled }}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.overridesExporterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.overridesExporterLabels\" . | nindent 4 }}\n    {{- with .Values.overrides_exporter.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.overrides_exporter.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.overridesExporterSelectorLabels\" . | nindent 4 }}\n{{- end }}\n"
  },
  {
    "path": "templates/parquet-converter/_helpers-parquet-converter.tpl",
    "content": "\n{{/*\nparquet-converter fullname\n*/}}\n{{- define \"cortex.parquetConverterFullname\" -}}\n{{ include \"cortex.fullname\" . }}-parquet-converter\n{{- end }}\n\n{{/*\nparquet-converter common labels\n*/}}\n{{- define \"cortex.parquetConverterLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: parquet-converter\n{{- end }}\n\n{{/*\nparquet-converter selector labels\n*/}}\n{{- define \"cortex.parquetConverterSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: parquet-converter\n{{- end }}\n"
  },
  {
    "path": "templates/parquet-converter/parquet-converter-dep.yaml",
    "content": "{{- if .Values.parquet_converter.enabled }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.parquetConverterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.parquetConverterLabels\" . | nindent 4 }}\n  annotations:\n    {{- toYaml .Values.parquet_converter.annotations | nindent 4 }}\nspec:\n  replicas: {{ .Values.parquet_converter.replicas }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.parquetConverterSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.parquet_converter.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.parquetConverterLabels\" . | nindent 8 }}\n        {{- with .Values.parquet_converter.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n      {{- if .Values.useExternalConfig }}\n        checksum/config: {{ .Values.externalConfigVersion }}\n      {{- else }}\n        checksum/config: {{ include (print $.Template.BasePath \"/secret.yaml\") . | sha256sum }}\n      {{- end }}\n      {{- with .Values.parquet_converter.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n    spec:\n      serviceAccountName: {{ template \"cortex.serviceAccountName\" . }}\n      {{- if .Values.parquet_converter.priorityClassName }}\n      priorityClassName: {{ .Values.parquet_converter.priorityClassName }}\n      {{- end }}\n      {{- if .Values.parquet_converter.securityContext.enabled }}\n      securityContext: {{- omit .Values.parquet_converter.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.parquet_converter.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        - name: parquet-converter\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=parquet-converter\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n          {{- range $key, $value := .Values.parquet_converter.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          volumeMounts:\n            {{- if .Values.parquet_converter.extraVolumeMounts }}\n            {{- toYaml .Values.parquet_converter.extraVolumeMounts | nindent 12 }}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.parquet_converter.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.parquet_converter.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.parquet_converter.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.parquet_converter.resources | nindent 12 }}\n          {{- if .Values.parquet_converter.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.parquet_converter.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.parquet_converter.env }}\n          env:\n            {{- toYaml .Values.parquet_converter.env | nindent 12 }}\n          {{- end }}\n          {{- with .Values.parquet_converter.lifecycle }}\n          lifecycle:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n        {{- if .Values.parquet_converter.extraContainers }}\n        {{- toYaml .Values.parquet_converter.extraContainers | nindent 8 }}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.parquet_converter.nodeSelector | nindent 8 }}\n      {{- if .Values.parquet_converter.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.parquet_converter.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.parquet_converter.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.parquet_converter.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.parquet_converter.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        {{- if .Values.parquet_converter.extraVolumes }}\n        {{- toYaml .Values.parquet_converter.extraVolumes | nindent 8 }}\n        {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/parquet-converter/parquet-converter-servicemonitor.yaml",
    "content": "{{- if and .Values.parquet_converter.enabled .Values.parquet_converter.serviceMonitor.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.parquetConverterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.parquetConverterLabels\" . | nindent 4 }}\n    {{- if .Values.parquet_converter.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.parquet_converter.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.parquet_converter.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.parquet_converter.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.parquetConverterSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.parquet_converter.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.parquet_converter.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n    - port: http-metrics\n    {{- if .Values.parquet_converter.serviceMonitor.interval }}\n      interval: {{ .Values.parquet_converter.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.parquet_converter.serviceMonitor.scrapeTimeout }}\n      scrapeTimeout: {{ .Values.parquet_converter.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.parquet_converter.serviceMonitor.relabelings }}\n      relabelings:\n    {{- toYaml .Values.parquet_converter.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.parquet_converter.serviceMonitor.metricRelabelings }}\n      metricRelabelings:\n    {{- toYaml .Values.parquet_converter.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.parquet_converter.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/parquet-converter/parquet-converter-svc.yaml",
    "content": "{{- if .Values.parquet_converter.enabled }}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.parquetConverterFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.parquetConverterLabels\" . | nindent 4 }}\n    {{- with .Values.parquet_converter.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.parquet_converter.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.parquetConverterSelectorLabels\" . | nindent 4 }}\n{{- end }}\n"
  },
  {
    "path": "templates/purger/_helpers-purger.tpl",
    "content": "\n{{/*\npurger fullname\n*/}}\n{{- define \"cortex.purgerFullname\" -}}\n{{ include \"cortex.fullname\" . }}-purger\n{{- end }}\n\n{{/*\npurger common labels\n*/}}\n{{- define \"cortex.purgerLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: purger\n{{- end }}\n\n{{/*\npurger selector labels\n*/}}\n{{- define \"cortex.purgerSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: purger\n{{- end }}\n"
  },
  {
    "path": "templates/purger/purger-dep.yaml",
    "content": "{{- if .Values.purger.enabled }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.purgerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.purgerLabels\" . | nindent 4 }}\n  annotations:\n    {{- toYaml .Values.purger.annotations | nindent 4 }}\nspec:\n  replicas: {{ .Values.purger.replicas }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.purgerSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.purger.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.purgerLabels\" . | nindent 8 }}\n        {{- with .Values.purger.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n      {{- with .Values.query_frontend.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.purger.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.purger.securityContext.enabled }}\n      securityContext: {{- omit .Values.purger.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.purger.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        - name: purger\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=purger\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n          {{- range $key, $value := .Values.purger.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          volumeMounts:\n            {{- if .Values.purger.extraVolumeMounts }}\n            {{- toYaml .Values.purger.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: grpc\n              containerPort: {{ .Values.config.server.grpc_listen_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.purger.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.purger.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.purger.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.purger.resources | nindent 12 }}\n          {{- if .Values.purger.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.purger.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.purger.env }}\n          env:\n            {{- toYaml .Values.purger.env | nindent 12 }}\n          {{- end }}\n          {{- with .Values.purger.lifecycle }}\n          lifecycle:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n        {{- if .Values.purger.extraContainers }}\n        {{- toYaml .Values.purger.extraContainers | nindent 8}}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.purger.nodeSelector | nindent 8 }}\n      {{- if .Values.purger.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.purger.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.purger.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.purger.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.purger.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        {{- if .Values.purger.extraVolumes }}\n        {{- toYaml .Values.purger.extraVolumes | nindent 8}}\n        {{- end }}\n{{- end -}}"
  },
  {
    "path": "templates/purger/purger-servicemonitor.yaml",
    "content": "{{- if .Values.purger.serviceMonitor.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.purgerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.purgerLabels\" . | nindent 4 }}\n    {{- if .Values.purger.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.purger.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.purger.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.purger.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.purgerSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.purger.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.purger.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.purger.serviceMonitor.interval }}\n    interval: {{ .Values.purger.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.purger.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.purger.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.purger.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.purger.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.purger.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.purger.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.purger.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/purger/purger-svc-headless.yaml",
    "content": "{{- if .Values.purger.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.purgerFullname\" . }}-headless\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.purgerLabels\" . | nindent 4 }}\n    {{- with .Values.purger.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.purger.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  clusterIP: None\n  publishNotReadyAddresses: true\n  ports:\n    - port: {{ .Values.config.server.grpc_listen_port }}\n      protocol: TCP\n      name: grpc\n      targetPort: grpc\n  selector:\n    {{- include \"cortex.purgerSelectorLabels\" . | nindent 4 }}\n{{- end }}"
  },
  {
    "path": "templates/purger/purger-svc.yaml",
    "content": "{{- if .Values.purger.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.purgerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.purgerLabels\" . | nindent 4 }}\n    {{- with .Values.purger.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.purger.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.purgerSelectorLabels\" . | nindent 4 }}\n{{- end -}}\n"
  },
  {
    "path": "templates/querier/_helpers-querier.tpl",
    "content": "\n{{/*\nquerier fullname\n*/}}\n{{- define \"cortex.querierFullname\" -}}\n{{ include \"cortex.fullname\" . }}-querier\n{{- end }}\n\n{{/*\nquerier common labels\n*/}}\n{{- define \"cortex.querierLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: querier\n{{- end }}\n\n{{/*\nquerier selector labels\n*/}}\n{{- define \"cortex.querierSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: querier\n{{- end }}\n"
  },
  {
    "path": "templates/querier/querier-dep.yaml",
    "content": "{{- if .Values.querier.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.querierFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.querierLabels\" . | nindent 4 }}\n  annotations:\n    {{- toYaml .Values.querier.annotations | nindent 4 }}\nspec:\n  {{- if not .Values.querier.autoscaling.enabled }}\n  replicas: {{ .Values.querier.replicas }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.querierSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.querier.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.querierLabels\" . | nindent 8 }}\n        {{- with .Values.querier.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n        {{- with .Values.querier.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.querier.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.querier.priorityClassName }}\n      priorityClassName: {{ .Values.querier.priorityClassName }}\n      {{- end }}\n      {{- if .Values.querier.securityContext.enabled }}\n      securityContext: {{- omit .Values.querier.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.querier.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        - name: querier\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=querier\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n          {{- if .Values.query_scheduler.enabled }}\n            - \"-querier.scheduler-address={{ template \"cortex.querySchedulerFullname\" . }}-headless.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:{{ .Values.config.server.grpc_listen_port }}\"\n          {{- end }}\n          {{- if and .Values.query_frontend.enabled (not .Values.query_scheduler.enabled) }}\n            - \"-querier.frontend-address={{ template \"cortex.queryFrontendFullname\" . }}-headless.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:{{ .Values.config.server.grpc_listen_port }}\"\n          {{- end }}\n          {{- include \"cortex.memcached\" . | nindent 12}}\n          {{- range $key, $value := .Values.querier.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          volumeMounts:\n            {{- if .Values.querier.extraVolumeMounts }}\n            {{- toYaml .Values.querier.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n            - name: storage\n              mountPath: \"/data\"\n              subPath: {{ .Values.querier.persistentVolume.subPath }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.querier.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.querier.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.querier.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.querier.resources | nindent 12 }}\n          {{- if .Values.querier.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.querier.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          env:\n            {{- if .Values.querier.env }}\n              {{- toYaml .Values.querier.env | nindent 12 }}\n            {{- end }}\n          {{- with .Values.querier.lifecycle }}\n          lifecycle:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n        {{- if .Values.querier.extraContainers }}\n        {{- toYaml .Values.querier.extraContainers | nindent 8}}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.querier.nodeSelector | nindent 8 }}\n      {{- if .Values.querier.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.querier.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.querier.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.querier.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.querier.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        - name: storage\n          emptyDir: {}\n        {{- if .Values.querier.extraVolumes }}\n        {{- toYaml .Values.querier.extraVolumes | nindent 8}}\n        {{- end }}\n{{- end -}}\n"
  },
  {
    "path": "templates/querier/querier-hpa.yaml",
    "content": "{{- if and .Values.querier.enabled .Values.querier.autoscaling.enabled -}}\n{{- with .Values.querier.autoscaling -}}\napiVersion: {{ include \"cortex.hpaVersion\" $ }}\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: {{ include \"cortex.querierFullname\" $ }}\n  namespace: {{ $.Release.Namespace }}\n  labels:\n    {{- include \"cortex.querierLabels\" $ | nindent 4 }}\nspec:\n  scaleTargetRef:\n    apiVersion: apps/v1\n    kind: Deployment\n    name: {{ include \"cortex.querierFullname\" $ }}\n  minReplicas: {{ .minReplicas }}\n  maxReplicas: {{ .maxReplicas }}\n  metrics:\n  {{- with .targetMemoryUtilizationPercentage }}\n    - type: Resource\n      resource:\n        name: memory\n        target:\n          type: Utilization\n          averageUtilization: {{ . }}\n  {{- end }}\n  {{- with .targetCPUUtilizationPercentage }}\n    - type: Resource\n      resource:\n        name: cpu\n        target:\n          type: Utilization\n          averageUtilization: {{ . }}\n  {{- end }}\n  {{- with .extraMetrics }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- with .behavior }}\n  behavior:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/querier/querier-poddisruptionbudget.yaml",
    "content": "{{- if and (gt (int .Values.querier.replicas) 1) (.Values.querier.podDisruptionBudget) (.Values.querier.enabled) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.querierFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.querierLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.querierSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.querier.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/querier/querier-servicemonitor.yaml",
    "content": "{{- if and .Values.querier.serviceMonitor.enabled .Values.querier.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.querierFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.querierLabels\" . | nindent 4 }}\n    {{- if .Values.querier.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.querier.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.querier.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.querier.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.querierSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.querier.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.querier.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.querier.serviceMonitor.interval }}\n    interval: {{ .Values.querier.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.querier.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.querier.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.querier.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.querier.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.querier.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.querier.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.querier.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/querier/querier-svc.yaml",
    "content": "{{- if .Values.querier.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.querierFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.querierLabels\" . | nindent 4 }}\n    {{- with .Values.querier.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.querier.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.querierSelectorLabels\" . | nindent 4 }}\n{{- end -}}"
  },
  {
    "path": "templates/query-frontend/_helpers-query-frontend.tpl",
    "content": "\n{{/*\nquery-frontend fullname\n*/}}\n{{- define \"cortex.queryFrontendFullname\" -}}\n{{ include \"cortex.fullname\" . }}-query-frontend\n{{- end }}\n\n{{/*\nquery-frontend common labels\n*/}}\n{{- define \"cortex.queryFrontendLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: query-frontend\n{{- end }}\n\n{{/*\nquery-frontend selector labels\n*/}}\n{{- define \"cortex.queryFrontendSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: query-frontend\n{{- end }}\n"
  },
  {
    "path": "templates/query-frontend/query-frontend-dep.yaml",
    "content": "{{- if .Values.query_frontend.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.queryFrontendFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.queryFrontendLabels\" . | nindent 4 }}\n  annotations:\n    {{- toYaml .Values.query_frontend.annotations | nindent 4 }}\nspec:\n  replicas: {{ .Values.query_frontend.replicas }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.queryFrontendSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.query_frontend.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.queryFrontendLabels\" . | nindent 8 }}\n        {{- with .Values.query_frontend.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n      {{- with .Values.query_frontend.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.query_frontend.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.query_frontend.priorityClassName }}\n      priorityClassName: {{ .Values.query_frontend.priorityClassName }}\n      {{- end }}\n      {{- if .Values.query_frontend.securityContext.enabled }}\n      securityContext: {{- omit .Values.query_frontend.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.query_frontend.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        - name: query-frontend\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=query-frontend\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n            {{- include \"cortex.frontend-memcached\" . | nindent 12 }}\n          {{- if .Values.query_scheduler.enabled }}\n            - \"-frontend.scheduler-address={{ template \"cortex.querySchedulerFullname\" . }}-headless.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:{{ .Values.config.server.grpc_listen_port }}\"\n          {{- end }}\n          {{- range $key, $value := .Values.query_frontend.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          volumeMounts:\n            {{- if .Values.query_frontend.extraVolumeMounts }}\n            {{- toYaml .Values.query_frontend.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: grpc\n              containerPort: {{ .Values.config.server.grpc_listen_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.query_frontend.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.query_frontend.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.query_frontend.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.query_frontend.resources | nindent 12 }}\n          {{- if .Values.query_frontend.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.query_frontend.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.query_frontend.env }}\n          env:\n            {{- toYaml .Values.query_frontend.env | nindent 12 }}\n          {{- end }}\n          {{- with .Values.query_frontend.lifecycle }}\n          lifecycle:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n        {{- if .Values.query_frontend.extraContainers }}\n        {{- toYaml .Values.query_frontend.extraContainers | nindent 8}}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.query_frontend.nodeSelector | nindent 8 }}\n      {{- if .Values.query_frontend.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.query_frontend.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.query_frontend.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.query_frontend.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.query_frontend.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        {{- if .Values.query_frontend.extraVolumes }}\n        {{- toYaml .Values.query_frontend.extraVolumes | nindent 8}}\n        {{- end }}\n{{- end -}}\n"
  },
  {
    "path": "templates/query-frontend/query-frontend-servicemonitor.yaml",
    "content": "{{- if and .Values.query_frontend.serviceMonitor.enabled .Values.query_frontend.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.queryFrontendFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.queryFrontendLabels\" . | nindent 4 }}\n    {{- if .Values.query_frontend.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.query_frontend.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.query_frontend.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.query_frontend.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.queryFrontendSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.query_frontend.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.query_frontend.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.query_frontend.serviceMonitor.interval }}\n    interval: {{ .Values.query_frontend.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.query_frontend.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.query_frontend.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.query_frontend.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.query_frontend.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.query_frontend.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.query_frontend.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.query_frontend.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/query-frontend/query-frontend-svc-headless.yaml",
    "content": "{{- if .Values.query_frontend.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.queryFrontendFullname\" . }}-headless\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.queryFrontendLabels\" . | nindent 4 }}\n    {{- with .Values.query_frontend.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.query_frontend.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  clusterIP: None\n  publishNotReadyAddresses: true\n  ports:\n    - port: {{ .Values.config.server.grpc_listen_port }}\n      protocol: TCP\n      name: grpc\n      targetPort: grpc\n  selector:\n    {{- include \"cortex.queryFrontendSelectorLabels\" . | nindent 4 }}\n{{- end -}}"
  },
  {
    "path": "templates/query-frontend/query-frontend-svc.yaml",
    "content": "{{- if .Values.query_frontend.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.queryFrontendFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.queryFrontendLabels\" . | nindent 4 }}\n    {{- with .Values.query_frontend.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.query_frontend.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n    - port: {{ .Values.config.server.grpc_listen_port }}\n      protocol: TCP\n      name: grpc\n      targetPort: grpc\n  selector:\n    {{- include \"cortex.queryFrontendSelectorLabels\" . | nindent 4 }}\n{{- end -}}\n"
  },
  {
    "path": "templates/query-frontend/query-poddisruptionbudget.yaml",
    "content": "{{- if and (gt (int .Values.query_frontend.replicas) 1) (.Values.query_frontend.podDisruptionBudget) (.Values.query_frontend.enabled) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.queryFrontendFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.queryFrontendLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.queryFrontendSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.query_frontend.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/query-scheduler/_helpers-query-scheduler.tpl",
    "content": "\n{{/*\nquery-scheduler fullname\n*/}}\n{{- define \"cortex.querySchedulerFullname\" -}}\n{{ include \"cortex.fullname\" . }}-query-scheduler\n{{- end }}\n\n{{/*\nquery-scheduler common labels\n*/}}\n{{- define \"cortex.querySchedulerLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: query-scheduler\n{{- end }}\n\n{{/*\nquery-scheduler selector labels\n*/}}\n{{- define \"cortex.querySchedulerSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: query-scheduler\n{{- end }}\n"
  },
  {
    "path": "templates/query-scheduler/query-scheduler-dep.yaml",
    "content": "{{- if .Values.query_scheduler.enabled }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.querySchedulerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.querySchedulerLabels\" . | nindent 4 }}\n  annotations:\n    {{- toYaml .Values.query_scheduler.annotations | nindent 4 }}\nspec:\n  replicas: {{ .Values.query_scheduler.replicas }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.querySchedulerSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.query_scheduler.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.querySchedulerLabels\" . | nindent 8 }}\n        {{- with .Values.query_scheduler.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n      {{- with .Values.query_scheduler.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n    spec:\n      serviceAccountName: {{ template \"cortex.serviceAccountName\" . }}\n      {{- if .Values.query_scheduler.priorityClassName }}\n      priorityClassName: {{ .Values.query_scheduler.priorityClassName }}\n      {{- end }}\n      {{- if .Values.query_scheduler.securityContext.enabled }}\n      securityContext: {{- omit .Values.query_scheduler.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.query_scheduler.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        - name: query-scheduler\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=query-scheduler\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n          {{- range $key, $value := .Values.query_scheduler.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          volumeMounts:\n            {{- if .Values.query_scheduler.extraVolumeMounts }}\n            {{- toYaml .Values.query_scheduler.extraVolumeMounts | nindent 12 }}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: grpc\n              containerPort: {{ .Values.config.server.grpc_listen_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.query_scheduler.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.query_scheduler.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.query_scheduler.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.query_scheduler.resources | nindent 12 }}\n          {{- if .Values.query_scheduler.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.query_scheduler.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.query_scheduler.env }}\n          env:\n            {{- toYaml .Values.query_scheduler.env | nindent 12 }}\n          {{- end }}\n          {{- with .Values.query_scheduler.lifecycle }}\n          lifecycle:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n        {{- if .Values.query_scheduler.extraContainers }}\n        {{- toYaml .Values.query_scheduler.extraContainers | nindent 8 }}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.query_scheduler.nodeSelector | nindent 8 }}\n      {{- if .Values.query_scheduler.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.query_scheduler.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.query_scheduler.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.query_scheduler.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.query_scheduler.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        {{- if .Values.query_scheduler.extraVolumes }}\n        {{- toYaml .Values.query_scheduler.extraVolumes | nindent 8 }}\n        {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/query-scheduler/query-scheduler-poddisruptionbudget.yaml",
    "content": "{{- if and (.Values.query_scheduler.enabled) (gt (int .Values.query_scheduler.replicas) 1) (.Values.query_scheduler.podDisruptionBudget) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.querySchedulerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.querySchedulerLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.querySchedulerSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.query_scheduler.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/query-scheduler/query-scheduler-servicemonitor.yaml",
    "content": "{{- if and .Values.query_scheduler.enabled .Values.query_scheduler.serviceMonitor.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.querySchedulerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.querySchedulerLabels\" . | nindent 4 }}\n    {{- if .Values.query_scheduler.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.query_scheduler.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.query_scheduler.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.query_scheduler.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.querySchedulerSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.query_scheduler.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.query_scheduler.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.query_scheduler.serviceMonitor.interval }}\n    interval: {{ .Values.query_scheduler.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.query_scheduler.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.query_scheduler.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.query_scheduler.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.query_scheduler.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.query_scheduler.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.query_scheduler.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.query_scheduler.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/query-scheduler/query-scheduler-svc-headless.yaml",
    "content": "{{- if .Values.query_scheduler.enabled }}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.querySchedulerFullname\" . }}-headless\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.querySchedulerLabels\" . | nindent 4 }}\n    {{- with .Values.query_scheduler.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.query_scheduler.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  clusterIP: None\n  publishNotReadyAddresses: true\n  ports:\n    - port: {{ .Values.config.server.grpc_listen_port }}\n      protocol: TCP\n      name: grpc\n      targetPort: grpc\n  selector:\n    {{- include \"cortex.querySchedulerSelectorLabels\" . | nindent 4 }}\n{{- end }}\n"
  },
  {
    "path": "templates/query-scheduler/query-scheduler-svc.yaml",
    "content": "{{- if .Values.query_scheduler.enabled }}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.querySchedulerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.querySchedulerLabels\" . | nindent 4 }}\n    {{- with .Values.query_scheduler.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.query_scheduler.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.querySchedulerSelectorLabels\" . | nindent 4 }}\n{{- end }}\n"
  },
  {
    "path": "templates/ruler/_helpers-ruler.tpl",
    "content": "\n{{/*\nruler fullname\n*/}}\n{{- define \"cortex.rulerFullname\" -}}\n{{ include \"cortex.fullname\" . }}-ruler\n{{- end }}\n\n{{/*\nruler common labels\n*/}}\n{{- define \"cortex.rulerLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: ruler\n{{- end }}\n\n{{/*\nruler selector labels\n*/}}\n{{- define \"cortex.rulerSelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: ruler\n{{- end }}\n\n{{/*\nformat rules dir\n*/}}\n{{- define \"cortex.rulerRulesDirName\" -}}\nrules-{{ . | replace \"_\" \"-\" | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nruler config validation\nRef: https://cortexmetrics.io/docs/guides/ruler-sharding/\n*/}}\n{{- define \"cortex.rulerValidation\" -}}\n{{- with .Values.ruler -}}\n  {{- if .validation.enabled -}}\n    {{- if or (gt (int .replicas) 1) .autoscaling.enabled -}}\n      {{- with $.Values.config.ruler -}}\n        {{- if not .enable_sharding -}}\n          {{- fail \"must enable_sharding to scale the ruler\" -}}\n        {{- end }}\n        {{- if not ((.ring | default dict).kvstore | default dict).store -}}\n          {{- fail \"must configure kvstore to scale the ruler\" -}}\n        {{- end }}\n      {{- end }}\n    {{- end }}\n  {{- end }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/ruler/ruler-configmap.yaml",
    "content": "{{- if .Values.ruler.enabled }}\n{{- range $dir, $files := .Values.ruler.directories }}\n---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: {{ include \"cortex.rulerFullname\" $ }}-{{ include \"cortex.rulerRulesDirName\" $dir }}\n  namespace: {{ $.Release.Namespace }}\n  labels:\n    {{- include \"cortex.rulerLabels\" $ | nindent 4 }}\ndata:\n  {{- toYaml $files | nindent 2}}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/ruler/ruler-dep.yaml",
    "content": "{{- if .Values.ruler.enabled -}}\n{{- include \"cortex.rulerValidation\" $ -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"cortex.rulerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.rulerLabels\" . | nindent 4 }}\n    app.kubernetes.io/part-of: memberlist\n  annotations:\n    {{- toYaml .Values.ruler.annotations | nindent 4 }}\nspec:\n  {{- if not .Values.ruler.autoscaling.enabled }}\n  replicas: {{ .Values.ruler.replicas }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.rulerSelectorLabels\" . | nindent 6 }}\n  strategy:\n    {{- toYaml .Values.ruler.strategy | nindent 4 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.rulerLabels\" . | nindent 8 }}\n        app.kubernetes.io/part-of: memberlist\n        {{- with .Values.ruler.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n      {{- with .Values.ruler.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.ruler.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n    {{- if .Values.ruler.priorityClassName }}\n      priorityClassName: {{ .Values.ruler.priorityClassName }}\n    {{- end }}\n      {{- if .Values.ruler.securityContext.enabled }}\n      securityContext: {{- omit .Values.ruler.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.ruler.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      containers:\n        {{- if .Values.ruler.sidecar.enabled }}\n        - name: {{ template \"cortex.name\" . }}-sc-rules\n          {{- if .Values.ruler.sidecar.image.sha }}\n          image: \"{{ .Values.ruler.sidecar.image.repository }}:{{ .Values.ruler.sidecar.image.tag }}@sha256:{{ .Values.ruler.sidecar.image.sha }}\"\n          {{- else }}\n          image: \"{{ .Values.ruler.sidecar.image.repository }}:{{ .Values.ruler.sidecar.image.tag }}\"\n          {{- end }}\n          imagePullPolicy: {{ .Values.ruler.sidecar.imagePullPolicy }}\n          env:\n            {{- if .Values.ruler.sidecar.watchMethod }}\n            - name: METHOD\n              value: {{ .Values.ruler.sidecar.watchMethod }}\n            {{ end }}\n            - name: LABEL\n              value: \"{{ .Values.ruler.sidecar.label }}\"\n            {{- if .Values.ruler.sidecar.labelValue }}\n            - name: LABEL_VALUE\n              value: {{ quote .Values.ruler.sidecar.labelValue }}\n            {{- end }}\n            - name: FOLDER\n              value: \"{{ .Values.ruler.sidecar.folder }}{{- with .Values.ruler.sidecar.defaultFolderName }}/{{ . }}{{- end }}\"\n            {{- if .Values.ruler.sidecar.resource}}\n            - name: RESOURCE\n              value: {{ quote .Values.ruler.sidecar.resource }}\n            {{- end }}\n            {{- if .Values.ruler.sidecar.enableUniqueFilenames }}\n            - name: UNIQUE_FILENAMES\n              value: \"{{ .Values.ruler.sidecar.enableUniqueFilenames }}\"\n            {{- end }}\n            {{- if .Values.ruler.sidecar.searchNamespace }}\n            - name: NAMESPACE\n              value: \"{{ .Values.ruler.sidecar.searchNamespace }}\"\n            {{- end }}\n            {{- if .Values.ruler.sidecar.skipTlsVerify }}\n            - name: SKIP_TLS_VERIFY\n              value: \"{{ .Values.ruler.sidecar.skipTlsVerify }}\"\n            {{- end }}\n            {{- if .Values.ruler.sidecar.folderAnnotation }}\n            - name: FOLDER_ANNOTATION\n              value: \"{{ .Values.ruler.sidecar.folderAnnotation }}\"\n            {{- end }}\n          {{- with .Values.ruler.sidecar.healthPort }}\n            - name: HEALTH_PORT\n              value: \"{{ . }}\"\n          ports:\n            - name: sidecar-health\n              containerPort: {{ . }}\n              protocol: TCP\n          {{- end }}\n          {{- with .Values.ruler.sidecar.startupProbe }}\n          startupProbe:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          {{- with .Values.ruler.sidecar.readinessProbe }}\n          readinessProbe:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          resources:\n            {{- toYaml .Values.ruler.sidecar.resources | nindent 12 }}\n          {{- if .Values.ruler.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.ruler.sidecar.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          volumeMounts:\n            - name: sc-rules-volume\n              mountPath: {{ .Values.ruler.sidecar.folder | quote }}\n        {{- end }}\n        - name: rules\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=ruler\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n            {{- if and .Values.alertmanager.enabled (not .Values.config.ruler.alertmanager_url) }}\n              {{- if .Values.config.ruler.enable_alertmanager_discovery }}\n            - \"-ruler.alertmanager-url=http://_http-metrics._tcp.{{ template \"cortex.alertmanagerFullname\" . }}-headless.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}/api/prom/alertmanager/\"\n              {{- else }}\n            - \"-ruler.alertmanager-url=http://{{ template \"cortex.alertmanagerFullname\" . }}.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}:{{ .Values.config.server.http_listen_port }}/api/prom/alertmanager/\"\n              {{- end }}\n            {{- end }}\n            {{- include \"cortex.memcached\" . | nindent 12}}\n          {{- range $key, $value := .Values.ruler.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n          {{- end }}\n          volumeMounts:\n            {{- if .Values.ruler.extraVolumeMounts }}\n            {{- toYaml .Values.ruler.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            {{- if .Values.ruler.sidecar.enabled }}\n            - name: sc-rules-volume\n              mountPath: {{ .Values.ruler.sidecar.folder | quote }}\n            {{ end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n            - name: storage\n              mountPath: /data\n            - name: tmp\n              mountPath: /rules\n            {{- range $dir, $_ := .Values.ruler.directories }}\n            - name: {{ include \"cortex.rulerRulesDirName\" $dir }}\n              mountPath: /etc/cortex/rules/{{ $dir }}\n            {{- end }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: gossip\n              containerPort: {{ .Values.config.memberlist.bind_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.ruler.startupProbe | nindent 12 }}\n          livenessProbe:\n            {{- toYaml .Values.ruler.livenessProbe | nindent 12 }}\n          readinessProbe:\n            {{- toYaml .Values.ruler.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.ruler.resources | nindent 12 }}\n          {{- if .Values.ruler.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.ruler.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.ruler.env }}\n          env:\n            {{- toYaml .Values.ruler.env | nindent 12 }}\n          {{- end }}\n        {{- if .Values.ruler.extraContainers }}\n        {{- toYaml .Values.ruler.extraContainers | nindent 8}}\n        {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.ruler.nodeSelector | nindent 8 }}\n      {{- if .Values.ruler.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.ruler.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.ruler.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.ruler.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.ruler.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        - name: tmp\n          emptyDir: {}\n        {{- range $dir, $_ := .Values.ruler.directories }}\n        - name: {{ include \"cortex.rulerRulesDirName\" $dir }}\n          configMap:\n            name: {{ include \"cortex.rulerFullname\" $ }}-{{ include \"cortex.rulerRulesDirName\" $dir }}\n        {{- end }}\n        - name: storage\n          emptyDir: {}\n        {{- if .Values.ruler.sidecar.enabled }}\n        - name: sc-rules-volume\n          emptyDir: {}\n        {{- end }}\n        {{- if .Values.ruler.extraVolumes }}\n        {{- toYaml .Values.ruler.extraVolumes | nindent 8}}\n        {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/ruler/ruler-hpa.yaml",
    "content": "{{- if and .Values.ruler.enabled .Values.ruler.autoscaling.enabled }}\n{{- with .Values.ruler.autoscaling -}}\napiVersion: {{ include \"cortex.hpaVersion\" $ }}\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: {{ include \"cortex.rulerFullname\" $ }}\n  namespace: {{ $.Release.Namespace }}\n  labels:\n    {{- include \"cortex.rulerLabels\" $ | nindent 4 }}\nspec:\n  scaleTargetRef:\n    apiVersion: apps/v1\n    kind: Deployment\n    name: {{ include \"cortex.rulerFullname\" $ }}\n  minReplicas: {{ .minReplicas }}\n  maxReplicas: {{ .maxReplicas }}\n  metrics:\n  {{- with .targetMemoryUtilizationPercentage }}\n    - type: Resource\n      resource:\n        name: memory\n        target:\n          type: Utilization\n          averageUtilization: {{ . }}\n  {{- end }}\n  {{- with .targetCPUUtilizationPercentage }}\n    - type: Resource\n      resource:\n        name: cpu\n        target:\n          type: Utilization\n          averageUtilization: {{ . }}\n  {{- end }}\n  {{- with .extraMetrics }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- with .behavior }}\n  behavior:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/ruler/ruler-poddisruptionbudget.yaml",
    "content": "{{- if and (gt (int .Values.ruler.replicas) 1) (.Values.ruler.podDisruptionBudget) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.rulerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.rulerLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.rulerSelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.ruler.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/ruler/ruler-servicemonitor.yaml",
    "content": "{{- if .Values.ruler.serviceMonitor.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.rulerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.rulerLabels\" . | nindent 4 }}\n    {{- if .Values.ruler.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.ruler.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.ruler.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.ruler.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.rulerSelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.ruler.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.ruler.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.ruler.serviceMonitor.interval }}\n    interval: {{ .Values.ruler.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.ruler.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.ruler.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.ruler.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.ruler.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.ruler.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.ruler.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.ruler.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/ruler/ruler-svc.yaml",
    "content": "{{- if .Values.ruler.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.rulerFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.rulerLabels\" . | nindent 4 }}\n    {{- with .Values.ruler.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.ruler.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.rulerSelectorLabels\" . | nindent 4 }}\n{{- end }}\n"
  },
  {
    "path": "templates/runtime-configmap.yaml",
    "content": "{{- with .Values.runtimeconfigmap }}\n{{- if .create }}\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: {{ template \"cortex.fullname\" $ }}-runtime-config\n  namespace: {{ $.Release.Namespace }}\n  labels:\n    {{- include \"cortex.labels\" $ | nindent 4 }}\n  {{- with .annotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\ndata:\n  runtime_config.yaml: |\n    {{- tpl (toYaml .runtime_config) $ | nindent 4 }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/secret.yaml",
    "content": "{{- if (and (not .Values.useExternalConfig) (not .Values.useConfigMap)) }}\napiVersion: v1\nkind: Secret\nmetadata:\n  name: {{ template \"cortex.fullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.labels\" . | nindent 4 }}\ndata:\n  cortex.yaml: {{ tpl (toYaml .Values.config) . | b64enc }}\n{{- end }}\n"
  },
  {
    "path": "templates/serviceaccount.yaml",
    "content": "{{- if .Values.serviceAccount.create }}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: {{ template \"cortex.serviceAccountName\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.labels\" . | nindent 4 }}\n  annotations:\n    {{- toYaml .Values.serviceAccount.annotations | nindent 4 }}\nautomountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}\n{{- end }}\n"
  },
  {
    "path": "templates/store-gateway/_helpers-store-gateway.tpl",
    "content": "\n{{/*\nstore-gateway fullname\n*/}}\n{{- define \"cortex.storeGatewayFullname\" -}}\n{{ include \"cortex.fullname\" . }}-store-gateway\n{{- end }}\n\n{{/*\nstore-gateway common labels\n*/}}\n{{- define \"cortex.storeGatewayLabels\" -}}\n{{ include \"cortex.labels\" . }}\napp.kubernetes.io/component: store-gateway\n{{- end }}\n\n{{/*\nstore-gateway selector labels\n*/}}\n{{- define \"cortex.storeGatewaySelectorLabels\" -}}\n{{ include \"cortex.selectorLabels\" . }}\napp.kubernetes.io/component: store-gateway\n{{- end }}\n"
  },
  {
    "path": "templates/store-gateway/store-gateway-hpa.yaml",
    "content": "{{- if and .Values.store_gateway.enabled .Values.store_gateway.autoscaling.enabled -}}\n{{- with .Values.store_gateway.autoscaling -}}\napiVersion: {{ include \"cortex.hpaVersion\" $ }}\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: {{ include \"cortex.storeGatewayFullname\" $ }}\n  namespace: {{ $.Release.Namespace }}\n  labels:\n    {{- include \"cortex.storeGatewayLabels\" $ | nindent 4 }}\nspec:\n  scaleTargetRef:\n    apiVersion: apps/v1\n    kind: StatefulSet\n    name: {{ include \"cortex.storeGatewayFullname\" $ }}\n  minReplicas: {{ .minReplicas }}\n  maxReplicas: {{ .maxReplicas }}\n  metrics:\n    - type: Resource\n      resource:\n        name: memory\n        target:\n          type: Utilization\n          averageUtilization: {{ .targetMemoryUtilizationPercentage }}\n  {{- with .extraMetrics }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- with .behavior }}\n  behavior:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/store-gateway/store-gateway-poddisruptionbudget.yaml",
    "content": "{{- if and (gt (int .Values.store_gateway.replicas) 1) (.Values.store_gateway.podDisruptionBudget) (.Values.store_gateway.enabled) }}\napiVersion: {{ include \"cortex.pdbVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ include \"cortex.storeGatewayFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.storeGatewayLabels\" . | nindent 4 }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.storeGatewaySelectorLabels\" . | nindent 6 }}\n  {{- toYaml .Values.store_gateway.podDisruptionBudget | nindent 2 }}\n{{- end }}\n"
  },
  {
    "path": "templates/store-gateway/store-gateway-servicemonitor.yaml",
    "content": "{{- if and .Values.store_gateway.serviceMonitor.enabled .Values.store_gateway.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"cortex.storeGatewayFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.storeGatewayLabels\" . | nindent 4 }}\n    {{- if .Values.store_gateway.serviceMonitor.additionalLabels }}\n{{ toYaml .Values.store_gateway.serviceMonitor.additionalLabels | indent 4 }}\n    {{- end }}\n  {{- if .Values.store_gateway.serviceMonitor.annotations }}\n  annotations:\n{{ toYaml .Values.store_gateway.serviceMonitor.annotations | indent 4 }}\n  {{- end }}\nspec:\n  selector:\n    matchLabels:\n      {{- include \"cortex.storeGatewaySelectorLabels\" . | nindent 6 }}\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace | quote }}\n  {{- if .Values.store_gateway.serviceMonitor.podTargetLabels }}\n  podTargetLabels:\n  {{- range .Values.store_gateway.serviceMonitor.podTargetLabels }}\n    - {{ . }}\n  {{- end }}\n  {{- end }}\n  endpoints:\n  - port: http-metrics\n    {{- if .Values.store_gateway.serviceMonitor.interval }}\n    interval: {{ .Values.store_gateway.serviceMonitor.interval }}\n    {{- end }}\n    {{- if .Values.store_gateway.serviceMonitor.scrapeTimeout }}\n    scrapeTimeout: {{ .Values.store_gateway.serviceMonitor.scrapeTimeout }}\n    {{- end }}\n    {{- if .Values.store_gateway.serviceMonitor.relabelings }}\n    relabelings:\n    {{- toYaml .Values.store_gateway.serviceMonitor.relabelings | nindent 4 }}\n    {{- end }}\n    {{- if .Values.store_gateway.serviceMonitor.metricRelabelings }}\n    metricRelabelings:\n    {{- toYaml .Values.store_gateway.serviceMonitor.metricRelabelings | nindent 4 }}\n    {{- end }}\n    {{- with .Values.store_gateway.serviceMonitor.extraEndpointSpec }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n{{- end }}\n"
  },
  {
    "path": "templates/store-gateway/store-gateway-statefulset.yaml",
    "content": "{{- if .Values.store_gateway.enabled -}}\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: {{ include \"cortex.storeGatewayFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.storeGatewayLabels\" . | nindent 4 }}\n    app.kubernetes.io/part-of: memberlist\n  annotations:\n    {{- toYaml .Values.store_gateway.annotations | nindent 4 }}\nspec:\n  {{- if not .Values.store_gateway.autoscaling.enabled }}\n  replicas: {{ .Values.store_gateway.replicas }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"cortex.storeGatewaySelectorLabels\" . | nindent 6 }}\n  updateStrategy:\n    {{- toYaml .Values.store_gateway.strategy | nindent 4 }}\n  podManagementPolicy: {{ .Values.store_gateway.podManagementPolicy | quote }}\n  serviceName: {{ template \"cortex.fullname\" . }}-store-gateway-headless\n  {{- if .Values.store_gateway.persistentVolume.enabled }}\n  {{- if semverCompare \">=1.23-0\" .Capabilities.KubeVersion.Version }}\n  {{- with .Values.store_gateway.persistentVolume.retentionPolicy }}\n  persistentVolumeClaimRetentionPolicy:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- end }}\n  volumeClaimTemplates:\n    - metadata:\n        name: storage\n        {{- if .Values.store_gateway.persistentVolume.annotations }}\n        annotations:\n          {{ toYaml .Values.store_gateway.persistentVolume.annotations | nindent 10 }}\n        {{- end }}\n      spec:\n        {{- if .Values.store_gateway.persistentVolume.storageClass }}\n        {{- if (eq \"-\" .Values.store_gateway.persistentVolume.storageClass) }}\n        storageClassName: \"\"\n        {{- else }}\n        storageClassName: \"{{ .Values.store_gateway.persistentVolume.storageClass }}\"\n        {{- end }}\n        {{- end }}\n        accessModes:\n          {{- toYaml .Values.store_gateway.persistentVolume.accessModes | nindent 10 }}\n        resources:\n          requests:\n            storage: \"{{ .Values.store_gateway.persistentVolume.size }}\"\n  {{- end }}\n  template:\n    metadata:\n      labels:\n        {{- include \"cortex.storeGatewayLabels\" . | nindent 8 }}\n        app.kubernetes.io/part-of: memberlist\n        {{- with .Values.store_gateway.podLabels }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n      annotations:\n        checksum/config: {{ include \"cortex.configChecksum\" . }}\n        {{- with .Values.store_gateway.podAnnotations }}\n        {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      serviceAccountName: {{ .Values.store_gateway.serviceAccount.name | default (include \"cortex.serviceAccountName\" . ) }}\n      {{- if .Values.store_gateway.priorityClassName }}\n      priorityClassName: {{ .Values.store_gateway.priorityClassName }}\n      {{- end }}\n      {{- if .Values.store_gateway.securityContext.enabled }}\n      securityContext: {{- omit .Values.store_gateway.securityContext \"enabled\" | toYaml | nindent 8 }}\n      {{- end }}\n      initContainers:\n        {{- toYaml .Values.store_gateway.initContainers | nindent 8 }}\n      {{- if .Values.image.pullSecrets }}\n      imagePullSecrets:\n      {{- range .Values.image.pullSecrets }}\n        - name: {{ . }}\n      {{- end }}\n      {{- end }}\n      nodeSelector:\n        {{- toYaml .Values.store_gateway.nodeSelector | nindent 8 }}\n      {{- if .Values.store_gateway.topologySpreadConstraints }}\n      topologySpreadConstraints:\n      {{- toYaml .Values.store_gateway.topologySpreadConstraints | nindent 8}}\n      {{- end }}\n      affinity:\n        {{- toYaml .Values.store_gateway.affinity | nindent 8 }}\n      tolerations:\n        {{- toYaml .Values.store_gateway.tolerations | nindent 8 }}\n      terminationGracePeriodSeconds: {{ .Values.store_gateway.terminationGracePeriodSeconds }}\n      volumes:\n        {{- include \"cortex.configVolume\" . | nindent 8 }}\n        - name: runtime-config\n          configMap:\n            name: {{ template \"cortex.fullname\" . }}-runtime-config\n        {{- if not .Values.store_gateway.persistentVolume.enabled }}\n        - name: storage\n          emptyDir: {}\n        {{- end }}\n        {{- if .Values.store_gateway.extraVolumes }}\n        {{- toYaml .Values.store_gateway.extraVolumes | nindent 8 }}\n        {{- end }}\n      containers:\n        {{- if .Values.store_gateway.extraContainers }}\n        {{ toYaml .Values.store_gateway.extraContainers | nindent 8 }}\n        {{- end }}\n        - name: store-gateway\n          image: \"{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          args:\n            - \"-target=store-gateway\"\n            - \"-config.file=/etc/cortex/cortex.yaml\"\n            {{- include \"cortex.memcached\" . | nindent 12}}\n            {{- range $key, $value := .Values.store_gateway.extraArgs }}\n            - \"-{{ $key }}={{ $value }}\"\n            {{- end }}\n          volumeMounts:\n            {{- if .Values.store_gateway.extraVolumeMounts }}\n            {{- toYaml .Values.store_gateway.extraVolumeMounts | nindent 12}}\n            {{- end }}\n            - name: config\n              mountPath: /etc/cortex\n            - name: runtime-config\n              mountPath: /etc/cortex-runtime-config\n            - name: storage\n              mountPath: \"/data\"\n              {{- if .Values.store_gateway.persistentVolume.subPath }}\n              subPath: {{ .Values.store_gateway.persistentVolume.subPath }}\n              {{- end }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.config.server.http_listen_port }}\n              protocol: TCP\n            - name: grpc\n              containerPort: {{ .Values.config.server.grpc_listen_port }}\n              protocol: TCP\n            - name: gossip\n              containerPort: {{ .Values.config.memberlist.bind_port }}\n              protocol: TCP\n          startupProbe:\n            {{- toYaml .Values.store_gateway.startupProbe | nindent 12 }}\n          {{- if .Values.store_gateway.livenessProbe }}\n          livenessProbe:\n            {{- toYaml .Values.store_gateway.livenessProbe | nindent 12 }}\n          {{- end }}\n          readinessProbe:\n            {{- toYaml .Values.store_gateway.readinessProbe | nindent 12 }}\n          resources:\n            {{- toYaml .Values.store_gateway.resources | nindent 12 }}\n          {{- if .Values.store_gateway.containerSecurityContext.enabled }}\n          securityContext: {{- omit .Values.store_gateway.containerSecurityContext \"enabled\" | toYaml | nindent 12 }}\n          {{- end }}\n          {{- if .Values.store_gateway.env }}\n          env:\n            {{- toYaml .Values.store_gateway.env | nindent 12 }}\n          {{- end }}\n{{- end -}}\n"
  },
  {
    "path": "templates/store-gateway/store-gateway-svc-headless.yaml",
    "content": "{{- if .Values.store_gateway.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.storeGatewayFullname\" . }}-headless\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.storeGatewayLabels\" . | nindent 4 }}\n    {{- with .Values.store_gateway.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.store_gateway.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  clusterIP: None\n  ports:\n    - port: {{ .Values.config.server.grpc_listen_port }}\n      protocol: TCP\n      name: grpc\n      targetPort: grpc\n  selector:\n    {{- include \"cortex.storeGatewaySelectorLabels\" . | nindent 4 }}\n{{- end -}}\n"
  },
  {
    "path": "templates/store-gateway/store-gateway-svc.yaml",
    "content": "{{- if .Values.store_gateway.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.storeGatewayFullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.storeGatewayLabels\" . | nindent 4 }}\n    {{- with .Values.store_gateway.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.store_gateway.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  ports:\n    - port: {{ .Values.config.server.http_listen_port }}\n      protocol: TCP\n      name: http-metrics\n      targetPort: http-metrics\n  selector:\n    {{- include \"cortex.storeGatewaySelectorLabels\" . | nindent 4 }}\n{{- end -}}\n"
  },
  {
    "path": "templates/svc-memberlist-headless.yaml",
    "content": "apiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"cortex.fullname\" . }}-memberlist\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"cortex.labels\" . | nindent 4 }}\n    {{- with .Values.memberlist.service.labels }}\n    {{- toYaml . | nindent 4 }}\n    {{- end }}\n  annotations:\n    {{- toYaml .Values.memberlist.service.annotations | nindent 4 }}\nspec:\n  type: ClusterIP\n  clusterIP: None\n  ports:\n    - port: {{ .Values.config.memberlist.bind_port }}\n      protocol: TCP\n      appProtocol: tcp\n      name: gossip\n      targetPort: gossip\n  selector:\n    {{- include \"cortex.selectorLabels\" . | nindent 4 }}\n    app.kubernetes.io/part-of: memberlist\n"
  },
  {
    "path": "tools/bump-version.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nVERSION=\"${1:-}\"\n\ncurrent_version=$(grep '^version:' Chart.yaml | awk '{print $2}')\necho \"Current version: $current_version\"\n\nif [ -n \"$VERSION\" ]; then\n    new_version=\"$VERSION\"\nelse\n    unreleased_changes=$(awk '/^## master \\/ unreleased/{flag=1; next} /^## /{flag=0} flag' CHANGELOG.md)\n    echo \"Unreleased changes analysis:\"\n    echo \"$unreleased_changes\"\n\n    if echo \"$unreleased_changes\" | grep -q \"\\[CHANGE\\]\"; then\n        echo \"Found [CHANGE], applying major bump.\"\n        bump=\"major\"\n    elif echo \"$unreleased_changes\" | grep -q \"\\[ENHANCEMENT\\]\"; then\n        echo \"Found [ENHANCEMENT], applying minor bump.\"\n        bump=\"minor\"\n    elif echo \"$unreleased_changes\" | grep -q \"\\[FEATURE\\]\"; then\n        echo \"Found [FEATURE], applying minor bump.\"\n        bump=\"minor\"\n    else\n        echo \"Defaulting to patch bump ([BUGFIX], [DEPENDENCY], or other).\"\n        bump=\"patch\"\n    fi\n\n    IFS='.' read -r -a parts <<< \"$current_version\"\n    major=\"${parts[0]}\"\n    minor=\"${parts[1]}\"\n    patch=\"${parts[2]}\"\n\n    case \"$bump\" in\n        major) major=$((major + 1)); minor=0; patch=0 ;;\n        minor) minor=$((minor + 1)); patch=0 ;;\n        patch) patch=$((patch + 1)) ;;\n    esac\n    new_version=\"$major.$minor.$patch\"\nfi\n\necho \"New version: $new_version\"\n\n# Update Chart.yaml\n# Using temp file for portability\nsed \"s/^version: .*/version: $new_version/\" Chart.yaml > Chart.yaml.tmp && mv Chart.yaml.tmp Chart.yaml\n\n# Update Changelog\ndate_str=$(date +%Y-%m-%d)\n# Use perl for consistent behavior across platforms (macOS/Linux) regarding newlines in replacement\nperl -i -pe \"s/^## master \\/ unreleased/## master \\/ unreleased\\n\\n## $new_version \\/ $date_str/\" CHANGELOG.md\n\necho \"Successfully bumped version to $new_version\"\n"
  },
  {
    "path": "tools/chart-version-tag.sh",
    "content": "#!/usr/bin/env bash\n\nset -o nounset\nset -o pipefail\n\nRELEASE_TAG=$(git describe --tags --exact-match 2>/dev/null)\nset -o errexit\nif [ -z \"$RELEASE_TAG\" ]\nthen\n    WORKING_SUFFIX=$(if git status --porcelain | grep -qE '^(?:[^?][^ ]|[^ ][^?])\\s'; then echo \"-WIP\"; else echo \"\"; fi)\n    BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)\n    TAG_PREFIX=$(git describe --tags 2>/dev/null)    \n    echo \"$TAG_PREFIX-${BRANCH_NAME//\\//-}$WORKING_SUFFIX\"\nelse\n    echo \"$RELEASE_TAG\"\nfi"
  },
  {
    "path": "values.yaml",
    "content": "image:\n  repository: quay.io/cortexproject/cortex\n  # -- Allows you to override the cortex version in this chart. Use at your own risk.\n  tag: \"\"\n  pullPolicy: IfNotPresent\n\n  # -- Optionally specify an array of imagePullSecrets.\n  # Secrets must be manually created in the namespace.\n  # ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/\n  pullSecrets: []\n\n# -- Kubernetes cluster DNS domain\nclusterDomain: cluster.local\n\ningress:\n  enabled: false\n  ingressClass:\n    enabled: false\n    name: \"nginx\"\n  annotations: {}\n  hosts:\n    - host: chart-example.local\n      paths:\n        - /\n  tls: []\n\nserviceAccount:\n  create: true\n  name:\n  annotations: {}\n  automountServiceAccountToken: true\n\nuseConfigMap: false\nuseExternalConfig: false\nexternalConfigSecretName: 'secret-with-config.yaml'\nexternalConfigVersion: '0'\n\nconfig:\n  auth_enabled: false\n  api:\n    prometheus_http_prefix: '/prometheus'\n    # -- Use GZIP compression for API responses. Some endpoints serve large YAML or JSON blobs\n    # which can benefit from compression.\n    response_compression_enabled: true\n  ingester:\n    lifecycler:\n      # -- We don't want to join immediately, but wait a bit to see other ingesters and their tokens first.\n      # It can take a while to have the full picture when using gossip\n      join_after: 10s\n\n      # -- To avoid generating same tokens by multiple ingesters, they can \"observe\" the ring for a while,\n      # after putting their own tokens into it. This is only useful when using gossip, since multiple\n      # ingesters joining at the same time can have conflicting tokens if they don't see each other yet.\n      observe_period: 10s\n      # -- Duration to sleep for before exiting, to ensure metrics are scraped.\n      final_sleep: 30s\n      ring:\n        # -- Ingester replication factor per default is 3\n        replication_factor: 3\n        kvstore:\n          store: \"memberlist\"\n  limits:\n    # -- Enforce that every sample has a metric name\n    enforce_metric_name: true\n    reject_old_samples: true\n    reject_old_samples_max_age: 168h\n    max_query_lookback: 0s\n  server:\n    http_listen_port: 8080\n    grpc_listen_port: 9095\n    grpc_server_max_recv_msg_size: 10485760\n    grpc_server_max_send_msg_size: 10485760\n    grpc_server_max_concurrent_streams: 10000\n  ingester_client:\n    grpc_client_config:\n      max_recv_msg_size: 10485760\n      max_send_msg_size: 10485760\n  blocks_storage:\n    tsdb:\n      dir: /data/tsdb\n    bucket_store:\n      sync_dir: /data/tsdb-sync\n      bucket_index:\n        enabled: true\n  # -- https://cortexmetrics.io/docs/configuration/configuration-file/#store_gateway_config\n  store_gateway:\n    sharding_enabled: false\n  distributor:\n    # -- Distribute samples based on all labels, as opposed to solely by user and\n    # metric name.\n    shard_by_all_labels: true\n    pool:\n      health_check_ingesters: true\n  memberlist:\n    bind_port: 7946\n    # -- the service name of the memberlist\n    # if using memberlist discovery\n    join_members:\n      - '{{ include \"cortex.fullname\" $ }}-memberlist'\n  querier:\n    active_query_tracker_dir: /data/active-query-tracker\n    # -- Comma separated list of store-gateway addresses in DNS Service Discovery\n    # format. This option should is set automatically when using the blocks storage and the\n    # store-gateway sharding is disabled (when enabled, the store-gateway instances\n    # form a ring and addresses are picked from the ring).\n    # @default -- automatic\n    store_gateway_addresses: |-\n      {{ if not .Values.config.store_gateway.sharding_enabled -}}\n      dns+{{ include \"cortex.storeGatewayFullname\" $ }}-headless:9095\n      {{- end }}\n  query_range:\n    split_queries_by_interval: 24h\n    align_queries_with_step: false\n    cache_results: true\n    results_cache:\n      cache:\n        memcached:\n          expiration: 1h\n        memcached_client:\n          timeout: 1s\n  ruler:\n    enable_alertmanager_discovery: false\n    # -- Enable the experimental ruler config api.\n    enable_api: true\n  runtime_config:\n    file: /etc/cortex-runtime-config/runtime_config.yaml\n  alertmanager:\n    # -- Enable alertmanager gossip cluster\n    # -- Disable alertmanager gossip cluster by setting empty listen_address to empty string\n    cluster:\n      listen_address: '0.0.0.0:9094'\n    # -- Enable the experimental alertmanager config api.\n    enable_api: false\n    external_url: '/api/prom/alertmanager'\n  frontend:\n    log_queries_longer_than: 10s\n\nruntimeconfigmap:\n  # -- If true, a configmap for the `runtime_config` will be created.\n  # If false, the configmap _must_ exist already on the cluster or pods will fail to create.\n  create: true\n  annotations: {}\n  # -- https://cortexmetrics.io/docs/configuration/arguments/#runtime-configuration-file\n  runtime_config: {}\n\nalertmanager:\n  enabled: true\n  replicas: 1\n\n  statefulSet:\n    # -- If true, use a statefulset instead of a deployment for pod management.\n    # This is useful for using a persistent volume for storing silences between restarts.\n    enabled: false\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceAccount:\n    # -- \"\" disables the individual serviceAccount and uses the global serviceAccount for that component\n    name: \"\"\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: '8080'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity: {}\n  annotations: {}\n\n  persistentVolume:\n    # -- If true and alertmanager.statefulSet.enabled is true,\n    # Alertmanager will create/use a Persistent Volume Claim\n    # If false, use emptyDir\n    enabled: true\n\n    # -- Alertmanager data Persistent Volume Claim annotations\n    annotations: {}\n\n    # -- Alertmanager data Persistent Volume access modes\n    # Must match those of existing PV or dynamic provisioner\n    # Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/\n    accessModes:\n      - ReadWriteOnce\n\n    # -- Alertmanager data Persistent Volume size\n    size: 2Gi\n\n    # -- Subdirectory of Alertmanager data Persistent Volume to mount\n    # Useful if the volume's root directory is not empty\n    subPath: ''\n\n    # -- Alertmanager data Persistent Volume Storage Class\n    # If defined, storageClassName: <storageClass>\n    # If set to \"-\", storageClassName: \"\", which disables dynamic provisioning\n    # If undefined (the default) or set to null, no storageClassName spec is\n    # set, choosing the default provisioner.\n    storageClass: null\n\n    # -- StatefulSetAutoDeletePVC feature\n    # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention\n    retentionPolicy: {}\n    # whenDeleted: Retain\n    # whenScaled: Retain\n\n  startupProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n    failureThreshold: 10\n  livenessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  # -- Tolerations for pod assignment\n  # ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/\n  tolerations: []\n\n  # -- If not set then a PodDisruptionBudget will not be created\n  podDisruptionBudget:\n    maxUnavailable: 1\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n  statefulStrategy:\n    type: RollingUpdate\n\n  terminationGracePeriodSeconds: 60\n\n  # -- Init containers to be added to the cortex pod.\n  initContainers: []\n\n  # -- Additional containers to be added to the cortex pod.\n  extraContainers: []\n\n  # -- Additional volumes to the cortex pod.\n  extraVolumes: []\n\n  # -- Extra volume mounts that will be added to the cortex container\n  extraVolumeMounts: []\n\n  # -- Additional ports to the cortex services. Useful to expose extra container ports.\n  extraPorts: []\n\n  # -- Extra env variables to pass to the cortex container\n  env: []\n\n  sidecar:\n    # -- Enable sidecar that collect the configmaps with specified label and stores the included files them into the respective folders\n    enabled: false\n    image:\n      repository: kiwigrid/k8s-sidecar\n      tag: 2.7.3\n      sha: \"\"\n    imagePullPolicy: IfNotPresent\n    resources: {}\n    # -- Set to true to skip tls verification for kube api calls\n    skipTlsVerify: false\n    # -- A value of true will produce unique filenames to avoid issues when duplicate data keys exist between ConfigMaps\n    # and/or Secrets within the same or multiple Namespaces.\n    enableUniqueFilenames: false\n    # -- Label that should be used for filtering\n    label: cortex_alertmanager\n    # -- Determines how kopf-k8s-sidecar will run. If WATCH it will run like a normal operator forever.\n    # If LIST it will gather the matching configmaps and secrets currently present,\n    # write those files to the destination directory and die\n    watchMethod: \"\"\n    # -- The value for the label you want to filter your resources on.\n    # Don't set a value to filter by any value\n    labelValue: \"\"\n    # -- Folder where the files should be placed.\n    folder: /data\n    # -- The default folder name, it will create a subfolder under the `folder` and put rules in there instead\n    defaultFolderName: \"\"\n    # -- The Namespace(s) from which resources will be watched.\n    # For multiple namespaces, use a comma-separated string like \"default,test\".\n    # If not set or set to ALL, it will watch all Namespaces.\n    searchNamespace: \"\"\n    # -- The annotation the sidecar will look for in ConfigMaps and/or Secrets to override the destination folder for files.\n    # If the value is a relative path, it will be relative to FOLDER\n    folderAnnotation: \"k8s-sidecar-target-directory\"\n    # -- The resource type that the operator will filter for. Can be configmap, secret or both\n    resource: \"both\"\n    containerSecurityContext:\n      enabled: true\n      readOnlyRootFilesystem: true\n    # -- 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.\n    healthPort: 8081\n    startupProbe:\n      httpGet:\n        path: /healthz\n        port: sidecar-health\n      periodSeconds: 5\n    readinessProbe:\n      httpGet:\n        path: /healthz\n        port: sidecar-health\n      periodSeconds: 5\n\ndistributor:\n  enabled: true\n  replicas: 2\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceAccount:\n    # -- \"\" disables the individual serviceAccount and uses the global serviceAccount for that component\n    name: \"\"\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: '8080'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity:\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 100\n          podAffinityTerm:\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/component\n                  operator: In\n                  values:\n                    - distributor\n            topologyKey: 'kubernetes.io/hostname'\n\n  annotations: {}\n\n  autoscaling:\n    # -- Creates a HorizontalPodAutoscaler for the distributor pods.\n    enabled: false\n    minReplicas: 2\n    maxReplicas: 30\n    targetCPUUtilizationPercentage: 80\n    targetMemoryUtilizationPercentage: 0  # 80\n    # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior\n    behavior: {}\n    # -- Optional custom and external metrics for the distributor pods to scale on\n    # 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\n    extraMetrics: []\n\n  persistentVolume:\n    subPath:\n\n  startupProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n    failureThreshold: 10\n  livenessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n\n  terminationGracePeriodSeconds: 60\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 30%\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n  lifecycle: {}\n\ningester:\n  enabled: true\n  replicas: 3\n\n  statefulSet:\n    # -- If true, use a statefulset instead of a deployment for pod management.\n    # This is useful when using WAL\n    enabled: false\n    # -- 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\n    podManagementPolicy: OrderedReady\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceAccount:\n    name:\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: '8080'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity:\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 100\n          podAffinityTerm:\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/component\n                  operator: In\n                  values:\n                    - ingester\n                    - querier\n            topologyKey: 'kubernetes.io/hostname'\n\n  annotations: {}\n\n  autoscaling:\n    enabled: false\n    minReplicas: 3\n    maxReplicas: 30\n    targetMemoryUtilizationPercentage: 80\n    behavior:\n      scaleDown:\n        # -- see https://cortexmetrics.io/docs/guides/ingesters-scaling-up-and-down/#scaling-down for scaledown details\n        policies:\n          - type: Pods\n            value: 1\n            # set to no less than 2x the maximum between -blocks-storage.bucket-store.sync-interval and -compactor.cleanup-interval\n            periodSeconds: 1800\n        # -- uses metrics from the past 1h to make scaleDown decisions\n        stabilizationWindowSeconds: 3600\n      scaleUp:\n        # -- This default scaleup policy allows adding 1 pod every 30 minutes.\n        # Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior\n        policies:\n          - type: Pods\n            value: 1\n            periodSeconds: 1800\n    # -- Optional custom and external metrics for the ingester pods to scale on\n    # 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\n    extraMetrics: []\n\n  lifecycle:\n    # -- The /shutdown preStop hook is recommended as part of the ingester\n    # scaledown process, but can be removed to optimize rolling restarts in\n    # instances that will never be scaled down.\n    # https://cortexmetrics.io/docs/guides/ingesters-scaling-up-and-down/#scaling-down\n    preStop:\n      httpGet:\n        path: \"/ingester/shutdown\"\n        port: http-metrics\n\n  persistentVolume:\n    # -- If true and ingester.statefulSet.enabled is true,\n    # Ingester will create/use a Persistent Volume Claim\n    # If false, use emptyDir\n    enabled: true\n\n    # -- Ingester data Persistent Volume Claim annotations\n    annotations: {}\n\n    # -- Ingester data Persistent Volume access modes\n    # Must match those of existing PV or dynamic provisioner\n    # Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/\n    accessModes:\n      - ReadWriteOnce\n\n    # -- Ingester data Persistent Volume size\n    size: 2Gi\n\n    # -- Subdirectory of Ingester data Persistent Volume to mount\n    # Useful if the volume's root directory is not empty\n    subPath: ''\n\n    # -- Ingester data Persistent Volume Storage Class\n    # If defined, storageClassName: <storageClass>\n    # If set to \"-\", storageClassName: \"\", which disables dynamic provisioning\n    # If undefined (the default) or set to null, no storageClassName spec is\n    # set, choosing the default provisioner.\n    storageClass: null\n\n    # -- StatefulSetAutoDeletePVC feature\n    # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention\n    retentionPolicy: {}\n    # whenDeleted: Retain\n    # whenScaled: Retain\n\n  # -- Startup/liveness probes for ingesters are not recommended.\n  #  Ref: https://cortexmetrics.io/docs/guides/running-cortex-on-kubernetes/#take-extra-care-with-ingesters\n  startupProbe: {}\n\n  # -- Startup/liveness probes for ingesters are not recommended.\n  #  Ref: https://cortexmetrics.io/docs/guides/running-cortex-on-kubernetes/#take-extra-care-with-ingesters\n  livenessProbe: {}\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n  statefulStrategy:\n    type: RollingUpdate\n\n  terminationGracePeriodSeconds: 240\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 1\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n\nruler:\n  enabled: true\n  replicas: 1\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceAccount:\n    # -- \"\" disables the individual serviceAccount and uses the global serviceAccount for that component\n    name: \"\"\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: '8080'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity: {}\n  annotations: {}\n\n  autoscaling:\n    # -- Creates a HorizontalPodAutoscaler for the ruler.\n    enabled: false\n    minReplicas: 2\n    maxReplicas: 30\n    targetCPUUtilizationPercentage: 80\n    targetMemoryUtilizationPercentage: 80\n    # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior\n    behavior: {}\n    # -- Optional custom and external metrics for the ruler pods to scale on\n    # 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\n    extraMetrics: []\n\n  validation:\n    # -- Checks that the ruler is compatible with horizontal scaling,\n    # as documented in https://cortexmetrics.io/docs/guides/ruler-sharding/.\n    # You may need to disable this if your config is compatible, but not understood by the validator.\n    enabled: true\n\n  startupProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n    failureThreshold: 10\n  livenessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n\n  terminationGracePeriodSeconds: 180\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 30%\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n  # -- allow configuring rules via configmap. ref: https://cortexproject.github.io/cortex-helm-chart/guides/configure_rules_via_configmap.html\n  directories: {}\n\n  sidecar:\n    # -- Enable sidecar that collect the configmaps with specified label and stores the included files them into the respective folders\n    enabled: false\n    image:\n      repository: kiwigrid/k8s-sidecar\n      tag: 2.7.3\n      sha: \"\"\n    imagePullPolicy: IfNotPresent\n    resources: {}\n    # -- Set to true to skip tls verification for kube api calls\n    skipTlsVerify: false\n    # -- A value of true will produce unique filenames to avoid issues when duplicate data keys exist between ConfigMaps\n    # and/or Secrets within the same or multiple Namespaces.\n    enableUniqueFilenames: false\n    # -- label that the configmaps with rules are marked with\n    label: cortex_rules\n    # -- Determines how kopf-k8s-sidecar will run. If WATCH it will run like a normal operator forever.\n    # If LIST it will gather the matching configmaps and secrets currently present,\n    # write those files to the destination directory and die\n    watchMethod: \"\"\n    # -- The value for the label you want to filter your resources on.\n    # Don't set a value to filter by any value\n    labelValue: \"\"\n    # -- Folder where the files should be placed.\n    folder: /data/rules\n    # -- The default folder name, it will create a subfolder under the `folder` and put rules in there instead\n    defaultFolderName: \"\"\n    # -- The Namespace(s) from which resources will be watched.\n    # For multiple namespaces, use a comma-separated string like \"default,test\".\n    # If not set or set to ALL, it will watch all Namespaces.\n    searchNamespace: \"\"\n    # -- The annotation the sidecar will look for in ConfigMaps and/or Secrets to override the destination folder for files.\n    # If the value is a relative path, it will be relative to FOLDER\n    folderAnnotation: \"k8s-sidecar-target-directory\"\n    # -- The resource type that the operator will filter for. Can be configmap, secret or both\n    resource: \"both\"\n    containerSecurityContext:\n      enabled: true\n      readOnlyRootFilesystem: true\n    # -- 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.\n    healthPort: 8081\n    startupProbe:\n      httpGet:\n        path: /healthz\n        port: sidecar-health\n      periodSeconds: 5\n    readinessProbe:\n      httpGet:\n        path: /healthz\n        port: sidecar-health\n      periodSeconds: 5\n\nquerier:\n  enabled: true\n  replicas: 2\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceAccount:\n    # -- \"\" disables the individual serviceAccount and uses the global serviceAccount for that component\n    name: \"\"\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: '8080'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity:\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 100\n          podAffinityTerm:\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/component\n                  operator: In\n                  values:\n                    - ingester\n                    - querier\n            topologyKey: 'kubernetes.io/hostname'\n\n  annotations: {}\n\n  autoscaling:\n    # -- Creates a HorizontalPodAutoscaler for the querier pods.\n    enabled: false\n    minReplicas: 2\n    maxReplicas: 30\n    targetCPUUtilizationPercentage: 80\n    targetMemoryUtilizationPercentage: 0  # 80\n    # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior\n    behavior: {}\n    # -- Optional custom and external metrics for the querier pods to scale on\n    # 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\n    extraMetrics: []\n\n  persistentVolume:\n    subPath:\n\n  startupProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n    failureThreshold: 10\n  livenessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n\n  terminationGracePeriodSeconds: 180\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 30%\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n  lifecycle: {}\n\nquery_frontend:\n  enabled: true\n  replicas: 2\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceAccount:\n    # -- \"\" disables the individual serviceAccount and uses the global serviceAccount for that component\n    name: \"\"\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: '8080'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity:\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 100\n          podAffinityTerm:\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/component\n                  operator: In\n                  values:\n                    - query-frontend\n            topologyKey: 'kubernetes.io/hostname'\n\n  annotations: {}\n  persistentVolume:\n    subPath:\n\n  startupProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n    failureThreshold: 10\n  livenessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n\n  terminationGracePeriodSeconds: 180\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 30%\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n  lifecycle: {}\n\nquery_scheduler:\n  # -- If true, querier and query-frontend will connect to it (requires Cortex v1.6.0+)\n  # https://cortexmetrics.io/docs/operations/scaling-query-frontend/#query-scheduler\n  enabled: false\n  replicas: 2\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: 'http-metrics'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity:\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 100\n          podAffinityTerm:\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/component\n                  operator: In\n                  values:\n                    - query-scheduler\n            topologyKey: 'kubernetes.io/hostname'\n\n  annotations: {}\n  persistentVolume:\n    subPath:\n\n  startupProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n    failureThreshold: 10\n  livenessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n\n  terminationGracePeriodSeconds: 180\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 1\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n  lifecycle: {}\n\noverrides_exporter:\n  # -- https://cortexmetrics.io/docs/guides/overrides-exporter/\n  enabled: false\n  replicas: 1\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: 'http-metrics'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity:\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 100\n          podAffinityTerm:\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/component\n                  operator: In\n                  values:\n                    - overrides-exporter\n            topologyKey: 'kubernetes.io/hostname'\n\n  annotations: {}\n\n  startupProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n    failureThreshold: 10\n  livenessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n\n  terminationGracePeriodSeconds: 180\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 30%\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n  lifecycle: {}\n\nparquet_converter:\n  # -- https://cortexmetrics.io/docs/guides/parquet-mode/\n  enabled: false\n  replicas: 1\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: 'http-metrics'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity:\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 100\n          podAffinityTerm:\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/component\n                  operator: In\n                  values:\n                    - parquet-converter\n            topologyKey: 'kubernetes.io/hostname'\n\n  annotations: {}\n\n  startupProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n    failureThreshold: 10\n  livenessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n\n  terminationGracePeriodSeconds: 180\n\n  tolerations: []\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n  lifecycle: {}\n\npurger:\n  enabled: false\n  replicas: 1\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceAccount:\n    name: \"\"\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  strategy:\n    type: RollingUpdate\n\n  podLabels: {}\n\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: '8080'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity: {}\n  annotations: {}\n  terminationGracePeriodSeconds: 60\n\n  lifecycle: {}\n\n  securityContext: {}\n\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Init containers to be added to the cortex pod.\n  initContainers: []\n\n  # -- Additional containers to be added to the cortex pod.\n  extraContainers: []\n\n  # -- Additional volumes to the cortex pod.\n  extraVolumes: []\n\n  # -- Extra volume mounts that will be added to the cortex container\n  extraVolumeMounts: []\n\n  # -- Additional ports to the cortex services. Useful to expose extra container ports.\n  extraPorts: []\n\n  # -- Extra env variables to pass to the cortex container\n  env: []\n\n  startupProbe:\n    failureThreshold: 60\n    initialDelaySeconds: 120\n    periodSeconds: 30\n    httpGet:\n      path: /ready\n      port: http-metrics\n      scheme: HTTP\n  livenessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n      scheme: HTTP\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\nnginx:\n  enabled: true\n  replicas: 2\n  http_listen_port: 80\n  config:\n    dnsResolver: kube-dns.kube-system.svc.cluster.local\n    # -- ref: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size\n    client_max_body_size: 1M\n    # -- arbitrary snippet to inject in the http { } section of the nginx config\n    httpSnippet: \"\"\n    # -- arbitrary snippet to inject in the top section of the nginx config\n    mainSnippet: \"\"\n    # -- arbitrary snippet to inject in the server { } section of the nginx config\n    serverSnippet: \"\"\n    # -- protocol for the communication with the upstream\n    upstream_protocol: http\n    setHeaders: {}\n    # -- Optional list of [auth tenants](https://cortexmetrics.io/docs/guides/auth/) to set in the nginx config\n    auth_orgs: []\n    # -- Optional name of basic auth secret.\n    # In order to use this option, a secret with htpasswd formatted contents at\n    # the key \".htpasswd\" must exist. For example:\n    #\n    #   apiVersion: v1\n    #   kind: Secret\n    #   metadata:\n    #     name: my-secret\n    #     namespace: <same as cortex installation>\n    #   stringData:\n    #     .htpasswd: |\n    #       user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0\n    #       user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/\n    #\n    # Please note that the use of basic auth will not identify organizations\n    # the way X-Scope-OrgID does. Thus, the use of basic auth alone will not\n    # prevent one tenant from viewing the metrics of another. To ensure tenants\n    # are scoped appropriately, explicitly set the `X-Scope-OrgID` header\n    # in the nginx config. Example\n    #   setHeaders:\n    #     X-Scope-OrgID: $remote_user\n    basicAuthSecretName: \"\"\n    # -- Including the valid parameter to the `resolver` directive to re-resolve names every `dnsTTL` seconds/minutes\n    dnsTTL: \"15s\"\n    # -- Enables all access logs from nginx, otherwise ignores 2XX and 3XX status codes\n    verboseLogging: true\n\n    ## -- Optional: Override the URL for push endpoints (/api/prom/push and /api/v1/push)\n    ## If not specified, the default URL will be used, corresponding to the distributor service URL\n    override_push_endpoint: \"\"\n  image:\n    repository: nginx\n    tag: 1.31\n    pullPolicy: IfNotPresent\n\n  service:\n    type: ClusterIP\n    annotations: {}\n    labels: {}\n    # -- Replaces default port value from nginx.http_listen_port when set\n    port: \"\"\n\n  serviceAccount:\n    # -- \"\" disables the individual serviceAccount and uses the global serviceAccount for that component\n    name: \"\"\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations: {}\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity: {}\n  annotations: {}\n  persistentVolume:\n    subPath:\n\n  startupProbe:\n    httpGet:\n      path: /healthz\n      port: http-metrics\n    failureThreshold: 10\n  livenessProbe:\n    httpGet:\n      path: /healthz\n      port: http-metrics\n  readinessProbe:\n    httpGet:\n      path: /healthz\n      port: http-metrics\n\n  securityContext: {}\n\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: false\n\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 0\n      maxUnavailable: 1\n\n  terminationGracePeriodSeconds: 10\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 30%\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n\n  autoscaling:\n    # -- Creates a HorizontalPodAutoscaler for the nginx pods.\n    enabled: false\n    minReplicas: 2\n    maxReplicas: 30\n    targetCPUUtilizationPercentage: 80\n    targetMemoryUtilizationPercentage: 0  # 80\n    # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior\n    behavior: {}\n    # -- Optional custom and external metrics for the nginx pods to scale on\n    # 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\n    extraMetrics: []\n\nstore_gateway:\n  enabled: true\n  replicas: 1\n  # -- https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies\n  podManagementPolicy: OrderedReady\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceAccount:\n    # -- \"\" disables the individual serviceAccount and uses the global serviceAccount for that component\n    name: \"\"\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: '8080'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity:\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 100\n          podAffinityTerm:\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/component\n                  operator: In\n                  values:\n                    - store-gateway\n            topologyKey: 'kubernetes.io/hostname'\n\n  annotations: {}\n\n  autoscaling:\n    enabled: false\n    minReplicas: 3\n    maxReplicas: 30\n    targetMemoryUtilizationPercentage: 80\n    # -- Ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior\n    behavior: {}\n    # -- Optional custom and external metrics for the store gateway pods to scale on\n    # 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\n    extraMetrics: []\n\n  persistentVolume:\n    # -- If true Store-gateway will create/use a Persistent Volume Claim\n    # If false, use emptyDir\n    enabled: true\n\n    # -- Store-gateway data Persistent Volume Claim annotations\n    annotations: {}\n\n    # -- Store-gateway data Persistent Volume access modes\n    # Must match those of existing PV or dynamic provisioner\n    # Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/\n    accessModes:\n      - ReadWriteOnce\n\n    # -- Store-gateway data Persistent Volume size\n    size: 2Gi\n\n    # -- Subdirectory of Store-gateway data Persistent Volume to mount\n    # Useful if the volume's root directory is not empty\n    subPath: ''\n\n    # -- Store-gateway data Persistent Volume Storage Class\n    # If defined, storageClassName: <storageClass>\n    # If set to \"-\", storageClassName: \"\", which disables dynamic provisioning\n    # If undefined (the default) or set to null, no storageClassName spec is\n    # set, choosing the default provisioner.\n    storageClass: null\n\n    # -- StatefulSetAutoDeletePVC feature\n    # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention\n    retentionPolicy: {}\n    # whenDeleted: Retain\n    # whenScaled: Retain\n\n  startupProbe:\n    failureThreshold: 60\n    initialDelaySeconds: 120\n    periodSeconds: 30\n    httpGet:\n      path: /ready\n      port: http-metrics\n      scheme: HTTP\n  livenessProbe: {}\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n\n  terminationGracePeriodSeconds: 240\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 1\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n\ncompactor:\n  enabled: true\n  replicas: 1\n\n  service:\n    annotations: {}\n    labels: {}\n\n  serviceAccount:\n    # -- \"\" disables the individual serviceAccount and uses the global serviceAccount for that component\n    name: \"\"\n\n  serviceMonitor:\n    enabled: false\n    additionalLabels: {}\n    relabelings: []\n    metricRelabelings: []\n    # -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint\n    extraEndpointSpec: {}\n    podTargetLabels: []\n\n  resources: {}\n\n  # -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)\n  extraArgs: {}\n\n  # -- Pod Labels\n  podLabels: {}\n\n  # -- Pod Annotations\n  podAnnotations:\n    prometheus.io/scrape: 'true'\n    prometheus.io/port: '8080'\n\n  nodeSelector: {}\n  topologySpreadConstraints: []\n  affinity:\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 100\n          podAffinityTerm:\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/component\n                  operator: In\n                  values:\n                    - compactor\n            topologyKey: 'kubernetes.io/hostname'\n\n  annotations: {}\n\n  persistentVolume:\n    # -- If true compactor will create/use a Persistent Volume Claim\n    # If false, use emptyDir\n    enabled: true\n\n    # -- compactor data Persistent Volume Claim annotations\n    annotations: {}\n\n    # -- compactor data Persistent Volume access modes\n    # Must match those of existing PV or dynamic provisioner\n    # Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/\n    accessModes:\n      - ReadWriteOnce\n\n    # compactor data Persistent Volume size\n    size: 2Gi\n\n    # -- Subdirectory of compactor data Persistent Volume to mount\n    # Useful if the volume's root directory is not empty\n    subPath: ''\n\n    # -- compactor data Persistent Volume Storage Class\n    # If defined, storageClassName: <storageClass>\n    # If set to \"-\", storageClassName: \"\", which disables dynamic provisioning\n    # If undefined (the default) or set to null, no storageClassName spec is\n    # set, choosing the default provisioner.\n    storageClass: null\n\n    # -- StatefulSetAutoDeletePVC feature\n    # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention\n    retentionPolicy: {}\n    # whenDeleted: Retain\n    # whenScaled: Retain\n\n  startupProbe: {}\n  livenessProbe: {}\n  readinessProbe:\n    httpGet:\n      path: /ready\n      port: http-metrics\n\n  securityContext: {}\n  containerSecurityContext:\n    enabled: true\n    readOnlyRootFilesystem: true\n\n  strategy:\n    type: RollingUpdate\n\n  terminationGracePeriodSeconds: 240\n\n  tolerations: []\n\n  podDisruptionBudget:\n    maxUnavailable: 30%\n\n  initContainers: []\n  extraContainers: []\n  extraVolumes: []\n  extraVolumeMounts: []\n  extraPorts: []\n  env: []\n\nmemcached-frontend:\n  # -- Enables support for caching queries in the frontend\n  enabled: true\n  service:\n    clusterIP: None\n  architecture: \"high-availability\"\n  replicaCount: 2\n  resources: {}\n  # -- Bypass validation of the memcached configuration in case a custom image is in use\n  disableValidation: false\n  # -- Command line argument supplied to memcached\n  args:\n    # -- The amount of memory allocated to memcached for object storage\n    - -m 1024\n  image:\n    repository: memcached\n    tag: \"1.6.42\"\n  metrics:\n    enabled: true\n    image:\n      repository: prom/memcached-exporter\n      tag: \"v0.16.0\"\n    serviceMonitor:\n      enabled: false\n\nmemcached-blocks-index:\n  # -- Enables support for block index caching\n  enabled: true\n  service:\n    clusterIP: None\n  architecture: \"high-availability\"\n  replicaCount: 2\n  resources: {}\n  # -- Bypass validation of the memcached configuration in case a custom image is in use\n  disableValidation: false\n  # -- Command line argument supplied to memcached\n  args:\n    # -- The amount of memory allocated to memcached for object storage\n    - -m 1024\n  image:\n    repository: memcached\n    tag: \"1.6.42\"\n  metrics:\n    enabled: true\n    image:\n      repository: prom/memcached-exporter\n      tag: \"v0.16.0\"\n    serviceMonitor:\n      enabled: false\n\nmemcached-blocks:\n  # -- Enables support for block caching\n  enabled: true\n  service:\n    clusterIP: None\n  architecture: \"high-availability\"\n  replicaCount: 2\n  resources: {}\n  # -- Bypass validation of the memcached configuration in case a custom image is in use\n  disableValidation: false\n  # -- Command line argument supplied to memcached\n  args:\n    # -- The amount of memory allocated to memcached for object storage\n    - -m 1024\n  image:\n    repository: memcached\n    tag: \"1.6.42\"\n  metrics:\n    enabled: true\n    image:\n      repository: prom/memcached-exporter\n      tag: \"v0.16.0\"\n    serviceMonitor:\n      enabled: false\n\nmemcached-blocks-metadata:\n  # -- Enables support for block metadata caching\n  enabled: true\n  service:\n    clusterIP: None\n  architecture: \"high-availability\"\n  replicaCount: 2\n  resources: {}\n  # -- Bypass validation of the memcached configuration in case a custom image is in use\n  disableValidation: false\n  # -- Command line argument supplied to memcached\n  args:\n    # -- The amount of memory allocated to memcached for object storage\n    - -m 1024\n  image:\n    repository: memcached\n    tag: \"1.6.42\"\n  metrics:\n    enabled: true\n    image:\n      repository: prom/memcached-exporter\n      tag: \"v0.16.0\"\n    serviceMonitor:\n      enabled: false\n\nmemcached-parquet-labels:\n  # -- Enables support for parquet labels caching\n  enabled: false\n  service:\n    clusterIP: None\n  architecture: \"high-availability\"\n  replicaCount: 2\n  resources: {}\n  # -- Bypass validation of the memcached configuration in case a custom image is in use\n  disableValidation: false\n  # -- Command line argument supplied to memcached\n  args:\n    # -- The amount of memory allocated to memcached for object storage\n    - -m 1024\n  image:\n    repository: memcached\n    tag: \"1.6.42\"\n  metrics:\n    enabled: true\n    image:\n      repository: prom/memcached-exporter\n      tag: \"v0.16.0\"\n    serviceMonitor:\n      enabled: false\n\nmemberlist:\n  service:\n    annotations: {}\n    labels: {}\n"
  }
]