I have an Apple Macbook Pro with an M1 chip, where I have a local kubernetes cluster running through Kind
. The thing is I don't understand how Kind
deals with docker images from different platforms/architectures. The thing is I have an application installed via Helm
that points to some docker images with linux/amd64
architecture, and when I install it through helm
(helm install -n [namespace] [repo] [app]
), it works like a charm (I can actually look at the downloaded images and see that their architecture is amd64
). However, when I download the same image to my local docker registry with docker pull [my-image]
, and then try to load it to the kind
cluster with kind load docker-image [my-image] [my-cluster]
, it doesn't work and I get the following error:
Image: "[my-image]" with ID "sha256:d3a8..." not yet present on node "[my-cluster]-control-plane", loading...
ERROR: failed to load image: command "docker exec --privileged -i [my-cluster]-control-plane ctr --namespace=k8s.io images import --digests --snapshotter=overlayfs -" failed with error: exit status 1
Command Output: ctr: image might be filtered out
And after googling the error a little bit, I could see that it is due to the mismatch of architectures between the image and the kind
cluster.
Could someone explain to me the reason for these different behaviors?
After asking in the Kind Slack channel in the Kubernetes workspace I could finally find the answer to my question: whole thread here.
TL,DR; Kind
was unable to load the images with architectures that don't match the host architecture because it lacked a required --all-platforms
argument in the call to the ctr
tool used by kind load docker-image
to load the docker images into the cluster. A PR to fix the issue was filed and it will be fixed in future releases of Kind
.