我使用 Containerd 作为容器运行时。当我创建一个 pod 时,包含拉两个图像。
(ctr -n k8s.io i ls -q
的结果)
myprivateregistery/gcr.io/google_containers/kubernetes-dashboard-amd64:v1.7.1 application/vnd.docker.distribution.manifest.v2+json sha256:2cc826b775aacfb15a89a1f2d6685799f360ddb65f101b656097784cef2bb9d7 39.8 MiB linux/amd64 io.cri-containerd.image=managed
myprivateregistery/gcr.io/google_containers/kubernetes-dashboard-amd64@sha256:2cc826b775aacfb15a89a1f2d6685799f360ddb65f101b656097784cef2bb9d7 application/vnd.docker.distribution.manifest.v2+json sha256:2cc826b775aacfb15a89a1f2d6685799f360ddb65f101b656097784cef2bb9d7 39.8 MiB linux/amd64 io.cri-containerd.image=managed
稍后创建了另一个图像,ctr -n k8s.io i ls -q
的结果变为。
myprivateregistery/gcr.io/google_containers/kubernetes-dashboard-amd64:v1.7.1 application/vnd.docker.distribution.manifest.v2+json sha256:2cc826b775aacfb15a89a1f2d6685799f360ddb65f101b656097784cef2bb9d7 39.8 MiB linux/amd64 io.cri-containerd.image=managed
myprivateregistery/gcr.io/google_containers/kubernetes-dashboard-amd64@sha256:2cc826b775aacfb15a89a1f2d6685799f360ddb65f101b656097784cef2bb9d7 application/vnd.docker.distribution.manifest.v2+json sha256:2cc826b775aacfb15a89a1f2d6685799f360ddb65f101b656097784cef2bb9d7 39.8 MiB linux/amd64 io.cri-containerd.image=managed
sha256:294879c6444ed35b8cb94c613e61c47b9938305a1d1eaf452c0d17db471d99e5 application/vnd.docker.distribution.manifest.v2+json sha256:2cc826b775aacfb15a89a1f2d6685799f360ddb65f101b656097784cef2bb9d7 39.8 MiB linux/amd64 io.cri-containerd.image=managed
Containerd 收到的事件:
2021-06-03 10:41:41.942185302 +0000 UTC k8s.io /images/create {"name":"myprivateregistry/gcr.io/google_containers/kubernetes-dashboard-amd64:v1.7.1"}
2021-06-03 10:41:41.944191919 +0000 UTC k8s.io /images/create {"name":"sha256:294879c6444ed35b8cb94c613e61c47b9938305a1d1eaf452c0d17db471d99e5","labels":{"io.cri-containerd.image":"managed"}}
问题是为什么 Containerd 会拉取多个相同的镜像。我希望看到一个图像,图像列表命令的输出显示拉取了 3 个图像。此外,如果我创建了很多 pod,它会因此导致磁盘压力。
答案 0 :(得分:1)
它不会拉两个图像,它只会拉一个图像。标签实际上是对它首先需要解析的特定散列的引用。所以第一个请求只是将标签解析为哈希,第二个是实际下载。
间接证据是两者之间的时间很短,你可以看到只用了 0.002 秒就得到了对第一个请求的回复,然后才开始下载。