15.9.7 镜像缓存与加速配置
镜像缓存与加速配置#
镜像缓存与加速的目标是降低拉取时延、减少公网带宽消耗,并提升集群内节点的一致性与稳定性。本节覆盖加速器配置、代理缓存、节点预热、K8s 与构建侧缓存,并配套安装、示例、排错与练习。
原理草图(镜像拉取与缓存链路)
一、镜像加速器配置(Docker)
1. 安装与配置
- 文件路径:/etc/docker/daemon.json
- 关键字段:
- registry-mirrors:镜像加速器地址
- insecure-registries:自签仓库白名单
{
"registry-mirrors": [
"https://mirror.example.com",
"https://mirror.backup.com"
],
"insecure-registries": [
"registry.intra:5000"
]
}
2. 生效与验证
sudo systemctl daemon-reload
sudo systemctl restart docker
# 查看加速器是否生效
docker info | grep -A 5 "Registry Mirrors"
# 拉取测试
docker pull alpine:3.19
命令解释
- systemctl restart docker:重启服务加载新配置
- docker info:查看运行时配置是否包含镜像加速器
二、内网代理缓存(Registry Proxy Cache)
1. Registry 代理缓存安装示例
# 拉取官方 registry 镜像
docker pull registry:2
# 运行代理缓存(上游 Docker Hub)
docker run -d --name registry-proxy \
-p 5001:5000 \
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
-v /data/registry:/var/lib/registry \
registry:2
2. 拉取走代理缓存
# 使用代理缓存拉取
docker pull registry.intra:5001/library/nginx:1.25
# 预期效果:首次拉取缓存到 /data/registry,再次拉取命中缓存
排错要点
- docker logs registry-proxy:检查上游访问失败、认证错误
- 检查 REGISTRY_PROXY_REMOTEURL 是否正确
- 磁盘满:df -h /data/registry
三、节点侧本地缓存与镜像预热
1. 预拉取脚本(批量预热)
#!/usr/bin/env bash
# /usr/local/bin/image-prewarm.sh
set -e
IMAGES=(
"alpine:3.19"
"nginx:1.25"
"redis:7.2"
)
for img in "${IMAGES[@]}"; do
echo "Pulling $img ..."
docker pull "$img"
done
chmod +x /usr/local/bin/image-prewarm.sh
/usr/local/bin/image-prewarm.sh
2. 预期效果
- 新节点加入时拉取峰值下降
- 业务镜像冷启动时延缩短
四、K8s/containerd 镜像加速
1. containerd 加速配置
- 文件路径:/etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://mirror.example.com"]
sudo systemctl restart containerd
2. 拉取策略示例
apiVersion: v1
kind: Pod
metadata:
name: pull-test
spec:
containers:
- name: nginx
image: nginx:1.25
imagePullPolicy: IfNotPresent
命令解释
- imagePullPolicy: IfNotPresent:节点已有镜像则不再拉取
五、构建侧缓存与分层优化(BuildKit)
1. 启用 BuildKit 并构建
export DOCKER_BUILDKIT=1
docker build \
--build-arg BUILDKIT_INLINE_CACHE=1 \
-t app:1.0 .
2. Dockerfile 缓存优化示例
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y curl
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY . /app/
CMD ["python", "/app/app.py"]
优化说明
- COPY requirements.txt 提前:依赖不变时可命中缓存
- 合并 RUN 减少层数
六、常见故障排查
1. 加速器不可用
# 检查 DNS 与访问
nslookup mirror.example.com
curl -I https://mirror.example.com/v2/
2. 缓存不命中
- 镜像标签频繁变动(如 latest)
- 代理缓存未配置或上游不可达
3. 磁盘占满
# 查看 overlay2 大小
du -sh /var/lib/docker/overlay2
# 清理无用镜像与缓存
docker system prune -af
七、练习
- 为 Docker 配置两个加速器,验证
docker info输出并截图保存。 - 搭建 Registry 代理缓存,拉取
nginx:1.25两次,观察第二次拉取速度变化。 - 写一个预热脚本拉取 5 个常用镜像,并添加日志记录到
/var/log/image-prewarm.log。 - 在 K8s 节点配置 containerd 镜像加速,验证 Pod 启动时间变化。