---
title: "Upgrade the Helm chart to 6.0 | Grafana Loki documentation"
description: "Upgrade the Helm chart from 5.x to 6.0."
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

This is documentation for the **next** version of Grafana Loki documentation. For the latest stable release, go to the [latest version](/docs/loki/latest/).

[Documentation](/docs/)![breadcrumb arrow](/static/assets/img/icons/grafana-icon-breadcrumb-arrow-gray.svg) [Grafana Loki](/docs/loki/next/)![breadcrumb arrow](/static/assets/img/icons/grafana-icon-breadcrumb-arrow-gray.svg) [Set up](/docs/loki/next/setup/)![breadcrumb arrow](/static/assets/img/icons/grafana-icon-breadcrumb-arrow-gray.svg) [Upgrade](/docs/loki/next/setup/upgrade/)![breadcrumb arrow](/static/assets/img/icons/grafana-icon-breadcrumb-arrow-gray.svg) Upgrade the Helm chart to 6.0

Open source

## Upgrading to v6.x

v6.x of this chart introduces distributed mode but also introduces breaking changes from v5x.

> Caution
> 
> If you have not yet [migrated to TSDB](/docs/loki/next/setup/migrate/migrate-to-tsdb/), perform that migration before you upgrade your Loki Helm chart to v6.x.

> Note
> 
> Simple Scalable Deployment (SSD) mode is being deprecated. The timeline for the deprecation is to be determined (TBD), but will happen before Loki 4.0 is released. When you upgrade to Loki 3.x, you should choose either monolithic (single-binary) or microservices (distributed) as your [deployment mode](/docs/loki/next/get-started/deployment-modes/).

> Tip
> 
> With the move to the [Grafana-community/helm-charts repository](https://github.com/grafana-community/helm-charts), the chart numbering has changed. Major version updates signal breaking changes in the chart. For more information, refer to the [README](https://github.com/grafana-community/helm-charts/blob/main/charts/loki/README.md#upgrading).

### Changes

#### BREAKING: `deploymentMode` setting

This only breaks you if you are running the chart in Single Binary mode, you will need to set

YAML ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```yaml
deploymentMode: SingleBinary
```

#### BREAKING: `lokiCanary` section was moved

This section was moved from within the `monitoring` section to the root level of the values file.

#### BREAKING: `topologySpreadConstraints` and `podAffinity` converted to objects

Previously they were strings which were passed through `tpl` now they are normal objects which will be added to deployments.

Also we removed the soft constraint on zone.

#### BREAKING: `externalConfigSecretName` was removed and replaced

Instead you can now provide `configObjectName` which is used by Loki components for loading the config.

`generatedConfigObjectName` also can be used to control the name of the config object created by the chart.

This gives greater flexibility in using the chart to still generate a config object but allowing for another process to load and mutate this config into a new object which can be loaded by Loki and `configObjectName`

#### Monitoring

After some consideration of how this chart works with other charts provided by Grafana, we decided to deprecate the monitoring sections of this chart and take a new approach entirely to monitoring Loki, Mimir and Tempo with the [Meta Monitoring Chart](https://github.com/grafana/meta-monitoring-chart).

Reasons:

- There were conflicts with this chart and the Mimir chart both installing the Agent Operator.
- The Agent Operator is deprecated.
- The dependency on the Prometheus operator is not one we are able to support well.

The [Meta Monitoring Chart](https://github.com/grafana/meta-monitoring-chart) is an improvement over the previous approach because it allows for installing a clustered Grafana Agent which can send metrics, logs, and traces to Grafana Cloud, or letting you install a monitoring-only local installation of Loki, Mimir, Tempo, and Grafana.

The monitoring sections of this chart still exist but are disabled by default.

If you wish to continue using the self monitoring features you should use the following configuration, but please do note a future version of this chart will remove this capability completely:

YAML ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```yaml
monitoring:
  enabled: true
  selfMonitoring:
    enabled: true
    grafanaAgent:
      installOperator: true
```

#### Memcached is included and enabled by default

Caching is crucial to the proper operation of Loki and Memcached is now included in this chart and enabled by default for the `chunksCache` and `resultsCache`.

If you are already running Memcached separately you can remove your existing installation and use the Memcached deployments built into this chart.

##### Single Binary

Memcached also deploys for the Single Binary, but this may not be desired in resource constrained environments.

You can disable it with the following configuration:

YAML ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```yaml
chunksCache:
  enabled: false
resultsCache:
  enabled: false
```

With these caches disabled, Loki will return to defaults which enables an in-memory results and chunks cache, so you will still get some caching.

#### BREAKING: Zone-aware ingester StatefulSet serviceName fix (6.34.0+)

**Affected users**: Only deployments using zone-aware ingester replication (`ingester.zoneAwareReplication.enabled: true`)

In Helm chart version 6.34.0, [PR #18558](https://github.com/grafana/loki/pull/18558) fixed the `serviceName` field in zone-aware ingester StatefulSets to correctly reference headless services. However, since `serviceName` is an immutable field in Kubernetes StatefulSets, upgrading to 6.34.0 requires manual intervention.

**Required action before upgrading to 6.34.0**:

1. **Check if you’re affected**:
   
   Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```bash
   helm get values <RELEASE_NAME> | grep -A5 zoneAwareReplication
   ```
   
   If `enabled: true` appears, you need to follow these steps.
2. **Delete the StatefulSets** (data will be preserved):
   
   Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```bash
   kubectl delete statefulset \
     <RELEASE_NAME>-ingester-zone-a \
     <RELEASE_NAME>-ingester-zone-b \
     <RELEASE_NAME>-ingester-zone-c \
     --cascade=orphan
   ```
3. **Proceed with the Helm upgrade**:
   
   Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```bash
   helm upgrade <RELEASE_NAME> grafana/loki --version 6.34.0
   ```

**What happens**:

- PersistentVolumeClaims and data are preserved
- New StatefulSets will be created with correct service references
- Pods will restart and reattach to existing storage

**Why this change was necessary**: The previous configuration caused ingester scaling operations to fail because the rollout-operator couldn’t find the correct headless services for the `/ingester/prepare-downscale` endpoint.

#### BREAKING: Make access modes for persistence on all PVCs and StatefulSets editable (6.38.0+)

Version 6.38.0 of the Helm charts introduced the ability to edit the access modes for persistence on all PVCs and StatefulSets. This is a breaking change because it requires users to manually orphan StatefulSets before upgrading.

**Required action before upgrading to 6.38.0**:

1. **Delete the StatefulSets** (delete only the ones that exist in your deployment):
   
   Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```bash
   # Core components (SimpleScalable mode)
   kubectl delete statefulset <RELEASE_NAME>-write --cascade=orphan
   kubectl delete statefulset <RELEASE_NAME>-backend --cascade=orphan
   
   # Single binary mode
   kubectl delete statefulset <RELEASE_NAME> --cascade=orphan
   
   # Distributed mode components
   kubectl delete statefulset <RELEASE_NAME>-ingester --cascade=orphan
   
   # Zone-aware ingester (if zoneAwareReplication.enabled is true)
   kubectl delete statefulset <RELEASE_NAME>-ingester-zone-a --cascade=orphan
   kubectl delete statefulset <RELEASE_NAME>-ingester-zone-b --cascade=orphan
   kubectl delete statefulset <RELEASE_NAME>-ingester-zone-c --cascade=orphan
   
   kubectl delete statefulset <RELEASE_NAME>-index-gateway --cascade=orphan
   kubectl delete statefulset <RELEASE_NAME>-compactor --cascade=orphan
   kubectl delete statefulset <RELEASE_NAME>-ruler --cascade=orphan
   kubectl delete statefulset <RELEASE_NAME>-pattern-ingester --cascade=orphan
   kubectl delete statefulset <RELEASE_NAME>-bloom-planner --cascade=orphan
   kubectl delete statefulset <RELEASE_NAME>-bloom-gateway --cascade=orphan
   ```
2. **Proceed with the Helm upgrade**:
   
   Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```bash
   helm upgrade <RELEASE_NAME> grafana/loki --version 6.38.0
   ```

#### Distributed mode

This chart introduces the ability to run Loki in distributed, or [microservices mode](/docs/loki/next/get-started/deployment-modes/#microservices-mode). For installation instructions, refer to [Install the microservices Helm chart](/docs/loki/next/setup/install/helm/install-microservices/).
