由于达到 docker hub 的镜像拉取数量限制,导致镜像拉取中断,请参阅下面 pod 输出的“事件”部分描述。
似乎我设置的 kubernetes 集群中的一个 pod 无法在 docker hub 上找到镜像,因此 pod 构建阶段失败。然后 Kubernetes 尝试为同一镜像构建一个新的 pod,并再次尝试拉取同一镜像。
在 Kubernetes 中,有没有办法限制从镜像存储库中提取镜像的次数。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 6m3s default-scheduler Successfully assigned calico-system/calico-node-rq98n to centos7-03-10
Warning Failed 5m15s kubelet Failed to pull image "docker.io/calico/pod2daemon-flexvol:v3.24.0": rpc error: code = Unknown desc = initializing source docker://calico/pod2daemon-flexvol:v3.24.0: reading manifest v3.24.0 in docker.io/calico/pod2daemon-flexvol: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
Normal Pulling 108s (x4 over 6m3s) kubelet Pulling image "docker.io/calico/pod2daemon-flexvol:v3.24.0"
Warning Failed 62s (x4 over 5m15s) kubelet Error: ErrImagePull
Warning Failed 62s (x3 over 3m53s) kubelet Failed to pull image "docker.io/calico/pod2daemon-flexvol:v3.24.0": rpc error: code = Unknown desc = reading manifest v3.24.0 in docker.io/calico/pod2daemon-flexvol: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
Normal BackOff 21s (x7 over 5m15s) kubelet Back-off pulling image "docker.io/calico/pod2daemon-flexvol:v3.24.0"
Warning Failed 21s (x7 over 5m15s) kubelet Error: ImagePullBackOff
答案1
1.2020 年 11 月 20 日,Docker Hub 匿名和免费身份验证使用速率限制生效。匿名和免费 Docker Hub 用户每六小时最多可请求 100 个和 200 个容器镜像。您可以参考下载速率限制了解更多详细信息。
正如文档:
匿名用户每六小时最多可请求 100 个容器镜像,免费 Docker 帐户每六小时最多可请求 200 个容器镜像,现在已生效。超过这些限制的镜像请求将被拒绝,直到六小时窗口期结束。
因此,作为一种解决方法,您可以:
- 降低拉动速率。
- 升级您的会员资格。
- 设置自己的 Docker 代理以在本地缓存容器
要克服 docker hub 拉取速率限制,请参阅文档并参考堆栈帖子。
2。另一种解决方法是将图像拉到本地一次,将其推送到本地 docker 存储库,然后更新图像属性以指向本地存储库。
您必须使用您的凭证在本地提取图像并将其推送到本地(内部托管)docker 存储库。推送后,使用更新的图像链接更新deployment.yaml 文件。
笔记:此外,您还可以使用註冊鏡像针对 DockerHub 生成的镜像拉取请求数量。配置镜像后,GitLab Runner 指示 Docker 拉取镜像,Docker 将首先检查镜像;如果这是第一次拉取镜像,则会连接到 DockerHub。随后拉取该镜像将使用镜像,而不是连接到 DockerHub。请参阅注册表作为拉取缓存了解更多信息。