我目前正在设置一个带有windows节点的Kubernetes集群。我意外地在默认名称空间中创建了一个本地图像。
如ctr image ls所示,我的图像位于默认命名空间中。
REF TYPE DIGEST SIZE PLATFORMS LABELS
docker.io/library/myimage:latest application/vnd.docker.distribution.manifest.v2+json sha256:XXX 6.3 GiB windows/amd64 -因此,Kubernetes 在创建pod (ErrImageNeverPull,imagePullPolicy设置为Never)时无法找到图像。原因是,图像不在正确的名称空间k8s.io中
命令ctr --namespace k8s.io image ls显示基本的Kubernetes图像:
REF TYPE DIGEST SIZE PLATFORMS LABELS
mcr.microsoft.com/oss/kubernetes/pause:3.6 application/vnd.docker.distribution.manifest.list.v2+json sha256:XXX 3.9 KiB linux/amd64,linux/arm64,windows/amd64 io.cri-containerd.image=managed
mcr.microsoft.com/oss/kubernetes/pause@sha256:DIGEST application/vnd.docker.distribution.manifest.list.v2+json sha256:XXX 3.9 KiB linux/amd64,linux/arm64,windows/amd64 io.cri-containerd.image=managed
...我尝试过的最直接的方法是导出图像,删除图像,并使用不同的命名空间导入图像。(正如在在cri-tools项目中的Github注释上提到的)
ctr --namespace k8s.io image import --base-name foo/myimage container_import.tar它起作用了。但是我想知道,是否有比重新导入图像更短(更省时)的方法。(可能通过运行一个简单的命令或更改一个文本文件。)
编辑:来澄清我的问题:我有一个节点,其容器存储在名称空间"default“中。我希望同一个容器存储在同一个节点上的名称空间"k8s.io“中。我还能做什么,而不是运行以下两个(缓慢)命令?
ctr -n default image export my-image.tar my-image
ctr -n k8s.io image import my-image.tar我认为命名空间重命名的方法更快,因为它只是编辑一些元数据。
发布于 2022-11-28 12:38:06
正如@P所建议的那样,podman save和podman load命令允许您在多个服务器和系统之间共享图像,而这些映像在本地或远程都不可用。
您可以使用波德曼来管理图像和容器。
podman命令将图像保存到存档中,使其可以加载到另一台服务器上。
例如,要在名为servera的主机上保存一组图像:
[servera]$ podman save --output images.tar \
docker.io/library/redis \
docker.io/library/mysql \
registry.access.redhat.com/ubi8/ubi \
registry.access.redhat.com/ubi8/ubi:8.5-226.1645809065 \
quay.io/centos7/mysql-80-centos7 docker.io/library/nginx完成后,您可以将文件images.tar用于ser谓词,并使用podman加载它:
[serverb]$ podman load --input images.tar新发布的波德曼4.0包含新的podman image scp命令,这是一个有用的命令,可以帮助您管理和传输容器映像。
使用podman的podman图像scp,您可以在本地和远程机器之间传输图像,而无需图像注册。
Podman利用它的SSH支持在机器之间复制图像,它还允许本地传输。在几个关键场景中,无寄存器图像传输非常有用:
在一个通过网络共享图像的系统上在用户之间进行本地传输
https://stackoverflow.com/questions/74595501
复制相似问题