Kubernetes环境已登录Docker仍触发镜像拉取速率限制如何解决
问题原因
你在本地机器执行docker login仅会在本地存储Docker Hub的认证凭证,Kubernetes是通过各节点上的kubelet组件独立拉取容器镜像的,kubelet默认无法读取你本地机器的登录凭证,拉取镜像时仍使用匿名身份,因此触发Docker Hub的匿名拉取速率限制。
解决方案
方案1:配置Kubernetes镜像拉取Secret(生产环境推荐)
- 第一步:执行命令创建Docker Hub认证Secret,替换命令里的占位符为你自己的账号信息
kubectl create secret docker-registry dockerhub-auth --docker-server=docker.io --docker-username=你的DockerHub用户名 --docker-password=你的DockerHub密码 --docker-email=你的账号绑定邮箱 - 第二步:在你的部署yaml中关联该Secret,在
spec.template.spec层级下添加如下配置:
imagePullSecrets: - name: dockerhub-auth
配置完成后重新执行kubectl apply -f manifests/1_helloworld_deploy.yaml即可正常拉取镜像。
如果不想给每个Deployment都单独配置镜像拉取密钥,可以执行如下命令给当前命名空间的默认ServiceAccount绑定该Secret,绑定后该命名空间下新建的所有Pod都会默认使用这个凭证拉取镜像:kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "dockerhub-auth"}]}'
方案2:节点本地配置凭证(测试环境临时使用)
登录Kubernetes集群的所有工作节点,在每个节点上都执行docker login(如果用containerd作为运行时就配置对应ctr的登录凭证),让节点本地的容器运行时存储认证凭证,kubelet拉镜像时会自动读取节点本地的凭证。这个方案需要逐节点配置,节点扩容时要重复操作,不适合生产环境使用。
方案3:配置镜像加速
给所有节点的容器运行时配置合规的容器镜像加速地址,绕开Docker Hub官方源的限流,配置完成后重启容器运行时和kubelet服务即可生效。
内容的提问来源于stack exchange,提问作者Bhaveshsharma
相关产品推荐
相关产品推荐

