<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Deploy Grafana Mimir on Kubernetes on Grafana Labs</title><link>https://grafana.com/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/</link><description>Recent content in Deploy Grafana Mimir on Kubernetes on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting started with Grafana Mimir using the Helm chart</title><link>https://grafana.com/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/getting-started-helm-charts/</link><pubDate>Wed, 11 Mar 2026 16:56:47 -0400</pubDate><guid>https://grafana.com/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/getting-started-helm-charts/</guid><content><![CDATA[&lt;h1 id=&#34;getting-started-with-grafana-mimir-using-the-helm-chart&#34;&gt;Getting started with Grafana Mimir using the Helm chart&lt;/h1&gt;
&lt;p&gt;The &lt;a href=&#34;https://helm.sh/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Helm&lt;/a&gt; chart allows you to configure, install, and upgrade Grafana Mimir within a Kubernetes cluster.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;p&gt;The instructions that follow are common across any flavor of Kubernetes. They also assume that you know how to install a Kubernetes cluster, and configure and operate it.&lt;/p&gt;
&lt;p&gt;It also assumes that you have an understanding of what the &lt;code&gt;kubectl&lt;/code&gt; command does.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caution:&lt;/strong&gt; Do not use this getting-started procedure in a production environment.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Hardware requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A single Kubernetes node with a minimum of 4 cores and 16GiB RAM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Software requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes 1.20 or higher&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;kubectl&lt;/code&gt; command for your version of Kubernetes&lt;/li&gt;
&lt;li&gt;Helm 3 or higher&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Verify that you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access to the Kubernetes cluster&lt;/li&gt;
&lt;li&gt;Persistent storage is enabled in the Kubernetes cluster, which has a default storage class set up. You can &lt;a href=&#34;https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;change the default StorageClass&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;DNS service works in the Kubernetes cluster&lt;/li&gt;
&lt;li&gt;An ingress controller is set up in the Kubernetes cluster, for example &lt;a href=&#34;https://kubernetes.github.io/ingress-nginx/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ingress-nginx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Although this is not strictly necessary, if you want to access Mimir from outside of the Kubernetes cluster, you will need an ingress. This procedure assumes you have an ingress controller set up.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;install-the-helm-chart-in-a-custom-namespace&#34;&gt;Install the Helm chart in a custom namespace&lt;/h2&gt;
&lt;p&gt;Using a custom namespace solves problems later on because you do not have to overwrite the default namespace.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a unique Kubernetes namespace, for example &lt;code&gt;mimir-test&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;console&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-console&#34;&gt;kubectl create namespace mimir-test&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For more details, see the Kubernetes documentation about &lt;a href=&#34;https://kubernetes.io/docs/tasks/administer-cluster/namespaces/#creating-a-new-namespace&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Creating a new namespace&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set up a Helm repository using the following commands:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;console&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-console&#34;&gt;helm repo add grafana https://grafana.github.io/helm-charts
helm repo update&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The Helm chart at &lt;a href=&#34;https://grafana.github.io/helm-charts&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://grafana.github.io/helm-charts&lt;/a&gt; is a publication of the source code at &lt;a href=&#34;https://github.com/grafana/mimir/tree/main/operations/helm/charts/mimir-distributed&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;strong&gt;grafana/mimir&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure an ingress:&lt;/p&gt;
&lt;p&gt;a. Create a YAML file of Helm values called &lt;code&gt;custom.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;b. Add the following configuration to the file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;nginx:
  ingress:
    enabled: true
    ingressClassName: nginx
    hosts:
      - host: &amp;lt;ingress-host&amp;gt;
        paths:
          - path: /
            pathType: Prefix
    tls:
      # empty, disabled.&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;An ingress enables you to externally access a Kubernetes cluster.
Replace &lt;em&gt;&lt;code&gt;&amp;lt;ingress-host&amp;gt;&lt;/code&gt;&lt;/em&gt; with a suitable hostname that DNS can resolve
to the external IP address of the Kubernetes cluster.
For more information, see &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/ingress/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ingress&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; On Linux systems, and if it is not possible for you set up local DNS resolution, you can use the &lt;code&gt;--add-host=&amp;lt;ingress-host&amp;gt;:&amp;lt;kubernetes-cluster-external-address&amp;gt;&lt;/code&gt; command-line flag to define the &lt;em&gt;&lt;code&gt;&amp;lt;ingress-host&amp;gt;&lt;/code&gt;&lt;/em&gt; local address for the &lt;code&gt;docker&lt;/code&gt; commands in the examples that follow.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Grafana Mimir using the Helm chart:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;helm -n mimir-test install mimir grafana/mimir-distributed -f custom.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The output of the command contains the write and read URLs necessary for the following steps.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the statuses of the Mimir pods:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;kubectl -n mimir-test get pods&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The results look similar to this:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;kubectl -n mimir-test get pods
NAME                                            READY   STATUS      RESTARTS   AGE
mimir-minio-78b59f5569-fhlhs                    1/1     Running     0          2m4s
mimir-nginx-74f8bff8dc-7kr7z                    1/1     Running     0          2m5s
mimir-distributed-make-bucket-job-z2hc8         0/1     Completed   0          2m4s
mimir-overrides-exporter-5fd94b745b-htrdr       1/1     Running     0          2m5s
mimir-query-frontend-68cbbfbfb5-pt2ng           1/1     Running     0          2m5s
mimir-ruler-56586c9774-28k7h                    1/1     Running     0          2m5s
mimir-querier-7894f6c5f9-pj9sp                  1/1     Running     0          2m5s
mimir-querier-7894f6c5f9-cwjf6                  1/1     Running     0          2m4s
mimir-alertmanager-0                            1/1     Running     0          2m4s
mimir-distributor-55745599b5-r26kr              1/1     Running     0          2m4s
mimir-compactor-0                               1/1     Running     0          2m4s
mimir-store-gateway-0                           1/1     Running     0          2m4s
mimir-ingester-1                                1/1     Running     0          2m4s
mimir-ingester-2                                1/1     Running     0          2m4s
mimir-ingester-0                                1/1     Running     0          2m4s&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait until all of the pods have a status of &lt;code&gt;Running&lt;/code&gt; or &lt;code&gt;Completed&lt;/code&gt;, which might take a few minutes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-prometheus-to-write-to-grafana-mimir&#34;&gt;Configure Prometheus to write to Grafana Mimir&lt;/h2&gt;
&lt;p&gt;You can either configure Prometheus to write to Grafana Mimir or &lt;a href=&#34;#configure-grafana-agent-to-write-to-grafana-mimir&#34;&gt;configure Grafana Agent to write to Mimir&lt;/a&gt;. Although you can configure both, you do not need to.&lt;/p&gt;
&lt;p&gt;Make a choice based on whether or not you already have a Prometheus server set up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For an existing Prometheus server:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add the following YAML snippet to your Prometheus configuration file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;remote_write:
  - url: http://&amp;lt;ingress-host&amp;gt;/api/v1/push&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In this case, your Prometheus server writes metrics to Grafana Mimir, based on what is defined in the existing &lt;code&gt;scrape_configs&lt;/code&gt; configuration.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart the Prometheus server.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For a Prometheus server that does not exist yet:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Write the following configuration to a &lt;code&gt;prometheus.yml&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;remote_write:
  - url: http://&amp;lt;ingress-host&amp;gt;/api/v1/push

scrape_configs:
  - job_name: prometheus
    honor_labels: true
    static_configs:
      - targets: [&amp;#34;localhost:9090&amp;#34;]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In this case, your Prometheus server writes metrics to Grafana Mimir that it scrapes from itself.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start a Prometheus server by using Docker:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run -p 9090:9090  -v &amp;lt;absolute-path-to&amp;gt;/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; On Linux systems, if &amp;lt;ingress-host&amp;gt; cannot be resolved by the Prometheus server, use the additional command-line flag &lt;code&gt;--add-host=&amp;lt;ingress-host&amp;gt;:&amp;lt;kubernetes-cluster-external-address&amp;gt;&lt;/code&gt; to set it up.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configure-grafana-agent-to-write-to-grafana-mimir&#34;&gt;Configure Grafana Agent to write to Grafana Mimir&lt;/h2&gt;
&lt;p&gt;You can either configure Grafana Agent to write to Grafana Mimir or &lt;a href=&#34;#configure-prometheus-to-write-to-grafana-mimir&#34;&gt;configure Prometheus to write to Mimir&lt;/a&gt;. Although you can configure both, you do not need to.&lt;/p&gt;
&lt;p&gt;Make a choice based on whether or not you already have a Grafana Agent set up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For an existing Grafana Agent:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add the following YAML snippet to your Grafana Agent metrics configurations (&lt;code&gt;metrics.configs&lt;/code&gt;):&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;remote_write:
  - url: http://&amp;lt;ingress-host&amp;gt;/api/v1/push&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In this case, your Grafana Agent will write metrics to Grafana Mimir, based on what is defined in the existing &lt;code&gt;metrics.configs.scrape_configs&lt;/code&gt; configuration.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart the Grafana Agent.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For a Grafana Agent that does not exist yet:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Write the following configuration to an &lt;code&gt;agent.yaml&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;metrics:
  wal_directory: /tmp/grafana-agent/wal

  configs:
    - name: agent
      scrape_configs:
        - job_name: agent
          static_configs:
            - targets: [&amp;#34;127.0.0.1:12345&amp;#34;]
      remote_write:
        - url: http://&amp;lt;ingress-host&amp;gt;/api/v1/push&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In this case, your Grafana Agent writes metrics to Grafana Mimir that it scrapes from itself.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create an empty directory for the write ahead log (WAL) of the Grafana Agent&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start a Grafana Agent by using Docker:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run -v &amp;lt;absolute-path-to-wal-directory&amp;gt;:/etc/agent/data -v &amp;lt;absolute-path-to&amp;gt;/agent.yaml:/etc/agent/agent.yaml -p 12345:12345 grafana/agent&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; On Linux systems, if &amp;lt;ingress-host&amp;gt; cannot be resolved by the Grafana Agent, use the additional command-line flag &lt;code&gt;--add-host=&amp;lt;ingress-host&amp;gt;:&amp;lt;kubernetes-cluster-external-address&amp;gt;&lt;/code&gt; to set it up.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;query-metrics-in-grafana&#34;&gt;Query metrics in Grafana&lt;/h2&gt;
&lt;p&gt;First install Grafana, and then add Mimir as a Prometheus data source.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Start Grafana by using Docker:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --rm --name=grafana -p 3000:3000 grafana/grafana&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; On Linux systems, if &amp;lt;ingress-host&amp;gt; cannot be resolved by Grafana, use the additional command-line flag &lt;code&gt;--add-host=&amp;lt;ingress-host&amp;gt;:&amp;lt;kubernetes-cluster-external-address&amp;gt;&lt;/code&gt; to set it up.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In a browser, go to the Grafana server at &lt;a href=&#34;http://localhost:3000&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://localhost:3000&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sign in using the default username &lt;code&gt;admin&lt;/code&gt; and password &lt;code&gt;admin&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the left-hand side, go to &lt;strong&gt;Configuration&lt;/strong&gt; &amp;gt; &lt;strong&gt;Data sources&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure a new Prometheus data source to query the local Grafana Mimir cluster, by using the following settings:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Field&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Name&lt;/td&gt;
              &lt;td&gt;Mimir&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;URL&lt;/td&gt;
              &lt;td&gt;http://&amp;lt;ingress-host&amp;gt;/prometheus&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;To add a data source, see &lt;a href=&#34;/docs/grafana/latest/datasources/add-a-data-source/&#34;&gt;Add a data source&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify success:&lt;/p&gt;
&lt;p&gt;You should be able to query metrics in &lt;a href=&#34;http://localhost:3000/explore&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Grafana Explore&lt;/a&gt;,
as well as create dashboard panels by using your newly configured &lt;code&gt;Mimir&lt;/code&gt; data source.
For more information, see &lt;a href=&#34;../../monitor-grafana-mimir/&#34;&gt;Monitor Grafana Mimir&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;set-up-metamonitoring&#34;&gt;Set up metamonitoring&lt;/h2&gt;
&lt;p&gt;Grafana Mimir metamonitoring collects metrics or logs, or both,
about Grafana Mimir itself.
In the example that follows, metamonitoring scrapes metrics about
Grafana Mimir itself, and then writes those metrics to the same Grafana Mimir instance.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To enable metamonitoring in Grafana Mimir, add the following YAML snippet to your Grafana Mimir &lt;code&gt;custom.yaml&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;metaMonitoring:
  serviceMonitor:
    enabled: true
  grafanaAgent:
    enabled: true
    installOperator: true
    metrics:
      additionalRemoteWriteConfigs:
        - url: &amp;#34;http://mimir-nginx.mimir-test.svc:80/api/v1/push&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Upgrade Grafana Mimir by using the &lt;code&gt;helm&lt;/code&gt; command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;helm -n mimir-test upgrade mimir grafana/mimir-distributed -f custom.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From &lt;a href=&#34;http://localhost:3000/explore&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Grafana Explore&lt;/a&gt;, verify that your metrics are being written to Grafana Mimir, by querying &lt;code&gt;sum(rate(cortex_ingester_ingested_samples_total[$__rate_interval]))&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;query-metrics-in-grafana-that-is-running-within-the-same-kubernetes-cluster&#34;&gt;Query metrics in Grafana that is running within the same Kubernetes cluster&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install Grafana in the same Kubernetes cluster.&lt;/p&gt;
&lt;p&gt;For details, see &lt;a href=&#34;/docs/grafana/latest/setup-grafana/installation/kubernetes/&#34;&gt;Deploy Grafana on Kubernetes&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stop the Grafana instance that is running in the Docker container, to allow for port-forwarding.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Port-forward Grafana to &lt;code&gt;localhost&lt;/code&gt;, by using the &lt;code&gt;kubectl&lt;/code&gt; command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;kubectl port-forward service/grafana 3000:3000&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In a browser, go to the Grafana server at &lt;a href=&#34;http://localhost:3000&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://localhost:3000&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sign in using the default username &lt;code&gt;admin&lt;/code&gt; and password &lt;code&gt;admin&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the left-hand side, go to &lt;strong&gt;Configuration&lt;/strong&gt; &amp;gt; &lt;strong&gt;Data sources&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure a new Prometheus data source to query the local Grafana Mimir server, by using the following settings:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Field&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Name&lt;/td&gt;
              &lt;td&gt;Mimir&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;URL&lt;/td&gt;
              &lt;td&gt;&lt;a href=&#34;http://mimir-nginx.mimir-test.svc:80/prometheus&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://mimir-nginx.mimir-test.svc:80/prometheus&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;To add a data source, see &lt;a href=&#34;/docs/grafana/latest/datasources/add-a-data-source/&#34;&gt;Add a data source&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify success:&lt;/p&gt;
&lt;p&gt;You should be able to query metrics in &lt;a href=&#34;/docs/grafana/latest/explore/&#34;&gt;Grafana Explore&lt;/a&gt;,
as well as create dashboard panels by using your newly configured &lt;code&gt;Mimir&lt;/code&gt; data source.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
]]></content><description>&lt;h1 id="getting-started-with-grafana-mimir-using-the-helm-chart">Getting started with Grafana Mimir using the Helm chart&lt;/h1>
&lt;p>The &lt;a href="https://helm.sh/" target="_blank" rel="noopener noreferrer">Helm&lt;/a> chart allows you to configure, install, and upgrade Grafana Mimir within a Kubernetes cluster.&lt;/p></description></item><item><title>Deploying Grafana Mimir with Jsonnet and Tanka</title><link>https://grafana.com/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/jsonnet/</link><pubDate>Wed, 11 Mar 2026 16:56:47 -0400</pubDate><guid>https://grafana.com/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/jsonnet/</guid><content><![CDATA[&lt;h1 id=&#34;deploying-grafana-mimir-with-jsonnet-and-tanka&#34;&gt;Deploying Grafana Mimir with Jsonnet and Tanka&lt;/h1&gt;
&lt;p&gt;Grafana Labs publishes &lt;a href=&#34;https://jsonnet.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Jsonnet&lt;/a&gt; files that you can use to deploy Grafana Mimir in &lt;a href=&#34;../../architecture/deployment-modes/#microservices-mode&#34;&gt;microservices mode&lt;/a&gt;.
Jsonnet files are located in the &lt;a href=&#34;https://github.com/grafana/mimir/tree/main/operations/mimir&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Mimir repository&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/jsonnet/deploying/&#34;&gt;Deploying with Jsonnet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/jsonnet/configuring-low-resources/&#34;&gt;Configuring low resources&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/jsonnet/configuring-ruler/&#34;&gt;Configuring ruler&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/jsonnet/configuring-autoscaling/&#34;&gt;Configuring autoscaling&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/jsonnet/migrating-from-consul-to-memberlist/&#34;&gt;Migrating from Consul to memberlist&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
]]></content><description>&lt;h1 id="deploying-grafana-mimir-with-jsonnet-and-tanka">Deploying Grafana Mimir with Jsonnet and Tanka&lt;/h1>
&lt;p>Grafana Labs publishes &lt;a href="https://jsonnet.org/" target="_blank" rel="noopener noreferrer">Jsonnet&lt;/a> files that you can use to deploy Grafana Mimir in &lt;a href="../../architecture/deployment-modes/#microservices-mode">microservices mode&lt;/a>.
Jsonnet files are located in the &lt;a href="https://github.com/grafana/mimir/tree/main/operations/mimir" target="_blank" rel="noopener noreferrer">Mimir repository&lt;/a>.&lt;/p></description></item><item><title>Upgrade the Grafana Mimir Helm chart from version 2.1 to 3.0</title><link>https://grafana.com/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/upgrade-helm-chart-2.1-to-3.0/</link><pubDate>Wed, 11 Mar 2026 16:56:47 -0400</pubDate><guid>https://grafana.com/docs/mimir/v2.3.x/operators-guide/deploy-grafana-mimir/upgrade-helm-chart-2.1-to-3.0/</guid><content><![CDATA[&lt;h1 id=&#34;upgrade-the-grafana-mimir-helm-chart-from-version-21-to-30&#34;&gt;Upgrade the Grafana Mimir Helm chart from version 2.1 to 3.0&lt;/h1&gt;
&lt;p&gt;There are breaking changes between the Grafana Mimir Helm chart versions 2.1 and 3.0.
Several parameters that were available in version 2.1 of the mimir-distributed Helm chart have changed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To upgrade from Helm chart 2.1 to 3.0:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Understand the improvements that we made to the Mimir configuration in the Helm chart:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Mimir configuration is now stored in a Kubernetes ConfigMap by default, instead of a Kubernetes Secret.&lt;/li&gt;
&lt;li&gt;You can override individual properties without copying the entire &lt;code&gt;mimir.config&lt;/code&gt; block. Specify properties you want to override under the &lt;code&gt;mimir.structuredConfig&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can move secrets outside the Mimir configuration via external secrets and environment variables. Environment variables can be used to externalize secrets from the configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Decide whether or not you need to update the Mimir configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you are using external configuration (&lt;code&gt;useExternalConfig: true&lt;/code&gt;), then you must set &lt;code&gt;configStorageType: Secret&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; It is now possible to use a ConfigMap to manage your external configuration instead.
If your external configuration contains secrets, then you can externalize them and use a ConfigMap. See &lt;em&gt;Externalize secrets&lt;/em&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you are not using external configuration (&lt;code&gt;useExternalConfig: false&lt;/code&gt;), and your Mimir configuration contains secrets, chose one of two options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Keep the previous location as-is by setting &lt;code&gt;configStorageType: Secret&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Externalize secrets:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Move secrets from the Mimir configuration to a &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/#working-with-secrets&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Kubernetes Secret&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mount the Kubernetes Secret via &lt;code&gt;global.extraEnvFrom&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;global:
  extraEnvFrom:
    - secretRef:
        name: mysecret&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For more information, see &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/#use-case-as-container-environment-variables&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Secrets - Use case: As container environment variables&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Replace the values in the Mimir configuration with environment variables.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;mimir:
  structuredConfig:
    blocks_storage:
      s3:
        secret_access_key: ${AWS_SECRET_ACCESS_KEY}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you are not using an external configuration (&lt;code&gt;useExternalConfig: false&lt;/code&gt;), and your Mimir configuration does not contain secrets, then the storage location is automatically changed by Helm and you do not need to do anything.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See &lt;a href=&#34;#example-of-migrated-values&#34;&gt;Example migrated values file&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update your memcached configuration via your customized Helm chart values, if needed:&lt;/p&gt;
&lt;p&gt;The mimir-distributed Helm chart supports multiple cache types.
If you have not enabled any memcached caches,
and you are not overriding the values of &lt;code&gt;memcached&lt;/code&gt;,
&lt;code&gt;memcached-queries&lt;/code&gt;,
&lt;code&gt;memcached-metadata&lt;/code&gt;,
or &lt;code&gt;memcached-results&lt;/code&gt; sections,
then you do not need to update the memcached configuration.&lt;/p&gt;
&lt;p&gt;Otherwise, check to see if you need to change any of the following configuration parameters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;memcached&lt;/code&gt; section was repurposed, and &lt;code&gt;chunks-cache&lt;/code&gt; was added.&lt;/li&gt;
&lt;li&gt;The contents of the &lt;code&gt;memcached&lt;/code&gt; section now contain the following common values that are shared across all memcached instances: &lt;code&gt;image&lt;/code&gt;, &lt;code&gt;podSecurityContext&lt;/code&gt;, and &lt;code&gt;containerSecurityContext&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The following sections were renamed:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;memcached-queries&lt;/code&gt; is now &lt;code&gt;index-cache&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memcached-metadata&lt;/code&gt; is now &lt;code&gt;metadata-cache&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memcached-results&lt;/code&gt; is now &lt;code&gt;results-cache&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;memcached*.replicaCount&lt;/code&gt; values were renamed:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;memcached.replicaCount&lt;/code&gt; is now &lt;code&gt;chunks-cache.replicas&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memcached-queries.replicaCount&lt;/code&gt; is now &lt;code&gt;index-cache.replicas&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memcached-metadata.replicaCount&lt;/code&gt; is now &lt;code&gt;metadata-cache.replicas&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memcached-results.replicaCount&lt;/code&gt; is now &lt;code&gt;results-cache.replicas&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;memcached*.architecture&lt;/code&gt; values were removed.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;memcached*.arguments&lt;/code&gt; values were removed.&lt;/li&gt;
&lt;li&gt;The default arguments are now encoded in the Helm chart templates; the values &lt;code&gt;*-cache.allocatedMemory&lt;/code&gt;, &lt;code&gt;*-cache.maxItemMemory&lt;/code&gt; and &lt;code&gt;*-cache.port&lt;/code&gt; control the arguments &lt;code&gt;-m&lt;/code&gt;, &lt;code&gt;-I&lt;/code&gt; and &lt;code&gt;-u&lt;/code&gt;. To provide additional arguments, use &lt;code&gt;*-cache.extraArgs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;memcached*.metrics&lt;/code&gt; values were consolidated under &lt;code&gt;memcachedExporter&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See also an &lt;a href=&#34;#example-of-migration-of-customized-memcached-values-between-versions-21-and-30&#34;&gt;example of migration of customized memcached values between versions 2.1 and 3.0&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update your memcached-related Mimir configuration
via your customized Helm chart value that is named &lt;code&gt;mimir.config&lt;/code&gt;, if needed:&lt;/p&gt;
&lt;p&gt;The configuration parameters for memcached &lt;code&gt;addresses&lt;/code&gt; and &lt;code&gt;max_item_size&lt;/code&gt; have changed in the default &lt;code&gt;mimir.config&lt;/code&gt; value.
If you previously copied the value of &lt;code&gt;mimir.config&lt;/code&gt; into your values file, then take the latest version of the &lt;code&gt;memcached&lt;/code&gt; configuration in the &lt;code&gt;mimir.config&lt;/code&gt; from the &lt;code&gt;values.yaml&lt;/code&gt; file in the Helm chart.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(Conditional) If you have enabled &lt;code&gt;serviceMonitor&lt;/code&gt;, or you are overriding the value of anything under the &lt;code&gt;serviceMonitor&lt;/code&gt; section, or both, then move the &lt;code&gt;serviceMonitor&lt;/code&gt; section under &lt;code&gt;metaMonitoring&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the &lt;code&gt;rbac&lt;/code&gt; section, based on the following changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you are not overriding the value of anything under the &lt;code&gt;rbac&lt;/code&gt; section, then skip this step.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;rbac.pspEnabled&lt;/code&gt; value was removed.&lt;/li&gt;
&lt;li&gt;To continue using Pod Security Policy (PSP), set &lt;code&gt;rbac.create&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;rbac.type&lt;/code&gt; to &lt;code&gt;psp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To start using Security Context Constraints (SCC) instead of PSP, set &lt;code&gt;rbac.create&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;rbac.type&lt;/code&gt; to &lt;code&gt;scc&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the &lt;code&gt;mimir.config&lt;/code&gt; value, based on the following information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compare your overridden value of &lt;code&gt;mimir.config&lt;/code&gt; with the one in the &lt;code&gt;values.yaml&lt;/code&gt; file in the chart. If you are not overriding the value of &lt;code&gt;mimir.config&lt;/code&gt;, then skip this step.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Decide whether or not to update the &lt;code&gt;nginx&lt;/code&gt; configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Unless you have overridden the value of &lt;code&gt;nginx.nginxConfig.file&lt;/code&gt;,
and you are using the default &lt;code&gt;mimir.config&lt;/code&gt;, then skip this step.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Otherwise, compare the overridden &lt;code&gt;nginx.nginxConfig.file&lt;/code&gt; value
to the one in the &lt;code&gt;values.yaml&lt;/code&gt; file in the Helm chart,
and incorporate the differences.
Pay attention to the sections that contain &lt;code&gt;x_scope_orgid&lt;/code&gt;.
The value in the &lt;code&gt;values.yaml&lt;/code&gt; file contains Nginx configuration
that adds the &lt;code&gt;X-Scope-OrgId&lt;/code&gt; header to incoming requests that do not already set it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This change allows Mimir clients to keep sending requests without needing to specify a tenant ID, even though multi-tenancy is now enabled by default.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;example-of-migrated-values&#34;&gt;Example of migrated values&lt;/h2&gt;
&lt;p&gt;The example values file is compatible with version 2.1 of the mimir-distributed Helm chart, and demonstrates a few things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All memcached caches are enabled.&lt;/li&gt;
&lt;li&gt;The default pod security policy is disabled.&lt;/li&gt;
&lt;li&gt;ServiceMonitors are enabled.&lt;/li&gt;
&lt;li&gt;Object storage credentials for block storage are specified directly in the &lt;code&gt;mimir.config&lt;/code&gt; value.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The unmodified parts of the default &lt;code&gt;mimir.config&lt;/code&gt; are omitted for brevity, even though in a valid 2.1 values file they need to be included.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;rbac:
  pspEnabled: false

memcached:
  enabled: true
  replicaCount: 1

memcached-queries:
  enabled: true
  replicaCount: 1

memcached-metadata:
  enabled: true
  replicaCount: 1

memcached-results:
  enabled: true
  replicaCount: 1

serviceMonitor:
  enabled: true

mimir:
  config: |-
    #######
    # default contents omitted for brevity
    #######

    blocks_storage:
      backend: s3
      s3:
        endpoint: s3.amazonaws.com
        bucket_name: my-blocks-bucket
        access_key_id: FAKEACCESSKEY
        secret_access_key: FAKESECRETKEY

    #######
    # default contents omitted for brevity
    #######&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After applying the migration steps listed in this guide,
you now have a Kubernetes Secret that contains
the S3 credentials, and a values file for version 3.0.
The values file is does not have any omissions.
The parts that were omitted in the 2.1 version are automatically included by the Helm chart in version 3.0.&lt;/p&gt;
&lt;p&gt;Kubernetes Secret:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;apiVersion: v1
kind: Secret
metadata:
  name: mimir-bucket-secret
data:
  AWS_ACCESS_KEY_ID: FAKEACCESSKEY
  AWS_SECRET_ACCESS_KEY: FAKESECRETKEY&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Values file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;rbac:
  create: false

chunks-cache:
  enabled: true
  replicas: 1

index-cache:
  enabled: true
  replicas: 1

metadata-cache:
  enabled: true
  replicas: 1

results-cache:
  enabled: true
  replicas: 1

metaMonitoring:
  serviceMonitor:
    enabled: true

mimir:
  structuredConfig:
    blocks_storage:
      backend: s3
      s3:
        access_key_id: ${AWS_ACCESS_KEY_ID}
        bucket_name: my-blocks-bucket
        endpoint: s3.amazonaws.com
        secret_access_key: ${AWS_SECRET_ACCESS_KEY}

global:
  extraEnvFrom:
    - secretRef:
        name: mimir-bucket-secret&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;example-of-migration-of-customized-memcached-values-between-versions-21-and-30&#34;&gt;Example of migration of customized memcached values between versions 2.1 and 3.0&lt;/h2&gt;
&lt;p&gt;Version 2.1:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;memcached:
  replicaCount: 12
  arguments:
    - -m 2048
    - -I 128m
    - -u 12345
  image:
    repository: memcached
    tag: 1.6.9-alpine

memcached-queries:
  replicaCount: 3
  architecture: modern
  image:
    repository: memcached
    tag: 1.6.9-alpine&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Version 3.0:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;memcached:
  image:
    repository: memcached
    tag: 1.6.9-alpine

chunks-cache:
  allocatedMemory: 2048
  maxItemMemory: 128
  port: 12345
  replicas: 12

index-cache:
  replicas: 3&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="upgrade-the-grafana-mimir-helm-chart-from-version-21-to-30">Upgrade the Grafana Mimir Helm chart from version 2.1 to 3.0&lt;/h1>
&lt;p>There are breaking changes between the Grafana Mimir Helm chart versions 2.1 and 3.0.
Several parameters that were available in version 2.1 of the mimir-distributed Helm chart have changed.&lt;/p></description></item></channel></rss>