Skip to content
Latchkey

Flux Kustomization "Health check failed" / "not ready" in CI

kustomize-controller applied the Kustomization, then waited for the resources in spec.healthChecks (or all workloads with wait: true) to become ready. One never did before the timeout, so the reconciliation is marked failed.

What this error means

A Kustomization reports "False" with "Health check failed after 5m0s" and lists a Deployment or other resource as "not ready", even though the apply itself succeeded.

kustomize-controller
Health check failed after 5m0s: timeout waiting for: [Deployment/apps/web status: 'InProgress']

Common causes

The workload never reaches ready

The Deployment is crash-looping, has an unschedulable pod, or a failing image pull, so it never reports ready and the health check times out.

The timeout is shorter than the rollout

A slow rollout (large image pull, long startup probe) takes longer than spec.timeout, so the health check fails even though the app eventually comes up.

How to fix it

Inspect why the checked resource is not ready

  1. Describe the resource named in the health-check failure.
  2. Fix the underlying pod issue (image, probe, resources) so it becomes ready.
  3. Reconcile the Kustomization and confirm the health check passes.
Terminal
kubectl -n apps describe deployment web
kubectl -n apps get pods
flux reconcile kustomization apps

Raise the timeout for slow rollouts

If the app is healthy but slow to start, increase spec.timeout so the health check waits long enough.

kustomization.yaml
spec:
  wait: true
  timeout: 10m

How to prevent it

  • List only meaningful resources in healthChecks so a transient pod does not block the whole Kustomization.
  • Set timeout to cover realistic rollout times.
  • Fix crash-looping workloads at the source; health checks surface, not cause, the problem.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →