如何在 kubernetes 部署中使用本地 docker 镜像(不是 minikube)

Oli*_*ier 4 cloud containers orchestration kubernetes

我有一个使用 kubeadm (不是 minikube)安装了 kubernetes 的虚拟机。VM 充当集群的单个节点,删除了污点以允许它充当主节点和工作节点(如 kubernetes 文档中所示)。我已经保存、传输并加载了我的应用程序:测试图像。我可以使用 docker run 轻松运行容器。当我运行sudo docker images时它会出现。

当我创建使用此映像的部署/pod 并指定Image-PullPolicy: IfNotPresentNever时,我仍然遇到ImagePullBackoff错误。描述命令显示它尝试从 dockerhub 中提取图像...

请注意,当我尝试使用因创建另一个 pod 而拉取的本地映像时,ImagePullPolicies 似乎可以工作,没有问题。尽管当我运行 sudo docker images --all 时图像没有出现

如何在 kubernetes 中使用 pod 的本地镜像?有没有办法在不使用私有存储库的情况下做到这一点?

Oli*_*ier 6

如果使用containerd,可以结合使用crictl 和ctr 来实现此目的。

TLDR: 这些步骤,crictl github 文档中也有描述:

1- 在节点(在我的例子中是虚拟机)上获取映像后,请确保它位于存档 (.tar) 中。您可以使用docker savectr image export命令来完成此操作。

2- 在与存档镜像相同的目录中使用sudo ctr -n=k8s.io images import myimage.tarwhile 将其添加到 kubernetes 用于跟踪其镜像的命名空间中的 containerd 中。它现在应该在您运行时出现sudo crictl images


按照建议,我尝试用 crictl 列出图像,但我的 app:test 没有出现。然而,尝试通过 crictl 导入我的本地图像似乎也不起作用。我使用crictl pull app:test并显示以下错误消息:

FATA[0000] 拉取映像失败:rpc 错误:代码 = 未知 desc = 无法拉取和解压映像“docker.io/library/app:test”:无法解析引用“docker.io/library/app:test”:拉取访问被拒绝,存储库不存在或可能需要授权:服务器消息:不够的范围:授权失败。

然而,按照这些步骤,我的镜像最终被识别为 kubernetes 中现有的本地镜像。它们实际上与 crictl github 文档中建议的相同

人们如何解释这一点?镜像如何“注册”到kubernetes集群中?为什么 crictl 无法导入图像?我可能会发布另一个问题来询问......

  • 由于外部链接往往会消失,因此最好总结一下这个答案中的“这些步骤”到底是什么。 (2认同)