kubernetes - 限制集群范围内图像拉取的数量和频率

kubernetes - 限制集群范围内图像拉取的数量和频率

由于达到 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 个容器镜像,现在已生效。超过这些限制的镜像请求将被拒绝,直到六小时窗口期结束。

因此,作为一种解决方法,您可以:

  1. 降低拉动速率。
  2. 升级您的会员资格。
  3. 设置自己的 Docker 代理以在本地缓存容器

要克服 docker hub 拉取速率限制,请参阅文档并参考堆栈帖子

2。另一种解决方法是将图像拉到本地一次,将其推送到本地 docker 存储库,然后更新图像属性以指向本地存储库。

您必须使用您的凭证在本地提取图像并将其推送到本地(内部托管)docker 存储库。推送后,使用更新的图像链接更新deployment.yaml 文件。

笔记:此外,您还可以使用註冊鏡像针对 DockerHub 生成的镜像拉取请求数量。配置镜像后,GitLab Runner 指示 Docker 拉取镜像,Docker 将首先检查镜像;如果这是第一次拉取镜像,则会连接到 DockerHub。随后拉取该镜像将使用镜像,而不是连接到 DockerHub。请参阅注册表作为拉取缓存了解更多信息。

相关内容