我在Gitlab上设置了一个自定义docker映像注册表,AKS由于某种原因无法从那里提取映像。
抛出的错误是:
Failed to pull image "{registry}/{image}:latest": rpc error: code = FailedPrecondition desc =
failed to pull and unpack image "{registry}/{image}:latest": failed commit on ref "layer-sha256:e1acddbe380c63f0de4b77d3f287b7c81cd9d89563a230692378126b46ea6546": "layer-sha256:e1acddbe380c63f0de4b77d3f287b7c81cd9d89563a230692378126b46ea6546" failed size validation: 0 != 27145985: failed precondition
有趣的是,该图像没有id为
的图层sha256:e1acddbe380c63f0de4b77d3f287b7c81cd9d89563a230692378126b46ea6546
也许有些东西在AKS侧缓存?在重新部署之前,我删除了部署和pod。
我找不到关于这类错误的太多信息,我不知道是什么原因导致的。从本地docker环境中提取相同的映像可以完美地工作。
任何提示将不胜感激!
•您可以尝试扩展注册表以在所有节点上运行。Kubernetes控制器尝试变得智能,并在内部路由节点请求,而不是将流量发送到负载均衡器IP。但问题是,如果该节点上没有注册服务,那么数据包将无处可去。因此,扩大规模或通过非aks LB路由。
•同时,清理${containerd folder}/io.containerd.content.v1.content/ingest中的图像层缓存文件夹。当某些层数据损坏时,Containerd不会自动清理缓存。您也可以尝试清除此路径下的内容${containerd folder}/io.containerd.content.v1.content/ingest.
•可能这是一个TCP部集群之间的网络连接问题和码头工人Gitlab图像注册表,所以你可以尝试使用代理和配置"X"后关闭连接它们之间传输的数据字节的重试拉开始在0%层然后导致同样的错误,因为一段时间后,我们得到一层联系密切,又没有完全拉。因此,我们建议使用位于集群附近的注册表,以获得更高的吞吐量。
•也尝试重新启动AKS集群和gitlab上的docker映像注册表之间的通信管道,它暂时修复了这个问题,直到它再次发生。
请查看以下链接获取更多信息:-
https://docs.gitlab.com/ee/user/packages/container_registry/