摘要
toomanyrequests 介绍
dockerhub 认证
1 2 3 4 5 6 7 8 9 10 11
| kubectl create secret docker-registry \ dockerhub-secret \ --namespace=你的命名空间 \ --docker-server=https://index.docker.io/v1/ \ --docker-username=你的用户名 \ --docker-password=你的密码或访问令牌 \ --docker-email=你的邮箱
kubectl get secret dockerhub-secret -o yaml -n <namespace>
|
pod
1 2 3 4 5 6 7 8 9 10
| apiVersion: v1 kind: Pod metadata: name: myapp spec: containers: - name: myapp image: username/repository:tag imagePullSecrets: - name: dockerhub-secret
|
deployment
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: username/repository:tag imagePullSecrets: - name: dockerhub-secret
|
每个 namespace 下 都有一个 名称为 default 的 ServiceAccount
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| $ k describe pod pi-n65gn | grep "Service Account" Service Account: default
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "dockerhub-secret"}]}' -n <namespace>
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "dockerhub-secret"}, {"name": "harbor-secret"}, {"name": "aliyun-secret"}]}' -n <namespace>
kubectl patch serviceaccount default --type='json' -p='[{"op": "add", "path": "/imagePullSecrets/-", "value": {"name": "new-secret"}}]' -n <namespace>
kubectl get sa default -o jsonpath='{.imagePullSecrets[*].name}' -n <namespace>
kubectl patch serviceaccount default --type=json -p='[{"op": "remove", "path": "/imagePullSecrets/1"}]' -n <namespace>
kubectl patch sa default -p '{"imagePullSecrets": []}' -n <namespace>
for ns in $(kubectl get ns -o jsonpath='{.items[*].metadata.name}'); do kubectl patch serviceaccount default -n $ns \ --type=merge \ -p '{"imagePullSecrets": [{"name": "dockerhub-secret"}]}' done
$ kubectl get serviceaccount default -o yaml -n <namespace> apiVersion: v1 imagePullSecrets: - name: dockerhub-secret kind: ServiceAccount metadata: creationTimestamp: "2025-06-29T14:41:35Z" name: default namespace: default resourceVersion: "361001" uid: cb3a0f99-5804-4f21-816a-70533cc3d29d
|
提高下载频率的其他建议
-
1.使用镜像缓存:
- 设置集群内镜像缓存(如 Harbor, Nexus Registry)
1 2 3
| kubectl edit configmap -n kube-system
|
- 使用 Docker Hub 镜像加速器(如果在中国大陆)
- 如果 k8s 使用的是 docker,则在
/etc/docker/daemon.json添加镜像加速器配置
1 2 3 4 5 6 7 8 9 10 11 12
| sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.1ms.run", "https://docker.xuanyuan.me", "https://docker.m.daocloud.io" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
|
- 如果 k8s 使用的是 containerd,则在
/etc/containerd/config.toml添加镜像加速器配置
1 2 3 4 5 6 7 8 9
| sudo vi /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://docker.1ms.run", "https://docker.xuanyuan.me", "https://docker.m.daocloud.io"]
sudo systemctl restart containerd
|
-
2.升级 Docker Hub 订阅:
- 免费账户:200 pulls/6小时(匿名用户100 pulls/6小时)
- Pro/Team 账户:无限制拉取
-
3.使用多个账户:
-
4.减少不必要的拉取:
- 使用 imagePullPolicy: IfNotPresent
- 尽量使用固定版本标签而非 latest