K8s 镜像加速最佳实践

在国内或企业内网环境中,Kubernetes 最大的痛点之一就是:

镜像拉取慢、拉取失败、Pod 一直卡在 ImagePullBackOff。

本篇文章带你掌握 2025 最新可用的 K8s 镜像加速方案,并附完整可落地操作步骤,适用于 Docker、Containerd 和 K8s 1.30+ 版本。

一、为什么镜像拉取慢?

常见缘由如下:

  • 默认镜像仓库在海外(k8s.gcr.io、registry.k8s.io)
  • 企业环境被代理或网络隔离
  • Containerd/Docker 没有配置镜像加速
  • 镜像太大(Java、大模型、AI 框架)

只要解决 “镜像源 + runtime 配置” 即可明显加速。

二、方案 1:配置 Containerd 镜像加速(推荐)

Containerd 是 K8s 默认运行时,先检查配置文件:

cat /etc/containerd/config.toml

如果没有,生成默认配置:

containerd config default > /etc/containerd/config.toml

修改镜像加速源:

找到:

[plugins.”io.containerd.grpc.v1.cri”.registry]

在下面添加:

[plugins.”io.containerd.grpc.v1.cri”.registry.mirrors.”registry.k8s.io”]

endpoint = [“https://registry.aliyuncs.com”]

[plugins.”io.containerd.grpc.v1.cri”.registry.mirrors.”docker.io”]

endpoint = [“https://docker.m.daocloud.io”]

重启服务:

systemctl restart containerd

systemctl restart kubelet

验证是否生效:

ctr images pull docker.io/library/busybox:latest

三、方案 2:Docker 镜像加速(如你使用 Docker Runtime)

编辑 Docker 配置:

mkdir -p /etc/docker

nano /etc/docker/daemon.json

加入如下加速源:

{

“registry-mirrors”: [

“https://docker.m.daocloud.io”,

“https://mirror.ccs.tencentyun.com”

]

}

重启 Docker:

systemctl restart docker

systemctl restart kubelet

测试:

docker pull busybox

四、方案 3:Pod 级镜像拉取策略优化(许多人不知道)

在 Deployment 中加入以下内容可以避免反复拉取镜像:

imagePullPolicy: IfNotPresent

或本地调试用:

imagePullPolicy: Never

适用于:

  • 节省网络
  • 频繁调试镜像

五、方案 4:搭建企业级私有镜像仓库(Harbor / Nexus)

企业生产环境强烈提议搭建镜像仓库,以获得:

  • 本地镜像缓存
  • 镜像复制(CI → 生产)
  • 镜像安全扫描
  • 用户权限控制

Harbor 一键安装:

wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-online-installer.tgz

tar xf harbor-online-installer.tgz

cd harbor

./install.sh

部署完成后,将镜像推送到企业仓库即可。

六、方案 5:使用 crictl 强制拉取镜像(Pod 拉取失败专用)

crictl 是诊断 Pod 镜像拉取失败最强工具:

crictl pull <image>

例如:

crictl pull registry.k8s.io/pause:3.9

如果 crictl 能拉取成功,则说明镜像源正常,问题可能在 kubelet 或 YAML 配置。

七、常见镜像拉取失败错误与解决

错误信息

缘由

解决方案

ImagePullBackOff

拉取镜像失败

配置镜像加速

ErrImagePull

镜像不存在 / 位置错误

检查 repository 与 tag

Unauthorized

仓库权限不足

配置 imagePullSecrets

TLS handshake timeout

网络差

使用加速源 / 离线仓库

x509 certificate error

证书错误

配置 insecure-registry

八、总结(速记版)

Containerd 速度最快 → 修改 registry.mirrors

Docker 用 registry-mirrors

镜像政策 IfNotPresent 避免重复拉取

企业用 Harbor/Nexus

crictl 是最强排查工具

掌握以上方法,K8s 拉镜像从 几分钟 → 数秒,Pod 不再卡住。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...