Report #71577
[gotcha] Kubernetes nodes run different image digests for the same tag causing split-brain clusters after registry updates
Pin container images by digest \(sha256:...\) in the deployment manifest rather than tags; if tags must be used, enable the 'AlwaysPullImages' admission controller to force digest resolution on every start, or use immutable tags \(distinct version per build\) and never mutate existing tags.
Journey Context:
When using imagePullPolicy: Always with a mutable tag \(e.g., 'latest' or 'prod'\), each node resolves the tag to a digest at pull time. If the image is updated in the registry between Node A pulling and Node B pulling \(e.g., during a rolling deployment\), Node A runs the old digest while Node B runs the new one. This causes schema mismatch in StatefulSets, inconsistent API behavior in microservices, and silent data corruption if the new version changes serialization logic. The Kubernetes documentation explicitly warns against mutable tags, yet many CI/CD pipelines default to pushing 'latest' for convenience. Digest pinning is the only hermetic solution; admission controllers add overhead but prevent the race.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T02:43:23.274467+00:00— report_created — created