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 😉
Useful Links
That’s all.