FluxCD — Intermediate
Notifications — Alert and Provider CRDs
Reconciliation failures are only useful if someone actually sees them — Flux's Provider and Alert CRDs wire reconciliation events (success, failure, specific event types) to external systems, the same role notification-controller plays in the overall architecture, configured declaratively rather than through a UI:
Scoping eventSources to a specific namespace and eventSeverity: error (rather than every reconciliation event, success included) is what keeps this useful rather than noisy — alerting on every successful sync in a cluster reconciling every few minutes produces channel noise nobody reads, which defeats the purpose.
Post-Build Variable Substitution
Hardcoding environment-specific values (a replica count, an image tag, a domain name) directly into manifests defeats the point of using the same base manifests across dev/staging/production. Flux's postBuild.substitute (or substituteFrom for larger variable sets) injects values into a Kustomization's output after Kustomize itself has run:
This keeps the base manifests genuinely identical across environments — only the Kustomization resource (and the ConfigMap it references) differs per environment, which is a meaningfully cleaner separation than maintaining parallel manifest trees per environment.
Image Automation — the Full Pipeline
Overview covered the concept; the full mechanism chains three CRDs together: ImageRepository watches a container registry for new tags, ImagePolicy selects which tag actually qualifies (by semver range, regex, or alphabetical ordering), and ImageUpdateAutomation commits the selected tag back to Git — closing the loop so a new image build results in an automatic, auditable Git commit rather than a manual YAML edit:
The semver range constraint on ImagePolicy is what prevents a runaway auto-deploy — without it, image automation would happily deploy any new tag pushed to the registry, including an accidental major-version bump that was never meant to reach production automatically.
`dependsOn` — Ordering Kustomizations
A Kustomization deploying an application that needs a CRD or namespace from another Kustomization to exist first needs explicit ordering — Flux doesn't infer dependencies from manifest content:
Without dependsOn, both Kustomizations reconcile independently and roughly in parallel — fine when there's no real ordering requirement, but a silent source of intermittent failures when one genuinely depends on resources the other creates.

