Skip to content
Latchkey

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.

kubectl describe pod
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 error

Common 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.

Terminal
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.

pod spec
spec:
  nodeSelector:
    kubernetes.io/arch: amd64

How to prevent it

  • Publish multi-arch manifest lists when the cluster has mixed architectures.
  • Verify docker manifest inspect lists every needed platform.
  • Use a nodeSelector for any genuinely single-arch workload.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →