Overview

Reloader is a lightweight Kubernetes controller from Stakater that automatically restarts pods when their mounted ConfigMaps or Secrets change.

Normally, if you update a ConfigMap or Secret in Kubernetes, the pods consuming it don’t pick up the changes automatically. You either need to roll out the Deployment manually, or write your own automation. That’s where Reloader comes in 🚀

It watches for updates to ConfigMaps and Secrets, and then triggers a rolling restart of Deployments, StatefulSets, or DaemonSets that reference them.

Why You Need It

  • Configuration without downtime: update your application configs without manual intervention.
  • Fewer human errors: no need to remember to kubectl rollout restart ....
  • GitOps friendly: works seamlessly with GitOps flows (FluxCD/Argo CD).
  • Secure secret updates: when your Secrets rotate (TLS certs, database passwords), pods refresh automatically.
  • Consistent environments: makes sure all pods always use the latest configuration.

For any platform-level Kubernetes setup, it’s almost a must-have.

Installing Reloader with FluxCD and Kustomize

Let’s say you’re organizing your GitOps repository with a platform/ folder for cluster-wide services (monitoring, ingress, cert-manager, etc.). Reloader fits right there.

Example folder structure:

infrastructure/
  environments/
    production/
      flux-system/
      platform/
        reloader/
          kustomization.yaml
          release.yaml

release.yaml (HelmRelease)

FluxCD uses the HelmRelease CRD (via helm-controller) to install Helm charts:

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: reloader
  namespace: kube-system
spec:
  interval: 30m
  chart:
    spec:
      chart: reloader
      version: "1.0.112" # pick a stable release
      sourceRef:
        kind: HelmRepository
        name: stakater
        namespace: flux-system
  values:
    reloader:
      reloadStrategy: "annotations"

kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - release.yaml

And don’t forget to add the HelmRepository reference once in your flux-system sources:

apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: stakater
  namespace: flux-system
spec:
  interval: 24h
  url: https://stakater.github.io/stakater-charts

How to Use Reloader

By (default)[https://github.com/stakater/Reloader/blob/master/deployments/kubernetes/chart/reloader/values.yaml], Reloader only restarts workloads that explicitly opt-in. You do that with annotations:

  • Restart on ConfigMap changes:

    reloader.stakater.com/match: "true"
    
  • Restart on a specific ConfigMap or Secret:

    reloader.stakater.com/auto: "my-configmap,my-secret"
    

Example Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: apps
  annotations:
    reloader.stakater.com/match: "true"
spec:
  replicas: 2
  template:
    spec:
      containers:
        - name: app
          image: my-app:latest
          envFrom:
            - configMapRef:
                name: my-configmap

Now, whenever my-configmap is updated in Git and synced by FluxCD, Reloader will trigger a rollout of my-app.

Final Thoughts

Reloader is a tiny but powerful tool that closes the gap between config changes and application rollouts in Kubernetes.

In a FluxCD GitOps setup, it fits perfectly into the platform/ layer and helps keep clusters consistent and self-healing with minimal effort.

👉 If you’re building a production-grade GitOps platform, Reloader is one of those “just install it and forget it” components — until the day it saves you from a nasty bug caused by stale configs 😉

That’s all.