K8S 镜像拉取 之 toomanyrequests 的解决方法
摘要
-
本文介绍 K8S 镜像拉取 的
toomanyrequests
的解决方法 ,本文以 CentOS 8 为例。
toomanyrequests 介绍
-
当我们通过k8s创建pod时需要从 dockerhub 上拉取镜像,但是 dockerhub 的api请求是有限制的,未认证用户限制为100/6h,如果超过这个限制就会返回
429 Too Many Requests响应
。Docker Hub的使用和限制 -
我们可以进行用户认证,这样可以将限制提高到2000/6h。如果还需要进一步提高请求限制,可以申请dockerhub的pro plan。
dockerhub 认证
-
创建 Docker Registry Secret
1 | # 指定 namespace, 默认命名空间是 default |
-
可以在创建 pod 或 deployment 时指定凭证
pod
1 | apiVersion: v1 |
deployment
1 | apiVersion: apps/v1 |
-
将 Secret 添加到 ServiceAccount,这样 Pod 创建的时候,会自动将 Secret 挂载到 Pod 中
每个 namespace 下 都有一个 名称为 default 的 ServiceAccount
1 | # 查看 pod 的 ServiceAccount |
提高下载频率的其他建议
-
1.使用镜像缓存:
- 设置集群内镜像缓存(如 Harbor, Nexus Registry)
1
2
3# 修改集群的镜像仓库配置(vim)
kubectl edit configmap -n kube-system
# 找到 imageRepository: 替换为你的仓库地址- 使用 Docker Hub 镜像加速器(如果在中国大陆)
-
2.升级 Docker Hub 订阅:
- 免费账户:200 pulls/6小时(匿名用户100 pulls/6小时)
- Pro/Team 账户:无限制拉取
-
3.使用多个账户:
- 为不同节点配置不同的 Docker Hub 凭证
-
4.减少不必要的拉取:
- 使用 imagePullPolicy: IfNotPresent
- 尽量使用固定版本标签而非 latest