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 不再卡住。