You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地kubeadm部署K8S无法拉取私有gcr.io镜像求助

问题分析与解决方案

首先明确两个核心问题:

  • kubelet 1.14与Docker 18.09.5不存在兼容性问题:Kubernetes 1.14的官方兼容列表明确支持Docker 18.09版本,所以版本匹配不是你遇到的问题根源。
  • kubelet确实依赖底层CRI(此处为Docker):kubelet通过CRI接口与Docker交互拉取镜像,但问题出在认证凭证的传递/加载环节,而非依赖关系本身。

你遇到的unauthorized错误,本质是kubelet调用Docker拉取镜像时,没有使用到能访问GCR私有仓库的凭证——虽然你在本地用户环境下配置了docker-credentials-gcr,但kubelet运行的上下文和你操作的用户上下文并不一致,导致凭证无法被复用。

可能的原因及对应解决方法:

1. Docker凭证未在kubelet运行的用户上下文生效

你执行docker-credentials-gcr configure-docker是在普通用户环境下,而kubelet通常以root用户运行,它会读取/root/.docker/config.json而非普通用户目录下的配置文件。

  • 解决方法:
    • 切换到root用户(执行sudo -i),重新运行docker-credentials-gcr configure-docker;
    • 或者将普通用户下的~/.docker/config.json复制到/root/.docker/,并确保文件权限为600(执行chmod 600 /root/.docker/config.json)。

2. 未配置Kubernetes ImagePullSecret

即使Docker本身能拉取镜像,Kubernetes默认不会自动复用本地Docker的凭证。你需要将GCR的认证信息创建为Kubernetes的镜像拉取密钥,并关联到Pod或默认ServiceAccount:

  • 创建ImagePullSecret:
    kubectl create secret docker-registry gcr-pull-secret \
      --docker-server=gcr.io \
      --docker-username=_json_key \
      --docker-password="$(cat /path/to/your-gcr-service-account-key.json)" \
      --docker-email=any@example.com
    
  • 方法一:在Pod的YAML中指定该密钥:
    spec:
      imagePullSecrets:
        - name: gcr-pull-secret
      containers:
        - name: node-hello
          image: gcr.io/own-gcr/node-hello
    
  • 方法二:将密钥设置为Namespace的默认拉取凭证(无需每个Pod单独配置):
    kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gcr-pull-secret"}]}'
    

3. kubelet的Docker凭证加载配置异常

检查kubelet是否正确加载了Docker的凭证存储:

  • 查看kubelet的启动参数,确认是否有--image-pull-progress-deadline等正常参数,且没有禁用凭证加载的配置;
  • 检查Docker daemon的配置文件(通常是/etc/docker/daemon.json),确保没有影响凭证读取的设置,比如insecure-registries配置错误(不过你本地能拉取,这点可能性较低)。

4. docker-credentials-gcr的全局配置未生效

确认docker-credentials-gcr的配置是否全局生效:

  • 查看/root/.docker/config.json中是否包含以下类似条目:
    {
      "credsStore": "gcr",
      "auths": {
        "gcr.io": {}
      }
    }
    
    如果没有,重新执行docker-credentials-gcr configure-docker并确保输出提示配置成功。

内容的提问来源于stack exchange,提问作者Olivier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:32:53