Kubernetes "no match for platform" - Fix Arch Mismatch in CI
The image has no variant for the node’s CPU architecture. A single-arch image (amd64) scheduled onto arm64 nodes either fails to pull with "no match for platform" or starts and crashes with exec format error.
What this error means
Pods fail with no match for platform in manifest during pull, or the container crashes immediately with exec /app: exec format error. It is consistent on the mismatched node architecture.
Failed to pull image "myrepo/api:1.0": no match for platform in manifest:
not found
# or, if it pulls but cannot run:
exec /usr/local/bin/app: exec format errorCommon causes
Single-arch image on a different-arch node
An image built only for amd64 has no arm64 variant, so it cannot be selected (or runs and immediately fails) on arm64 nodes like Graviton.
No multi-arch manifest list
The image was pushed as a single platform rather than a manifest list covering the architectures in the cluster.
How to fix it
Build and push a multi-arch image
Use buildx to produce a manifest list covering every node architecture.
docker buildx build --platform linux/amd64,linux/arm64 \
-t myrepo/api:1.0 --push .Or pin pods to a matching node arch
If the image is single-arch, schedule it only onto matching nodes with a nodeSelector.
spec:
nodeSelector:
kubernetes.io/arch: amd64How to prevent it
- Publish multi-arch manifest lists when the cluster has mixed architectures.
- Verify
docker manifest inspectlists every needed platform. - Use a nodeSelector for any genuinely single-arch workload.