- 
                Notifications
    You must be signed in to change notification settings 
- Fork 5.1k
Open
Labels
kind/bugCategorizes issue or PR as related to a bug.Categorizes issue or PR as related to a bug.
Description
What Happened?
Saving preloaded images (e.g. registry.k8s.io/pause:3.10) with containerd runtime is broken, creating empty tar. Saving images pulled into minikube works.
I suspect that the preloaded images were not prepared with contained, and their internal structure is not the same as the image pulled into the cluster by containerd.
How to reproduce:
macOS/vkfit
% minikube start --driver vfkit --container-runtime containerd
😄  minikube v1.36.0 on Darwin 15.6.1 (arm64)
✨  Using the vfkit driver based on user configuration
👍  Starting "minikube" primary control-plane node in "minikube" cluster
💾  Downloading Kubernetes v1.33.2 preload ...
    > preloaded-images-k8s-v18-v1...:  376.62 MiB / 376.62 MiB  100.00% 18.46 M
🔥  Creating vfkit VM (CPUs=2, Memory=6144MB, Disk=20000MB) ...
📦  Preparing Kubernetes v1.33.2 on containerd 1.7.23 ...
🔗  Configuring bridge CNI (Container Networking Interface) ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: default-storageclass, storage-provisioner
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
% minikube image ls
registry.k8s.io/pause:3.10
registry.k8s.io/kube-scheduler:v1.33.2
registry.k8s.io/kube-proxy:v1.33.2
registry.k8s.io/kube-controller-manager:v1.33.2
registry.k8s.io/kube-apiserver:v1.33.2
registry.k8s.io/etcd:3.5.21-0
registry.k8s.io/coredns/coredns:v1.12.0
gcr.io/k8s-minikube/storage-provisioner:v5
docker.io/kindest/kindnetd:v20250512-df8de77b
% minikube image save registry.k8s.io/pause:3.10 test.tar; echo $?
0
% file test.tar 
test.tar: emptyLinux/kvm
$ minikube start --driver kvm --network default --container-runtime containerd
😄  minikube v1.36.0 on Fedora 42 (kvm/amd64)
✨  Using the kvm2 driver based on user configuration
👍  Starting "minikube" primary control-plane node in "minikube" cluster
💾  Downloading Kubernetes v1.33.2 preload ...
    > preloaded-images-k8s-v18-v1...:  401.08 MiB / 401.08 MiB  100.00% 15.15 M
🔥  Creating kvm2 VM (CPUs=2, Memory=6144MB, Disk=20000MB) ...
📦  Preparing Kubernetes v1.33.2 on containerd 1.7.23 ...
🔗  Configuring bridge CNI (Container Networking Interface) ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
$ minikube image ls
registry.k8s.io/pause:3.10
registry.k8s.io/kube-scheduler:v1.33.2
registry.k8s.io/kube-proxy:v1.33.2
registry.k8s.io/kube-controller-manager:v1.33.2
registry.k8s.io/kube-apiserver:v1.33.2
registry.k8s.io/etcd:3.5.21-0
registry.k8s.io/coredns/coredns:v1.12.0
gcr.io/k8s-minikube/storage-provisioner:v5
docker.io/kindest/kindnetd:v20250512-df8de77b
$ minikube image save registry.k8s.io/pause:3.10 test.tar; echo $?
0
$ file test.tar 
test.tar: empty
$ minikube image save registry.k8s.io/pause:3.10 - >test.tar
$ file test.tar 
test.tar: emptyAttach the log file
Debugging
The issue is related to the images that come from minikube preloads. If we pull new images into minikube we can save correctly.
containerd 2.1.4
Using #21409
Testing inside the guest
Saving registry.k8s.io/pause:3.10 fails:
$ sudo ctr -n k8s.io image export - registry.k8s.io/pause:3.10 >test.tar
ctr: failed to get reader: content digest sha256:75e060e453aa927883755f715daa02fb335ea7f148a8ab249f779be796d4bb7e: not found
Pulling echo server:
```console
$ sudo ctr -n k8s.io image pull docker.io/kicbase/echo-server:1.0
docker.io/kicbase/echo server:1.0       	saved	
└──index (127ac38a2bb9)                 	already exists	
   ├──manifest (42a89d9b22e5)           	already exists	
   │  └──config (ce2d2cda2d85)          	already exists	
   └──manifest (a82eba7887a4)           	complete   	|++++++++++++++++++++++++++++++++++++++|	
      └──config (9056ab77afb8)          	complete   	|++++++++++++++++++++++++++++++++++++++|	
application/vnd.docker.distribution.manifest.list.v2+json sha256:127ac38a2bb9537b7f252addff209ea6801edcac8a92c8b1104dacd66a583ed6
Completed pull from OCI Registry (docker.io/kicbase/echo-server:1.0)	elapsed: 2.9 s	total:  4.1 Ki	(1.4 KiB/s)Saving echo server
$ sudo ctr -n k8s.io image export echo-server-1.0.tar docker.io/kicbase/echo-server:1.0
$ tar tf echo-server-1.0.tar 
blobs/
blobs/sha256/
blobs/sha256/127ac38a2bb9537b7f252addff209ea6801edcac8a92c8b1104dacd66a583ed6
blobs/sha256/42a89d9b22e5307cb88494990d5d929c401339f508c0a7e98a4d8ac52623fc5b
blobs/sha256/ac2c07efdce850736ed8e7b9c3bc15e251d808fc43b9eeeb88797be0def23730
blobs/sha256/ce2d2cda2d858fdaea84129deb86d18e5dbf1c548f230b79fdca74cc91729d17
index.json
manifest.json
oci-layoutSaving from host
% minikube image ls | grep docker.io/kicbase/echo-server:1.0
docker.io/kicbase/echo-server:1.0
% minikube image save docker.io/kicbase/echo-server:1.0 echo-server-1.0.tar
% tar tf echo-server-1.0.tar 
blobs/
blobs/sha256/
blobs/sha256/127ac38a2bb9537b7f252addff209ea6801edcac8a92c8b1104dacd66a583ed6
blobs/sha256/42a89d9b22e5307cb88494990d5d929c401339f508c0a7e98a4d8ac52623fc5b
blobs/sha256/ac2c07efdce850736ed8e7b9c3bc15e251d808fc43b9eeeb88797be0def23730
blobs/sha256/ce2d2cda2d858fdaea84129deb86d18e5dbf1c548f230b79fdca74cc91729d17
index.json
manifest.json
oci-layoutcontainerd 1.17.23
Using #21405
Saving inside the guest
Saving pause image fails
$ sudo ctr -n k8s.io image export pause.tar registry.k8s.io/pause:3.10
ctr: failed to get reader: content digest sha256:75e060e453aa927883755f715daa02fb335ea7f148a8ab249f779be796d4bb7e: not foundPulling echo server:
$ sudo ctr -n k8s.io image pull docker.io/kicbase/echo-server:1.0
docker.io/kicbase/echo-server:1.0:                                                resolved       |++++++++++++++++++++++++++++++++++++++| 
index-sha256:127ac38a2bb9537b7f252addff209ea6801edcac8a92c8b1104dacd66a583ed6:    done           |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:42a89d9b22e5307cb88494990d5d929c401339f508c0a7e98a4d8ac52623fc5b: done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:ce2d2cda2d858fdaea84129deb86d18e5dbf1c548f230b79fdca74cc91729d17:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:ac2c07efdce850736ed8e7b9c3bc15e251d808fc43b9eeeb88797be0def23730:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 3.4 s                                                                    total:  2.4 Ki (725.0 B/s)                                       
unpacking linux/arm64/v8 sha256:127ac38a2bb9537b7f252addff209ea6801edcac8a92c8b1104dacd66a583ed6...
done: 33.646725ms	Saving echo server:
$ sudo ctr -n k8s.io image export echo-server-1.0.tar docker.io/kicbase/echo-server:1.0
$ tar tf echo-server-1.0.tar 
blobs/
blobs/sha256/
blobs/sha256/127ac38a2bb9537b7f252addff209ea6801edcac8a92c8b1104dacd66a583ed6
blobs/sha256/42a89d9b22e5307cb88494990d5d929c401339f508c0a7e98a4d8ac52623fc5b
blobs/sha256/ac2c07efdce850736ed8e7b9c3bc15e251d808fc43b9eeeb88797be0def23730
blobs/sha256/ce2d2cda2d858fdaea84129deb86d18e5dbf1c548f230b79fdca74cc91729d17
index.json
manifest.json
oci-layoutSaving in the host
% minikube image ls | grep docker.io/kicbase/echo-server:1.0               
docker.io/kicbase/echo-server:1.0
% minikube image save docker.io/kicbase/echo-server:1.0 echo-server-1.0.tar
% tar tf echo-server-1.0.tar
blobs/
blobs/sha256/
blobs/sha256/127ac38a2bb9537b7f252addff209ea6801edcac8a92c8b1104dacd66a583ed6
blobs/sha256/42a89d9b22e5307cb88494990d5d929c401339f508c0a7e98a4d8ac52623fc5b
blobs/sha256/ac2c07efdce850736ed8e7b9c3bc15e251d808fc43b9eeeb88797be0def23730
blobs/sha256/ce2d2cda2d858fdaea84129deb86d18e5dbf1c548f230b79fdca74cc91729d17
index.json
manifest.json
oci-layoutMetadata
Metadata
Assignees
Labels
kind/bugCategorizes issue or PR as related to a bug.Categorizes issue or PR as related to a bug.