grafana-rollout-operator
Grafana Rollout Operator Overview
Secure your stack with a hardened Grafana Rollout Operator image freshly-built by Minimus. Minimus images always include the most up-to-date package version for all packages and dependencies contained in the image.
The Grafana Rollout Operator for Kubernetes coordinates the rollout of Pods between different StatefulSets within a specific namespace. It can be used to manage multi-Availability Zone deployments where Pods running in each Availability Zone (AZ) are managed by a dedicated StatefulSet.
Try It Out
Prerequisites
- A running Kubernetes cluster (v1.21 or higher is recommended)
- Helm v3.8 or higher for OCI support (Installation instructions)
kubectlinstalled and configured
Step 1: Start Cluster
If you have a cluster to work with, skip this step. Otherwise, start a Minikube cluster. Deployment instructions
Step 2: Add Repository to your Local Client
Add the Helm chart to your local Helm client.
helm repo add grafana https://grafana.github.io/helm-charts
helm repo updateStep 3: Deploy via Helm Chart
Deploy the rollout operator to the namespace where your target StatefulSets run (e.g., mimir if managing Mimir StatefulSets):
helm install grafana-rollout-operator grafana/rollout-operator \
--namespace mimir \
--create-namespace \
--set image.registry=reg.mini.dev \
--set image.repository=grafana-rollout-operator \
--set image.tag=latestWait a minute and check that the Pods are up and running:
kubectl -n mimir get poConfirm that Minimus images were deployed:
kubectl -n mimir describe pods | grep Image:Step 4: Clean Up
Uninstall the chart to delete the namespace and its resources, including Pods, Deployments, Services, Secrets, ConfigMaps, etc.:
helm uninstall grafana-rollout-operator -n mimirRunning with Grafana Mimir
The Grafana Rollout Operator is namespaced and must be installed in the same Kubernetes namespace as the StatefulSets it manages. For Mimir deployments, this means installing the rollout operator in the Mimir namespace (typically mimir).
Installing in the Mimir Namespace
Install the rollout operator directly into your Mimir namespace using the Minimus image:
helm install grafana-rollout-operator grafana/rollout-operator \
--namespace mimir \
--create-namespace \
--set image.registry=reg.mini.dev \
--set image.repository=grafana-rollout-operator \
--set image.tag=latestIf you installed Mimir via the grafana/mimir-distributed Helm chart
If you installed Mimir using the grafana/mimir-distributed Helm chart, do not install a separate rollout-operator. Instead, enable and configure the rollout operator through the Mimir chart's values by overriding the rollout_operator section to use the Minimus image:
rollout_operator:
enabled: true
image:
registry: reg.mini.dev
repository: grafana-rollout-operator
tag: latestNote: The exact key names may vary slightly depending on your chart version. Consult your chart's values.yaml for the precise structure.
Prerequisites for coordinated rollouts
For the rollout operator to coordinate rollouts, your StatefulSets must:
- Be part of a
rollout-group(shared label value, e.g.,grafana.com/rollout-group=mimir-ingester) - Use the
OnDeleteupdate strategy (notRollingUpdate)
The grafana/mimir-distributed Helm chart typically configures these automatically. If you're managing StatefulSets manually, ensure both conditions are met; otherwise the operator will skip the group.
Optional: Zone-by-zone downscale sequencing
For multi-zone Mimir deployments, you can configure zone-by-zone downscale sequencing by applying labels and annotations to each zone's StatefulSet:
Labels:
grafana.com/min-time-between-zones-downscale: Minimum time to wait between downscaling different zones (must be set on each StatefulSet)grafana.com/prepare-downscale: Enable prepare-downscale hooks (set totrue)
Annotations:
grafana.com/prepare-downscale-http-path: HTTP path for the prepare-downscale endpoint (use the path form expected by rollout-operator, typically without a leading/)grafana.com/prepare-downscale-http-port: HTTP port for the prepare-downscale endpointgrafana.com/rollout-downscale-leader: On non-leader zones, set this to the name of the leader StatefulSet (e.g.,mimir-ingester-zone-a)grafana.com/rollout-upscale-only-when-leader-ready: Set totrueon follower zones to wait for leader readiness before upscaling
Important: Choose the correct Mimir prepare endpoint for your architecture. For example:
ingester/prepare-partition-downscalefor ingest storage (no leading/)ingester/prepare-instance-ring-downscalefor classic ring-based deployments (no leading/)
Example commands for a three-zone deployment (replace <path> and <port> with your values, or use ingester/prepare-partition-downscale and 80 for ingest storage):
# Zone A (leader)
kubectl -n mimir label sts mimir-ingester-zone-a \
grafana.com/min-time-between-zones-downscale=5m \
grafana.com/prepare-downscale=true
kubectl -n mimir annotate sts mimir-ingester-zone-a \
grafana.com/prepare-downscale-http-path=<path> \
grafana.com/prepare-downscale-http-port=<port>
# Zone B (follows zone A)
kubectl -n mimir label sts mimir-ingester-zone-b \
grafana.com/min-time-between-zones-downscale=5m \
grafana.com/prepare-downscale=true
kubectl -n mimir annotate sts mimir-ingester-zone-b \
grafana.com/rollout-downscale-leader=mimir-ingester-zone-a \
grafana.com/rollout-upscale-only-when-leader-ready=true \
grafana.com/prepare-downscale-http-path=<path> \
grafana.com/prepare-downscale-http-port=<port>
# Zone C (follows zone B)
kubectl -n mimir label sts mimir-ingester-zone-c \
grafana.com/min-time-between-zones-downscale=5m \
grafana.com/prepare-downscale=true
kubectl -n mimir annotate sts mimir-ingester-zone-c \
grafana.com/rollout-downscale-leader=mimir-ingester-zone-b \
grafana.com/rollout-upscale-only-when-leader-ready=true \
grafana.com/prepare-downscale-http-path=<path> \
grafana.com/prepare-downscale-http-port=<port>Technical Considerations
The Grafana Rollout Operator image provided by Minimus is a slim, security-hardened alternative to the public image from Docker Hub. The images are largely interchangeable, with a few differences as noted below.
Grafana-Rollout-Operator built by Minimus:
- Runs as non-root by default. The public image runs as user 65532.
- Drill down on the version specification tab to see the default user, listening ports, entrypoint, volumes, environment variables, etc.
The Payoff
A hardened, minimal image that will remain more secure for the long run and accrue vulnerabilities at a slower rate.
- See the risk reduction dashboard for a detailed CVE comparison over the past 30 days.
- Review the compliance report to see the default hardening and security configurations for the image.
Terms & Info
Trademark
This catalog is published by Minimus. All product names, logos, and marks, other than those belonging to Minimus, shown are owned by their respective rights holders and appear here only to identify the open source software each image contains. Minimus claims no ownership of those marks and implies no affiliation with, endorsement by, certification by, or sponsorship by any rights holder.
Disclaimer
Images are provided "as-is" without warranty of any kind. "Hardened" refers to the security configuration applied at the time of build and does not constitute a guarantee of ongoing security or absence of vulnerabilities. The free tier is provided without support, SLA, or guaranteed patching timelines. Security updates may be applied to paid subscriptions before or instead of free tier images. By pulling or using any image you agree to our Terms of Use.