Files
ljwx-k8s/ARM-IMAGE-PREFETCH-GUIDE.md
2026-02-20 22:50:45 +08:00

7.3 KiB
Raw Permalink Blame History

ARM 镜像预拉取指南

策略:先在欧洲 Harbor 服务器预拉取 ARM 镜像,再从本地拉取 优势:欧洲 Harbor 网络好 + 本地拉取已缓存的镜像速度快


📋 执行步骤

步骤 1: 在欧洲 Harbor 服务器上预拉取镜像

登录欧洲 Harbor 服务器:

ssh [email protected]
# 或者您的欧洲 Harbor 服务器地址

执行预拉取命令:

# 拉取 Trivy 扫描器镜像(ARM64 平台)
docker pull --platform linux/arm64 aquasec/trivy:0.66.0

# 或者通过 Harbor 的 dockerhub-proxy(推荐)
docker pull --platform linux/arm64 harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.66.0

# 如果还需要其他版本
docker pull --platform linux/arm64 aquasec/trivy:0.50.0

或者使用自动化脚本:

# 1. 复制脚本到欧洲 Harbor 服务器
scp /Users/brunogao/work/codes/tools/macos/k8s/eu-harbor-prefetch-arm-images.sh \
    [email protected]:/tmp/

# 2. 在欧洲 Harbor 服务器上执行
ssh [email protected]
chmod +x /tmp/eu-harbor-prefetch-arm-images.sh
/tmp/eu-harbor-prefetch-arm-images.sh

预期输出:

=== 🇪🇺 欧洲 Harbor ARM 镜像预拉取脚本 ===
=== 🔽 拉取: aquasec/trivy:0.66.0 (ARM64) ===
正在拉取: harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.66.0 --platform linux/arm64
0.66.0: Pulling from dockerhub-proxy/aquasec/trivy
6e174226ea69: Pull complete
7228ac13d00e: Pull complete
15e837b90154: Pull complete
88645a104b51: Pull complete
Digest: sha256:xxxxx
Status: Downloaded newer image for harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.66.0
✅ 拉取成功: aquasec/trivy:0.66.0

验证镜像架构:

# 确认镜像是 ARM64 架构
docker inspect harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.66.0 | grep -i arch
# 预期输出: "Architecture": "arm64"

步骤 2: 从本地拉取已缓存的镜像

在本地 Mac 上执行:

cd /Users/brunogao/work/codes/tools/macos/k8s

# 现在欧洲 Harbor 已经缓存了 ARM 镜像,拉取会很快
./cache-image.sh aquasec/trivy:0.66.0

预期效果:

  • ✅ 拉取速度大幅提升(从欧洲 Harbor 缓存拉取)
  • ✅ 自动推送到本地 Harbor
  • ✅ 架构匹配(ARM64)

步骤 3: 更新 Trivy Operator 使用本地镜像

# 更新 Trivy Operator 配置
helm upgrade trivy-operator aqua/trivy-operator \
  --namespace trivy-system \
  --reuse-values \
  --set trivy.image.registry=harbor.omniverseai.net \
  --set trivy.image.repository=library/aquasec-trivy \
  --set trivy.image.tag=0.66.0

# 验证扫描任务启动
kubectl get pods -n trivy-system

# 等待漏洞扫描完成
kubectl get vulnerabilityreports -A --watch

🚀 快速命令(单行执行)

在欧洲 Harbor 服务器上:

# 一键预拉取 ARM 镜像
docker pull --platform linux/arm64 harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.66.0 && \
docker pull --platform linux/arm64 harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.50.0 && \
echo "✅ ARM 镜像已缓存到欧洲 Harbor"

在本地 Mac 上:

# 一键拉取并部署
cd /Users/brunogao/work/codes/tools/macos/k8s && \
./cache-image.sh aquasec/trivy:0.66.0 && \
helm upgrade trivy-operator aqua/trivy-operator \
  --namespace trivy-system \
  --reuse-values \
  --set trivy.image.registry=harbor.omniverseai.net \
  --set trivy.image.repository=library/aquasec-trivy \
  --set trivy.image.tag=0.66.0 && \
echo "✅ Trivy Operator 已更新,扫描任务启动中..."

🔍 故障排查

问题 1: 欧洲 Harbor 无法拉取镜像

症状:

Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded

解决方案:

# 1. 检查网络连接
curl -I https://registry-1.docker.io

# 2. 检查 Docker 配置
cat /etc/docker/daemon.json

# 3. 增加超时时间
export DOCKER_CLIENT_TIMEOUT=600
export COMPOSE_HTTP_TIMEOUT=600

# 4. 重试
docker pull --platform linux/arm64 aquasec/trivy:0.66.0

问题 2: 本地拉取仍然超时

症状:

[✗] 两个源都拉取失败(超时或网络问题)

解决方案:

# 1. 验证欧洲 Harbor 已缓存镜像
ssh [email protected] "docker images | grep trivy"

# 2. 手动测试拉取
docker pull harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.66.0

# 3. 如果成功,手动标记并推送
docker tag harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.66.0 \
  harbor.omniverseai.net/library/aquasec-trivy:0.66.0

docker push harbor.omniverseai.net/library/aquasec-trivy:0.66.0

问题 3: 镜像架构不匹配

症状:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64)

解决方案:

# 确保在欧洲 Harbor 服务器上拉取时指定了 --platform
docker pull --platform linux/arm64 aquasec/trivy:0.66.0

# 验证架构
docker inspect aquasec/trivy:0.66.0 | jq '.[0].Architecture'
# 应该输出: "arm64"

📊 预期时间

步骤 欧洲 Harbor 服务器 本地 Mac
预拉取镜像 3-5 分钟 -
本地拉取 - 30-60 秒 ✅
推送到本地 Harbor - 20-30 秒
更新 Trivy Operator - 10 秒
总计 3-5 分钟 1-2 分钟

对比直接从本地拉取(超时失败):✅ 节省 95% 时间


📝 镜像清单

需要预拉取的镜像:

镜像 版本 平台 大小 用途
aquasec/trivy-operator 0.29.0 arm64 ~50MB ✅ 已缓存
aquasec/trivy 0.66.0 arm64 ~500MB ⏳ 待拉取
aquasec/trivy 0.50.0 arm64 ~400MB 备选版本

✅ 完成验证

在欧洲 Harbor 服务器上验证:

# 查看已缓存的镜像
docker images | grep trivy

# 预期输出
# harbor.eu.../dockerhub-proxy/aquasec/trivy     0.66.0    xxxxx    arm64
# harbor.eu.../dockerhub-proxy/aquasec/trivy     0.50.0    xxxxx    arm64

在本地 Mac 上验证:

# 查看本地 Harbor 的镜像
docker images | grep trivy

# 预期输出
# harbor.omniverseai.net/library/aquasec-trivy-operator   0.29.0   xxxxx   arm64
# harbor.omniverseai.net/library/aquasec-trivy            0.66.0   xxxxx   arm64

# 查看 Trivy 扫描任务
kubectl get pods -n trivy-system

# 预期输出(扫描任务运行中)
# scan-vulnerabilityreport-xxx   0/1   Init:0/1   0   10s
# trivy-operator-xxx             1/1   Running    0   5m

🎯 下一步

完成镜像拉取后:

  1. 验证漏洞扫描 - 等待 5-10 分钟查看扫描结果

    kubectl get vulnerabilityreports -A
    
  2. 查看扫描详情 - 检查发现的漏洞

    kubectl get vulnerabilityreports -A -o json | jq '.items[0].report.summary'
    
  3. 创建 Grafana Dashboard - 可视化安全数据

    • 导入 Trivy Dashboard
    • 配置告警规则
  4. 定期更新镜像 - 保持扫描器最新

    # 每月更新
    ./cache-image.sh aquasec/trivy:latest
    

创建时间: 2025-12-30 23:55 策略: 欧洲 Harbor 预拉取 → 本地快速获取 状态: 等待在欧洲 Harbor 服务器执行