2.6.3. 使用共享 NFS 卷扩展 registry 的镜像推送错误
当将扩展的 registry 与共享 NFS 卷搭配使用时,您可能会在推送镜像的过程中看到以下错误之一:
-
digest invalid: provided digest did not match uploaded content
-
blob upload unknown
-
blob upload invalid
当 Docker 尝试推送镜像时,内部 registry 服务将返回这些错误。其原因源自于跨节点的文件属性同步。使用默认循环负载平衡配置推送镜像时可能会出现的错误,如 NFS 客户端缓存、网络延迟和层大小等因素。
您可以执行以下步骤来最大程度减少此类故障的可能性:
确保 docker-registry 服务的
sessionAffinity
设置为ClientIP
:$ oc get svc/docker-registry --template='{{.spec.sessionAffinity}}'
这应该会返回
ClientIP
,这是 OpenShift Container Platform 近期版本中的默认设置。如果没有,请修改它:$ oc patch svc/docker-registry -p '{"spec":{"sessionAffinity": "ClientIP"}}'
-
确保 NFS 服务器上的 registry 卷的 NFS 导出行列出
no_wdelay
选项。no_wdelay
选项可防止服务器延迟写入,这极大提高了读写一致性,这是 Registry 的一项要求。
重要
测试显示,使用 RHEL NFS 服务器作为容器镜像 registry 的存储后端会出现问题。这包括 OpenShift Container Registry 和 Quay。因此,不建议使用 RHEL NFS 服务器来备份核心服务使用的 PV。
市场上的其他 NFS 实现可能没有这些问题。如需了解更多与此问题相关的信息,请联络相关的 NFS 厂商。