根据您提供的错误信息,以下是详细的排查思路及解决方案:


核心问题定位

现象: k8s.gcr.io 镜像拉取超时 (Client.Timeout exceeded)
⚠️ 根本原因推测:
您的服务器所在网络环境 无法稳定访问 Google Container Registry (GCR),可能是由于以下任一原因导致:
1️⃣ 地理/政策限制 → 国内网络直连 GCR 常遇不稳定/封锁
2️⃣ 防火墙拦截 → 出站 HTTPS(443)/自定义端口受阻
3️⃣ DNS污染/劫持 → 域名解析异常
4️⃣ 镜像不存在或版本错误 → 指定的 v1.20.0 标签无效


分步解决方案

🔧 Step 1: 验证基础网络连通性 (必做!)
# 测试基础连通性 & DNS解析
ping k8s.gcr.io          # [应返回IP地址]
nslookup k8s.gcr.io      # [检查DNS解析结果]
curl -I https://k8s.gcr.io # [查看HTTP头响应]

📌 若以上命令均失败 → 您的网络环境存在全局性阻断,需优先联系网络管理员开放权限。


🔗 Step 2: 切换至国内镜像源 (推荐方案)

国内环境强烈建议改用 阿里云镜像库,操作如下:

1️⃣ 编辑配置文件 /root/kubeadm-config.yaml:

# 原始配置示例(需注释掉):
# imageRepository: k8s.gcr.io
# imageTag: v1.20.0

# 修改为阿里云镜像:
imageRepository: registry.aliyuncs.com/google_containers
imageTag: v1.20.0   # 确保标签与需求一致

💡 注:不同组件需单独指定镜像库,完整示例见下文

2️⃣ 典型全量配置模板(覆盖所有控制平面组件):

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
...
imageRepository: registry.aliyuncs.com/google_containers  # 关键修改点
kubernetesVersion: v1.20.0
controlPlaneEndpoint: "xxx"

# 显式声明各组件镜像(可选但推荐)
components:
  kubeAPIServer:
    image:
      repository: registry.aliyuncs.com/google_containers/kube-apiserver
      tag: v1.20.0
  kubeControllerManager:
    image:
      repository: registry.aliyuncs.com/google_containers/kube-controller-manager
      tag: v1.20.0
  kubeScheduler:
    image:
      repository: registry.aliyuncs.com/google_containers/kube-scheduler
      tag: v1.20.0
  etcd:
    image:
      repository: registry.aliyuncs.com/google_containers/etcd
      tag: v3.4.9-1

👉 重试命令:保存后再次执行 kubeadm config images pull ...


🕵️‍♂️ Step 3: 手动预拉镜像(应急方案)

若仍需使用官方镜像,可提前手动拉取至本地:

# 以 apiserver 为例
docker pull k8s.gcr.io/kube-apiserver:v1.20.0
# 其他组件同理:controller-manager, scheduler, etcd

📌 注意:此方法要求节点已安装 containerd/docker,且后续需确保镜像存在于所有节点。


🛡️ Step 4: 配置 DaemonSet 镜像加速器(长效优化)

创建 /etc/containerd/registries.conf 文件:

[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = ""
  # 添加阿里云镜像加速
  [plugins."io.containerd.grpc.v1.cri".registry."registry.aliyuncs.com"]
    auth = ""
    tls_verify = true
    max_retries = 3
    timeout = 10s

重启 containerd 服务使生效。


常见问题补充说明

现象 解决方案
Get https://... : net/http: request canceled ✅ 启用调试模式查看详细日志:kubeadm ... --v=5
❌ 特定组件镜像拉取失败 🔍 单独检查该组件镜像是否存在(官网查询标签)
⏳ 拉取速度极慢但未超时 ⚡ 强制使用 IPv4 DNS(修改 /etc/resolv.conf 移除 IPv6 DNS)

最终建议执行顺序

  1. 首选方案 → 改用阿里云镜像 + 完整配置各组件
  2. 备选方案 → 手动预拉镜像 + 离线部署
  3. 极端情况 → 搭建本地私有镜像仓库中转

请根据您的实际网络环境选择合适的方案。若仍存在问题,可通过 journalctl -u kubelet 查看详细容器运行时日志进一步诊断。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐