Reloader
CLAUDE.md11k starsChanged 3 years agoApache-2.0View on GitHub
Reloader is a Kubernetes operator that automatically triggers rolling restarts of workloads when the ConfigMaps or Secrets they reference are updated. Without it, Kubernetes does not restart pods when configuration changes — operators must do it manually or rely on GitOps pipelines. What it watches: ConfigMaps, Secrets, Namespaces, and (optionally) SecretProviderClassPodStatus (CSI-mounted secrets). Workload types it can reload: Deployment, StatefulSet, DaemonSet, CronJob, Job, Argo Rollout, and OpenShift DeploymentConfig. How restarts are triggered: Two strategies (selected via --reload-strategy): 1. env-vars (default)…
We split this CLAUDE.md into the rules it gives an agent
10 rules. About 0 are common, 5 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 18
Duplicate reload suppression: If a workload references both a ConfigMap and a Secret that are updated in the same controller reconcile …
- Very specific: line 91
HA Mode: if --enable-ha, internal/pkg/leadership/ runs Kubernetes Lease-based leader election.
- Distinctive: line 99
All annotation names are configurable via CLI flags.
- Distinctive: line 179
When a version change is detected, it computes a SHA of the object's IDs and versions.
- Distinctive: line 189
Only works for secrets mounted as volumes via CSI, not env-var-based CSI injection.
- Very specific: line 230
Kubernetes client patterns: All k8s operations go through the kube.Clients struct.
- Very specific: line 241
Adding new behavior: Add flag to options/flags.go + common.ReloaderOptions struct → wire in cmd/reloader.go → implement logic in handler/ …
- Distinctive: line 247
Duplicate reloads: If a workload references multiple ConfigMaps/Secrets and all change simultaneously, each change event fires a separate …
- Very specific: line 263
Argo Rollouts: Must be explicitly enabled via --is-Argo-Rollouts=true.
- Very specific: line 279
Load test scenarios S7–S13: Only S1, S4, and S6 are confirmed from CI.
≈ “Common” is an estimate: at least 1 in 5 of the 25,680 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Stakater Reloader Project Memory
Project Purpose
Reloader is a Kubernetes operator that automatically triggers rolling restarts of workloads when the ConfigMaps or Secrets they reference are updated. Without it, Kubernetes does not restart pods when configuration changes — operators must do it manually or rely on GitOps pipelines.
What it watches: ConfigMaps, Secrets, Namespaces, and (optionally) SecretProviderClassPodStatus (CSI-mounted secrets).
Workload types it can reload: Deployment, StatefulSet, DaemonSet, CronJob, Job, Argo Rollout, and OpenShift DeploymentConfig.
How restarts are triggered: Two strategies (selected via --reload-strategy):
- env-vars (default) — injects an environment variable (
STAKATER_{NAME}_{TYPE}) into every container with the SHA1 hash of the resource's data. A change in data changes the env var value, causing Kubernetes to restart pods. - annotations — writes the SHA1 hash into the pod template's annotations, which also forces a rollout.
The core problem it solves: ConfigMaps and Secrets are decoupled from pod lifecycle in Kubernetes. Applications reading config at startup see stale data after a config update unless pods are restarted. Reloader closes that gap automatically and selectively.
Potential improvements observed:
- Duplicate reload suppression: If a workload references both a ConfigMap and a Secret that are updated in the same controller reconcile cycle, it may get reloaded twice. Could be solved with a per-workload debounce map keyed by namespace/name/resourceVersion, flushed after a short TTL.
- CronJob/Job reload is destructive: Jobs are deleted and recreated on change, which loses run history. Could instead only annotate the CronJob template without spawning a new Job.
- No per-resource reload rate limiting: A rapid-fire ConfigMap update (e.g., from a CI pipeline) can trigger many restarts. A cooldown window per resource would help.
- CSI integration gap: CSI volumes are watched at the
SecretProviderClassPodStatuslevel, but the link back to the workload is indirect and may miss edge cases. Needs a direct map from SecretProviderClass → workloads that mount it.
Repo Map
| Path | Owns | Inspect when |
main.go | Entry point, delegates to app.Run() | Never needs changes |
internal/pkg/app/ | Run() bootstrap, Cobra command wiring | Startup sequence changes |
internal/pkg/cmd/ | CLI flags parsing, startReloader(), controller/HA wiring | Adding new flags or startup behavior |
internal/pkg/controller/ | Informer/queue per resource type, event handlers (Add/Update/Delete) | Watching new resource types, queue tuning |
internal/pkg/handler/ | Per-event handlers (create, update, delete), doRollingUpgrade(), pause deployment | Core reload logic changes |
internal/pkg/callbacks/ | Workload-specific get/list/update/patch functions, RollingUpgradeFuncs struct | Adding new workload types |
internal/pkg/options/ | All CLI flag variables, defaults, ArgoRolloutStrategy type | Adding or renaming flags |
internal/pkg/constants/ | Constants: env var postfixes, annotation prefix, strategy names, HA lock name | Renaming global identifiers |
internal/pkg/metrics/ | Prometheus Collectors struct, all metric registration and recording helpers | Adding metrics |
internal/pkg/alerts/ | Slack/Teams/GChat/raw webhook alerting, env var config | Alert sink changes |
internal/pkg/util/ | SHA generation via crypto/sha.go, env var name conversion, namespace/label utilities | Utility/hash changes |
internal/pkg/crypto/ | GenerateSHA(data) — SHA1 hex digest | Hash algorithm changes |
internal/pkg/leadership/ | Leader election via Kubernetes Lease, HA stop/start of controllers | HA behavior changes |
internal/pkg/testutil/ | Fake Kubernetes objects for unit tests | Writing new tests |
pkg/common/ | ReloadCheckResult, ReloaderOptions, ShouldReload() logic, Config struct | Reload decision logic, annotation precedence |
pkg/kube/ | Clients struct (k8s + OpenShift + Argo + CSI), GetKubernetesClient(), ResourceMap | Client initialization, new CRD clients |
deployments/ | Helm chart (deployments/kubernetes/chart/reloader/), Kustomize manifests | Helm values, RBAC, deployment config |
docs/ | User-facing annotation documentation, architecture notes | Writing docs or confirming annotation behavior |
scripts/ | Shell scripts used by CI and Makefile | Build/release pipeline |
test/loadtest/ | Load test CLI (cmd/loadtest), 13 scenarios (S1–S13), Kind cluster setup | Performance testing, regression benchmarks |
.github/ | CI workflows: lint, test, Kind e2e, multi-arch Docker build, release | CI changes |
Core Runtime Flow
1. Entry — main.go:10 calls app.Run().
2. CLI Init — internal/pkg/app/app.go calls cmd.NewReloaderCommand() which registers all Cobra flags from options/flags.go and runs startReloader().
3. Client Setup — pkg/kube/client.go: builds kube.Clients with:
kubernetes.Interface— standard k8s clientappsclient.Interface— OpenShift client (auto-detected by probingdeploymentconfigs)argorollout.Interface— if--is-Argo-Rollouts=truecsiclient.Interface— if--enable-csi-integration
4. Controller Creation — startReloader() iterates kube.ResourceMap (configmaps, secrets, namespaces, and optionally secretproviderclasspodstatuses) and calls controller.NewController() for each resource in each watched namespace.
5. Informer/Queue — controller.NewController():
- Creates a
cache.NewFilteredListWatchFromClientwith label/field selectors. - Registers
Add,Update,Deleteevent handlers. - Creates a
workqueue.TypedRateLimitingQueuefor async processing.
6. Event Detection:
Add— enqueues only ifReloadOnCreateis enabled (skips during initial sync unlessSyncAfterRestart).Update— compares SHA of old vs new object data; enqueues only on real changes.Delete— enqueues only ifReloadOnDeleteis enabled.- Namespace events update
selectedNamespacesCachefor namespace-selector filtering.
7. Handler Dispatch — The queue worker calls handler.Handle() on the dequeued item. Three handler types:
ResourceCreatedHandler(create.go) — firesdoRollingUpgradeor sends webhook.ResourceUpdatedHandler(update.go) — firesdoRollingUpgradeor sends webhook.ResourceDeleteHandler(delete.go) — callsinvokeDeleteStrategy(removes env vars or clears annotation).
8. Workload Discovery — doRollingUpgrade() (upgrade.go:181) calls rollingUpgrade() for each workload type. For each type, ItemsFunc lists all workloads in the namespace, then pkg/common.ShouldReload() checks annotations to decide which ones need reloading.
9. Reload Execution — invokeReloadStrategy() either:
- env-vars: mutates container env vars; uses JSON patch if
SupportsPatch=true, full update otherwise. - annotations: writes SHA to pod template annotations; same patch/update split.
10. Post-reload — optionally pauses the Deployment via pause_deployment.go, records Kubernetes Events via recorder, updates Prometheus metrics, sends alert webhooks.
HA Mode: if --enable-ha, internal/pkg/leadership/ runs Kubernetes Lease-based leader election. Only the leader runs controllers; losing leadership stops them and marks the pod unhealthy.
HTTP Server: port :9090 serves /metrics (Prometheus) and liveness/readiness probes.
Reload Behavior And Annotations
All annotation names are configurable via CLI flags; the values below are defaults.
Trigger Annotations (on workloads)
| Annotation | Value | Behavior |
reloader.stakater.com/auto | "true" | Reload on change to any ConfigMap or Secret referenced by the workload (via envFrom, env valueFrom, or volumes) |
configmap.reloader.stakater.com/auto | "true" | Reload on change to any referenced ConfigMap only |
secret.reloader.stakater.com/auto | "true" | Reload on change to any referenced Secret only |
secretproviderclass.reloader.stakater.com/auto | "true" | Reload on change to any referenced SecretProviderClass only |
configmap.reloader.stakater.com/reload | "cm1,cm2" | Reload only when the named ConfigMaps change (regex supported) |
secret.reloader.stakater.com/reload | "sec1,sec2" | Reload only when the named Secrets change (regex supported) |
secretproviderclass.reloader.stakater.com/reload | "spc1" | Reload only when the named SecretProviderClass changes |
reloader.stakater.com/search | "true" | Reload when any ConfigMap/Secret tagged with reloader.stakater.com/match: "true" changes |
Exclude Annotations (on workloads)
| Annotation | Value | Behavior |
reloader.stakater.com/ignore | "true" | Skip this workload entirely |
configmaps.exclude.reloader.stakater.com/reload | "cm1,cm2" | Exclude these named ConfigMaps from triggering reload |
secrets.exclude.reloader.stakater.com/reload | "sec1,sec2" | Exclude these named Secrets |
secretproviderclasses.exclude.reloader.stakater.com/reload | "spc1" | Exclude these named SecretProviderClasses |
Behavior Annotations (on workloads)
| Annotation | Value | Behavior |
reloader.stakater.com/rollout-strategy | "restart" or "rollout" | For Argo Rollouts: "restart" uses restartAt, "rollout" (default) uses full rollout update |
deployment.reloader.stakater.com/pause-period | Go duration e.g. "30s" | Pause Deployment for this duration after reload |
deployment.reloader.stakater.com/paused-at | RFC3339 timestamp | Set by Reloader to track pause start time; do not set manually |
Search/Match Pattern
The reloader.stakater.com/search annotation on a workload pairs with reloader.stakater.com/match: "true" on a ConfigMap or Secret. Any workload with search: true will reload when any match: true resource changes.
Global Flag Overrides
--auto-reload-all— reload all workloads on any ConfigMap/Secret change; annotation not required.--resources-to-ignore=configMapsor=secrets— skip one type entirely.--ignored-workload-types=jobs,cronjobs— skip Job and CronJob reload.--namespaces-to-ignore— comma-separated namespace names to skip.--namespace-selector— only watch namespaces with matching labels.--resource-label-selector— only watch ConfigMaps/Secrets with matching labels.
Precedence Rules
reloader.stakater.com/ignore: "true"wins everything — workload is skipped.- Exclude annotations override include annotations for specific named resources.
- Named annotations (
.../reload) are checked before auto annotations. --auto-reload-allis the lowest-priority fallback (only applies if no annotation matches).- Annotations are checked on both the workload and its pod template (pod template takes precedence in some paths — verify in
pkg/common/common.go:ShouldReload()).
Workload Support
| Workload | SupportsPatch | Update Mechanism | Key files |
| Deployment | Yes | JSON patch or full update | callbacks/rolling_upgrade.go, handler/upgrade.go:38 |
| StatefulSet | Yes | JSON patch or full update | callbacks/rolling_upgrade.go, handler/upgrade.go:109 |
| DaemonSet | Yes | JSON patch or full update | callbacks/rolling_upgrade.go, handler/upgrade.go:91 |
| CronJob | No | Creates a new Job from CronJob spec (adds cronjob.kubernetes.io/instantiate: manual) | callbacks.CreateJobFromCronjob, handler/upgrade.go:55 |
| Job | No | Deletes old Job, creates new one (strips ResourceVersion, UID, Status, controller labels) | callbacks.ReCreateJobFromjob, handler/upgrade.go:73 |
| Argo Rollout | No | Full update via Argo Rollouts client | callbacks.UpdateRollout, handler/upgrade.go:127; requires --is-Argo-Rollouts=true |
| DeploymentConfig | Yes | OpenShift DeploymentConfigs API | callbacks/rolling_upgrade.go; auto-detected by probing deploymentconfigs |
Reload flow per workload: doRollingUpgrade() → rollingUpgrade() per type → ItemsFunc lists workloads → ShouldReload() filters → invokeReloadStrategy() patches or updates → optional pause + metrics + alert.
CSI Support
Enabled by: --enable-csi-integration
What is watched: SecretProviderClassPodStatus resources (from sigs.k8s.io/secrets-store-csi-driver). Resource name constant: constants.SecretProviderClassController = "secretproviderclasspodstatuses".
How it works:
- The CSI driver injects secrets into pods as volume mounts and tracks injection state via
SecretProviderClassPodStatusobjects. - Reloader watches these objects for version changes.
- When a version change is detected, it computes a SHA of the object's IDs and versions.
- It then looks up the referenced
SecretProviderClassand treats the event like a Secret update, triggering workload reloads.
Workload annotation: secretproviderclass.reloader.stakater.com/reload: "my-spc" or secretproviderclass.reloader.stakater.com/auto: "true".
Required: CSI CRDs must be installed in the cluster. Reloader auto-detects their presence at startup.
Env var postfix: STAKATER_{NAME}_SECRETPROVIDERCLASS.
Known limitations:
- Only works for secrets mounted as volumes via CSI, not env-var-based CSI injection.
- The link from
SecretProviderClassPodStatus→ workload is indirect; edge cases may be missed. - Requires the CSI driver CRDs to be pre-installed; Reloader won't start CSI controller if CRDs are absent.
Build, Test, And Run Commands
Go version: go 1.26.2 (from go.mod)
| Purpose | Command |
| Run locally | go run ./main.go |
| Build binary | make build → go build -o Reloader |
| Unit tests | make test → go test -timeout 1800s -v ./... |
| Lint | make lint → golangci-lint run ./... (v2.6.1) |
| Docker build (single arch) | make build-image ARCH=amd64 |
| Docker push | make push |
| Full release (build+push+manifest) | make release ARCH=amd64 |
| Multi-arch release | make release-all |
| Generate k8s manifests | make k8s-manifests (Kustomize v5.3.0) |
| Load test (quick) | make loadtest-quick LOADTEST_OLD_IMAGE=... LOADTEST_NEW_IMAGE=... (runs S1, S4, S6) |
| Load test (full) | make loadtest-full LOADTEST_OLD_IMAGE=... LOADTEST_NEW_IMAGE=... |
| Load test (custom) | make loadtest LOADTEST_SCENARIOS=S1,S3 LOADTEST_DURATION=120 |
Docker image: ghcr.io/stakater/reloader — multi-arch (amd64, arm64, arm), distroless nonroot base.
Helm chart: deployments/kubernetes/chart/reloader/ — install via Helm or kubectl apply -f deployments/kubernetes/reloader.yaml.
Branch policy: master is in feature freeze, pr-title.yaml only lets fix: and chore: PR titles through. New features go to v2. The master chart stays on 2.x, so its version gate compares against helm search repo stakater/reloader --version '^2', not the newest chart (v2 publishes 3.x to the same repo). Likewise the UBI builder image in pull_request.yaml comes from the highest stable v1.* tag.
Coding Conventions
Package boundaries: Each internal/pkg/<name> package has a single clear responsibility. Cross-package access goes through exported types/functions only.
Error handling: logrus.Errorf(...) for non-fatal, logrus.Fatalf(...) for startup failures. Errors are returned up the call stack and logged at the point of action, not at every layer. Retry uses k8s.io/client-go/util/retry.RetryOnConflict.
Logging: logrus with structured fields. Format controlled by --log-format=json flag. Log level controlled by --log-level. Messages follow the pattern: "Changes detected in '%s' of type '%s' in namespace '%s'".
Kubernetes client patterns: All k8s operations go through the kube.Clients struct. Use context.TODO() for context (no request-scoped contexts). List/watch via informers, not polling.
Callback pattern: Workload-specific logic is encapsulated in callbacks.RollingUpgradeFuncs structs returned by handler.Get*RollingUpgradeFuncs(). Adding a new workload type = add a new RollingUpgradeFuncs factory function and call it in doRollingUpgrade().
Test style: Standard testing.T, testify/assert. Fake k8s objects via testutil/kube.go. Tests live alongside source in the same package. Large integration-style tests in handler/upgrade_test.go.
Naming patterns:
- Annotation variables:
XxxUpdateOnChangeAnnotation,XxxReloaderAutoAnnotation - Callback funcs:
GetXxxItem,GetXxxItems,UpdateXxx,PatchXxx - Handler factories:
GetXxxRollingUpgradeFuncs()
Adding new behavior: Add flag to options/flags.go + common.ReloaderOptions struct → wire in cmd/reloader.go → implement logic in handler/ or callbacks/ → add metrics recording → write tests in *_test.go.
Gotchas And Risks
Duplicate reloads: If a workload references multiple ConfigMaps/Secrets and all change simultaneously, each change event fires a separate reload. No deduplication exists within a reconcile window. This can cause unnecessary rolling restarts.
Controller init guard: secretControllerInitialized and configmapControllerInitialized booleans in controller/controller.go prevent processing Add events during the initial list/sync (to avoid reloading everything on startup). If --sync-after-restart is set, both are pre-set to true, bypassing the guard. Be careful when this interacts with --reload-on-create.
Namespace filtering: --namespaces-to-ignore does a name match; --namespace-selector watches namespaces by label and caches them in selectedNamespacesCache. The cache is updated on Namespace Add/Update/Delete events. A race between cache population and first ConfigMap event could cause missed reloads on startup in label-selected deployments.
RBAC: Reloader requires get/list/watch on secrets and configmaps, and get/list/watch/update/patch on all workload types it manages. Missing RBAC silently causes no reloads (not an error — just empty lists). Check ClusterRole in deployments/kubernetes/chart/reloader/templates/.
GitOps drift: If a GitOps tool (Flux, ArgoCD) manages the same Deployments, annotation or env var changes made by Reloader will be detected as drift and reverted. Use --reload-strategy=annotations with care in GitOps setups; env-vars strategy is generally safer since it modifies the pod template rather than workload-level annotations.
Annotation precedence edge case: Annotations are checked first on the workload object, then on the pod template. If both are set to conflicting values, the behavior depends on which path ShouldReload() hits first. Verify in pkg/common/common.go.
CronJob/Job destructive reload: Job recreation deletes the old Job. Any in-flight pod from that Job will be terminated. This is intentional but surprising. There is no protection for long-running jobs.
OpenShift DeploymentConfig: Auto-detected by probing for the deploymentconfigs resource. If the probe fails at startup, OpenShift support is silently disabled. Check pkg/kube/client.go.
Argo Rollouts: Must be explicitly enabled via --is-Argo-Rollouts=true. Without it, Rollout objects are never listed. The SupportsPatch=false means full object updates are used — be aware of potential conflicts with Argo's own controller.
CSI rotation behavior: SecretProviderClassPodStatus is updated by the CSI driver when secrets rotate. Reloader reacts to those updates. However, if the CSI driver updates the status in a way that doesn't change the versions Reloader tracks, the reload will be missed.
Backward compatibility: Annotation names are configurable, so changing defaults would break existing clusters. Never change default annotation values without a migration path.
Tests to update for risky changes: handler/upgrade_test.go (large suite covering all workload types), controller/controller_test.go (event handling), pkg/common/common_test.go (reload decision logic).
Open Questions
- Exact
ShouldReload()precedence: The code inpkg/common/common.gochecks annotations in a specific order. The exact tie-breaking when both workload-level and pod-template-level annotations are set should be verified by reading that function fully before making annotation behavior changes. - CSI → workload mapping: How exactly does Reloader map a
SecretProviderClassPodStatuschange back to workloads? Is it via the SecretProviderClass name matching an annotation on the workload, or via volume reference scanning? Needs confirmation before adding CSI-related features. ContainerPatchPathFuncfield:RollingUpgradeFuncshas aContainerPatchPathFuncfield, but it is not documented — unclear if/how it differs fromContainersFuncin patch scenarios.- Webhook vs alert:
--webhook-urlreplaces reloading with a POST request.ALERT_WEBHOOK_URLenv var sends an alert after reloading. These are two different mechanisms; the naming is confusing and easy to conflate. - Load test scenarios S7–S13: Only S1, S4, and S6 are confirmed from CI. The behavior and coverage of the remaining scenarios is unknown without reading
test/loadtest/in full. SyncAfterRestartsemantics: Flag docs say it "syncs add events after restart" but only ifReloadOnCreateis also true. The interaction between these two flags in HA mode (where controllers restart on leader change) needs verification.
Important Files
| File | Description |
internal/pkg/cmd/reloader.go | startReloader() — main wiring of clients, controllers, HA, and HTTP server |
internal/pkg/handler/upgrade.go | doRollingUpgrade() + all Get*RollingUpgradeFuncs() factories |
internal/pkg/callbacks/rolling_upgrade.go | All workload-specific get/update/patch implementations |
pkg/common/common.go | ShouldReload() — the annotation decision tree |
internal/pkg/options/flags.go | Every configurable option with defaults |
internal/pkg/controller/controller.go | Informer setup, queue, event handlers |
pkg/kube/client.go | Multi-client initialization and OpenShift/CSI detection |
internal/pkg/handler/pause_deployment.go | Pause/resume deployment logic with timers |
internal/pkg/leadership/leadership.go | HA leader election |
internal/pkg/metrics/prometheus.go | All Prometheus collector definitions |
internal/pkg/alerts/alert.go | Slack/Teams/GChat alerting |
internal/pkg/constants/constants.go | Global constants (env var prefixes, annotation prefix, strategy names) |
deployments/kubernetes/chart/reloader/values.yaml | Helm chart defaults — source of truth for production config |
handler/upgrade_test.go | Largest test suite; must be updated for any reload logic change |
Makefile | All build/test/release/loadtest commands |
Trending
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Who's talking about stakater/Reloader
- cncf/sandbox“[Sandbox] Reloader”GitHub · Apr 25, 2024 · 14 reactions
- tilt-dev/tilt“help iterating on a configmap”GitHub · Oct 30, 2020 · 14 reactions
- kubernetes-sigs/kustomize“Introduce Support for kube-version Parameter for Consuming Helm Charts Relying on Capabilities”GitHub · Mar 27, 2023 · 5 reactions
- @kube.archi“Reloader is a Kubernetes controller that monitors changes in ConfigMap and Secrets and triggers rolling …”Bluesky · Jan 19, 2025 · 4 likes
- @kube.archi“Reloader is a Kubernetes controller that monitors changes in ConfigMap and Secrets and triggers rolling …”Bluesky · Dec 19, 2024 · 4 likes
The biggest 5 of 78 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 78
Talked about on GitHub, Stack Overflow, Bluesky and the web (78 times).
On GitHub · 48
- Apr 25, 2024[Sandbox] Reloader — cncf/sandbox14 reactions · 24 comments
- Oct 30, 2020help iterating on a configmap — tilt-dev/tilt14 reactions · 3 comments
- Mar 27, 2023Introduce Support for kube-version Parameter for Consuming Helm Charts Relying on Capabilities — kubernetes-sigs/kustomize5 reactions · 4 comments
- Sep 5, 2025Publish as OCI chart — stakater/application3 reactions · 3 comments
- Mar 24, 2025Publish helm chart as OCI artifacts — keel-hq/keel3 reactions · 1 comment
43 more on GitHub
- Dec 10, 2024vmalert: reload TLS certificate for remoteWrite — VictoriaMetrics/VictoriaMetrics3 reactions · 4 comments
- Jun 10, 2024Support for automatic redeployment on fly.io after secret change — Infisical/infisical3 reactions
- May 29, 2026feat / helm chart: allow passing deployment annotations — pganalyze/collector2 reactions
- May 25, 2026Rewrite ghcr sources to display github.com changelogs — home-operations/renovate-presets2 reactions · 2 comments
- Mar 31, 2025Publish charts as OCI artifacts — CrowdStrike/falcon-helm2 reactions
- Jul 24, 2024[bitnami/haproxy] Support deployment annotations — bitnami/charts2 reactions · 1 comment
- Jun 7, 2022From #4256 #3816 this introduces support for kube-version parameter — kubernetes-sigs/kustomize2 reactions · 14 comments
- Oct 27, 2026chore(deps): update all container image updates — Shivppatel/k8s1 reaction · 1 comment
- Sep 22, 2026chore(deps): update all container image updates — Shivppatel/k8s1 reaction · 2 comments
- Nov 5, 2025feat: add reloader — chrisleekr/homelab-infrastructure1 reaction
- Jan 30, 2023Supporting custom labels/annotations on deployment/pod — dexidp/helm-charts1 reaction · 8 comments
- Oct 29, 2026chore(deps): update dependency stakater/reloader to v1.4.23 — MausoleumManagement/private-cloud0 reactions
- Oct 28, 2026fix(helm): update chart ghcr.io/stakater/charts/reloader (2.2.18 ➔ 2.2.19) — fiqrimasngot/kube0 reactions
- Oct 27, 2026chore(deps): update ghcr.io/stakater/reloader docker tag to v1.4.23 — holybaechu/homelab0 reactions
- Sep 20, 2026chore(deps): update dependency stakater/reloader to v1.4.23 — uhthomas/automata0 reactions · 3 comments
- Aug 7, 2026fix(container): update reloader to v1.4.23 — josbritton/cd0 reactions
- Feb 12, 2026Add ability to configure annotations on deployments — RocketChat/helm-charts0 reactions · 1 comment
- Dec 20, 2025fix(container): update image ghcr.io/stakater/charts/reloader ( 2.2.6 ➔ 2.2.18 ) — igas/home-ops20 reactions · 2 comments
- Jun 23, 2025Update ghcr.io/stakater/reloader Docker tag to v1.4.4 — dcoppa/test_renovate0 reactions
- Mar 9, 2025feat(helm)!: Update chart reloader to 2.1.3 — frank-alvarado/home-ops0 reactions · 2 comments
- Mar 8, 2025feat(container)!: Update image reloader to v2 — mbastakis/home-ops0 reactions · 2 comments
- Mar 6, 2025chore(deps): update helm release reloader to v2 for prod env — ixxeL-DevOps/GitOps-home0 reactions · 1 comment
- Mar 5, 2025feat(helm)!: Update chart reloader to 2.0.0 — apheon-terra/01_k3s_ops0 reactions · 20 comments
- Mar 5, 2025feat(helm)!: Update chart reloader to 2.2.19 — toboshii/home-ops0 reactions · 2 comments
- Mar 5, 2025feat(helm)!: Update Helm release reloader to v2 — kitos9112/k8s-home0 reactions · 1 comment
- Mar 5, 2025Update Helm chart reloader to v2 [ci-skip] (release/2.0.0) — MxNxPx/flux2-gitops-repo0 reactions
- Feb 18, 2025chore(deps): update helm release reloader to v1.3.0 for prod env — ixxeL-DevOps/GitOps-home0 reactions · 1 comment
- Feb 17, 2025feat(helm): update helm release reloader to v1.3.0 — kitos9112/k8s-home0 reactions · 1 comment
- Jan 19, 2025feat(container): update image reloader to v1.3.0 — mbastakis/home-ops0 reactions · 2 comments
- Jan 18, 2025fix(helm): update chart reloader to 1.2.1 — dstewen/cm4-cluster0 reactions · 2 comments
- Jan 18, 2025fix(helm): update chart reloader to 1.2.1 — curiousCephalopod/flux-cluster0 reactions · 1 comment
- Aug 31, 2024feat(helm): update chart reloader to 1.1.0 — RonaldPhilipsen/home-ops-k8s0 reactions · 2 comments
- Aug 30, 2024chore(deps): update ghcr.io/stakater/reloader docker tag to v1.4.22 — mmehta-10/renovate-config0 reactions
- Aug 28, 2024feat(charts): update ghcr.io/stakater/reloader docker tag to v1.4.23 — mmehta-10/kubernetes-ops0 reactions
- Aug 10, 2024feat(helm): update chart reloader to 1.1.0 — jeircul/home-ops0 reactions · 2 comments
- Jun 29, 2024feat(container): update image reloader to v1.2.0 — will-white/home-k8s-cluster-old0 reactions · 2 comments
- Jun 29, 2024feat(helm): update chart reloader to 1.1.0 — brettinternet/cluster0 reactions · 2 comments
- Jun 8, 2024feat(helm): update chart reloader to 1.3.0 — frank-alvarado/home-ops0 reactions · 2 comments
- May 30, 2024feat(helm): update chart reloader to 1.2.1 — dmfrey/home-gitops-rpi0 reactions · 2 comments
- May 11, 2024feat(helm): update chart reloader to 1.1.0 — odininon/new-cluster0 reactions · 2 comments
- Apr 20, 2024feat(helm): update chart reloader to 1.1.0 — 00o-sh/dev-home-k3s0 reactions · 2 comments
- Feb 22, 2024chore(deps): update helm release reloader to v1.2.1 — GwynHannay/homesys0 reactions
- Feb 3, 2024feat(helm): update chart reloader to 1.3.0 — scheuk/home-cluster-archive0 reactions
On Stack Overflow · 20
- Dec 26, 2021Kubernetes: Restart pods when config map values change4 votes
- Sep 13, 2020How to restart Kubernetes pod when a secret is updated in Hashicorp Vault?4 votes
- Aug 3, 2019How to update the ConfigMap for the workloads running on GKE cluster using Helm?4 votes
- Apr 28, 2020Automatically deploy when configMap changes3 votes
- Sep 18, 2019configmap change doesn't reflect automatically on respective pods3 votes
15 more on Stack Overflow
- Apr 5, 2022Reload pod when secret changes2 votes
- Sep 16, 2021kubernetes config deployment removing existing files2 votes
- Apr 11, 2024Restart Pods when config map values are updated. I am using Azure App Configuration Provider1 vote · 1 answer
- Feb 28, 2023Update config map object from service app1 vote
- May 5, 2022Nginx Ingress controller performance issue1 vote
- Mar 7, 2022Spring boot pick up dynamic application.properties from kubernetes configmap1 vote
- Aug 22, 2021Prometheus file based service discovery1 vote
- Feb 26, 2021Helm upgrade that does a rolling Pod restart if chart values change1 vote
- Apr 2, 2019Hot pod reconfiguration on Kubernetes1 vote · 1 answer
- Mar 14, 2025Trigger a Job if Secret/ConfigMap value changes0 votes
- Apr 17, 2024Is it possible to automatically kill a k8s pod controlled by a job when the given config map changes?0 votes
- Aug 31, 2023Is it possible to configMap checksum in a normal deployment file(Non HELM)?0 votes
- Aug 25, 2022trigger pod restart on configmap change0 votes
- Dec 26, 2021Do SpringBoot Configuration Trees support refresh0 votes
- Dec 10, 2021How to set null value using config map in spring boot applicaton0 votes
On Bluesky · 6
- Jan 19, 2025Reloader is a Kubernetes controller that monitors changes in ConfigMap and Secrets and triggers rolling upgrades on Pods with their… — @kube.archi4 likes and reposts
- Dec 19, 2024Reloader is a Kubernetes controller that monitors changes in ConfigMap and Secrets and triggers rolling upgrades on Pods with their… — @kube.archi4 likes and reposts
- Jun 21, 2026Reloader (⭐️ 10153) A Kubernetes controller to watch changes in ConfigMap and Secrets and do rolling upgrades on Pods with their associated… — @golangoss.bsky.social2 likes and reposts
- Sep 29, 2025github.com/stakater/Rel... That's how we do it. Yeah, would be nice to see a feature for our in the core — @fake51.bsky.social2 likes and reposts
- Sep 29, 2025Although my go-to in my personal setup is usually github.com/stakater/Rel... — @averagemarcus.bsky.social2 likes and reposts
1 more on Bluesky
- Sep 16, 2026What we changed: directory mount + a reload watching the directory. Helm checksum/config where there's no reload. Reloader for third-party… — @persikbl.bsky.social0 likes and reposts · 1 reply
On the web · 4
- Apr 8, 2026Stakater Reloader: Accumulated STAKATER_ ... — google.com
- Jul 18, 2025[BUG] No debug messages are logged · Issue #973 — google.com
- Oct 23, 2024[ENHANCE] Remove / allow removing timestamp from pod ... — google.com
- Sep 22, 2020Issue #166 · stakater/Reloader — google.com
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

