AKS 无法提取图像 - 大小验证失败

Posted

技术标签:

【中文标题】AKS 无法提取图像 - 大小验证失败【英文标题】:AKS fails to pull image - failed size validation 【发布时间】:2021-10-21 13:49:44 【问题描述】:

我在 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 环境中提取相同的图像完美无缺。 任何提示将不胜感激!

【问题讨论】:

你好@szachmat,如果我的回答对你有帮助,你可以投票并接受它作为答案(点击答案旁边的复选标记,将它从灰色切换为填充。)。这对其他社区成员可能是有益的。谢谢。 【参考方案1】:

• 您可以尝试扩展注册表以在所有节点上运行。 Kubernetes 控制器尝试变得智能并在内部路由节点请求,而不是向负载均衡器 IP 发送流量。但问题是,如果该节点上没有注册服务,数据包将无处可去。因此,扩大规模或通过非 AKS LB 路由。

• 此外,清理 $containerd 文件夹/io.containerd.content.v1.content/ingest.Containerd 中的图像图层缓存文件夹在某些图层数据损坏时不会自动清理此缓存。您也可以尝试清除此路径 $containerd folder/io.containerd.content.v1.content/ingest 中的内容。

• 这可能是 AKS 集群和 Gitlab 上的 docker 映像注册表之间的 TCP 网络连接问题,因此您可以尝试使用代理并将其配置为在“X”字节数据后关闭它们之间的连接当层的拉取重试从 0% 开始时转移,这会导致相同的错误,因为一段时间后我们关闭了连接,并且层再次没有被完全拉取。因此,建议使用位于其集群附近的注册表以获得更高的吞吐量。

• 还可以尝试重启 AKS 集群和 gitlab 上的 docker 镜像注册表之间的通信管道,它会暂时修复此问题,直到它再次发生。

更多信息请点击以下链接:-

https://docs.gitlab.com/ee/user/packages/container_registry/

【讨论】:

以上是关于AKS 无法提取图像 - 大小验证失败的主要内容,如果未能解决你的问题,请参考以下文章

AWS Fargate ResourceInitializationError:无法提取机密或注册表身份验证:拉命令失败::信号:已杀死

无法将图像推送到 Amazon ECR - 因“没有基本身份验证凭证”而失败

由于错误,iOS App Archive 验证失败

KEDA 缩放器无法在 AKS 上使用 pod 身份触发身份验证

Laravel图像上载验证失败

如何修复“文件上传失败。”使用任何图像上传验证时出错 - Laravel 5.7