Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

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 客户端缓存、网络延迟和层大小等因素。

您可以执行以下步骤来最大程度减少此类故障的可能性:

  1. 确保 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"}}'
  2. 确保 NFS 服务器上的 registry 卷的 NFS 导出行列出 no_wdelay 选项。no_wdelay 选项可防止服务器延迟写入,这极大提高了读写一致性,这是 Registry 的一项要求。
重要

测试显示,使用 RHEL NFS 服务器作为容器镜像 registry 的存储后端会出现问题。这包括 OpenShift Container Registry 和 Quay。因此,不建议使用 RHEL NFS 服务器来备份核心服务使用的 PV。

市场上的其他 NFS 实现可能没有这些问题。如需了解更多与此问题相关的信息,请联络相关的 NFS 厂商。