Files
ljwx-k8s/K8S-IMAGE-CACHE-REPORT.md
2026-02-20 22:50:45 +08:00

7.2 KiB
Raw Permalink Blame History

K8s 常用镜像批量缓存报告

日期: 2025-12-31 执行时间: 约 30 分钟 总镜像数: 68 个


📊 缓存统计

项目 数量 百分比
总计 68 100%
成功 39 57.4% ✅
失败 29 42.6% ❌

✅ 成功缓存的镜像类别

1. registry.k8s.io 镜像(部分)

  • ✅ metrics-server:v0.7.2, v0.7.1
  • ✅ prometheus-adapter:v0.12.0, v0.11.2
  • ✅ kube-state-metrics:v2.13.0, v2.12.0
  • ✅ ingress-nginx/controller:v1.11.2, v1.10.1
  • ✅ pause:3.10
  • ✅ coredns:v1.11.1
  • ✅ autoscaling/vpa-recommender:1.2.0
  • ✅ autoscaling/cluster-autoscaler:v1.30.0
  • ✅ dns/k8s-dns-node-cache:1.23.1
  • ✅ sig-storage/csi-*(多个 CSI 驱动组件)

2. Docker Hub 镜像

  • ✅ busybox:latest, 1.36, 1.36-musl
  • ✅ alpine:latest, 3.20, 3.19
  • ✅ curlimages/curl:latest, 8.11.1
  • ✅ grafana/grafana:11.4.0, 11.3.1, latest
  • ✅ grafana/loki:3.3.2, 3.3.1
  • ✅ grafana/promtail:3.3.2
  • ✅ grafana/tempo:2.7.2
  • ✅ prometheuscommunity/postgres-exporter:v0.15.0
  • ✅ prom/mysqld-exporter:v0.16.0
  • ✅ oliver006/redis_exporter:v1.66.0
  • ✅ aquasec/trivy:latest
  • ✅ aquasec/trivy-operator:0.29.0
  • ✅ velero/velero-plugin-for-aws:v1.11.0

3. 成功率分析

  • registry.k8s.io: ~60% 成功(EU Harbor k8s-proxy 有缓存的镜像)
  • Docker Hub: ~80% 成功(EU Harbor dockerhub-proxy 代理良好)
  • quay.io: 0% 成功(EU Harbor 未配置代理)
  • ghcr.io: 0% 成功(EU Harbor 未配置代理)

❌ 失败的镜像(29 个)

1. registry.k8s.io 镜像(11 个)

registry.k8s.io/pause:3.9
registry.k8s.io/coredns/coredns:v1.11.3
registry.k8s.io/ingress-nginx/controller:v1.11.3
registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231226-1a7112e06
registry.k8s.io/autoscaling/vpa-updater:1.2.0
registry.k8s.io/autoscaling/vpa-admission-controller:1.2.0
registry.k8s.io/dns/k8s-dns-node-cache:1.23.0
registry.k8s.io/sig-storage/livenessprobe:v2.14.0
registry.k8s.io/gateway-api/admission-server:v1.2.0
registry.k8s.io/dashboard/dashboard:v2.7.0
registry.k8s.io/dashboard/metrics-scraper:v1.0.9

原因: EU Harbor k8s-proxy 未缓存这些镜像

2. quay.io 镜像(11 个)

quay.io/jetstack/cert-manager-controller:v1.16.2
quay.io/jetstack/cert-manager-webhook:v1.16.2
quay.io/jetstack/cert-manager-cainjector:v1.16.2
quay.io/jetstack/cert-manager-acmesolver:v1.16.2
quay.io/argoproj/argocd:v2.13.2
quay.io/argoproj/argocd:v2.13.1
quay.io/prometheus/prometheus:v2.55.1
quay.io/prometheus/prometheus:v2.55.0
quay.io/prometheus/alertmanager:v0.27.0
quay.io/prometheus/node-exporter:v1.8.2
quay.io/prometheus/blackbox-exporter:v0.25.0
quay.io/bitnami/sealed-secrets-controller:v0.27.2

原因: EU Harbor 未配置 quay-proxy

3. ghcr.io 镜像(2 个)

ghcr.io/external-secrets/external-secrets:v0.11.0
ghcr.io/stakater/reloader:v1.2.3

原因: EU Harbor 未配置 ghcr-proxy

4. Docker Hub 镜像(5 个)

nicolaka/netshoot:latest
grafana/tempo:2.7.3
aquasec/trivy:0.58.2
velero/velero:v1.15.0

原因: EU Harbor dockerhub-proxy 未缓存或网络超时


🎯 已缓存镜像的使用

所有成功缓存的镜像都存储在:

harbor.omniverseai.net/library/<扁平化镜像名>

使用示例

原始镜像:

image: registry.k8s.io/metrics-server/metrics-server:v0.7.2

本地 Harbor 镜像:

image: harbor.omniverseai.net/library/metrics-server-metrics-server:v0.7.2

批量查看已缓存镜像

# 查看本地 Harbor 所有镜像
curl -s -u admin:admin123 http://harbor.omniverseai.net/api/v2.0/projects/library/repositories | jq -r '.[] | .name'

# 统计镜像数量
curl -s -u admin:admin123 http://harbor.omniverseai.net/api/v2.0/projects/library/repositories | jq '. | length'

🔧 失败镜像的解决方案

方案 1: 在 EU Harbor 服务器上配置代理(推荐)

需要在 EU Harbor 配置以下代理项目:

Registry 代理项目名 优先级
quay.io quay-proxy 🔴 高(11 个镜像失败)
ghcr.io ghcr-proxy 🟡 中(2 个镜像失败)

配置步骤(在 EU Harbor 服务器上):

  1. 登录 Harbor Web UI
  2. 创建新项目 quay-proxy 和 ghcr-proxy
  3. 配置为 Proxy Cache 类型
  4. 设置上游 Registry URL:
    • quay-proxy: https://quay.io
    • ghcr-proxy: https://ghcr.io

方案 2: 在 EU Harbor 服务器上手动缓存

# 在 EU Harbor 服务器上执行
ssh eu-harbor-server

# 拉取并推送到 k8s-proxy
for image in \
  "registry.k8s.io/pause:3.9" \
  "registry.k8s.io/coredns/coredns:v1.11.3" \
  "registry.k8s.io/dashboard/dashboard:v2.7.0"; do

  docker pull "$image"
  docker tag "$image" "harbor.eu.lingjingwanxiang.cn/k8s-proxy/${image#registry.k8s.io/}"
  docker push "harbor.eu.lingjingwanxiang.cn/k8s-proxy/${image#registry.k8s.io/}"
done

方案 3: 使用国内镜像源(临时方案)

对于 registry.k8s.io 的镜像,可以使用国内镜像源:

# 阿里云镜像
registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9

# 腾讯云镜像
ccr.ccs.tencentyun.com/k8s-gcr/pause:3.9

📈 优化建议

1. 扩展 cache-image.sh 支持更多 Registry

建议修改 cache-image.sh 添加以下检测:

# 检测 quay.io
if [[ "$input_image" =~ ^quay\.io/ ]]; then
    proxy_project="quay-proxy"

# 检测 ghcr.io
elif [[ "$input_image" =~ ^ghcr\.io/ ]]; then
    proxy_project="ghcr-proxy"
fi

2. 定期同步常用镜像

创建定时任务,每周同步一次常用镜像:

# 添加到 crontab
0 2 * * 0 cd /path/to/k8s && ./cache-image.sh -f k8s-common-images.txt

3. 监控镜像缓存状态

# 检查本地 Harbor 镜像数量
curl -s -u admin:admin123 http://harbor.omniverseai.net/api/v2.0/projects/library/repositories | \
  jq '. | length'

# 检查最近更新的镜像
curl -s -u admin:admin123 http://harbor.omniverseai.net/api/v2.0/projects/library/repositories | \
  jq -r '.[] | "\(.name) - \(.update_time)"' | sort -k3 -r | head -10

📝 总结

成果

  • ✅ 成功缓存 39 个常用 K8s 镜像
  • ✅ 覆盖核心组件、监控、存储、工具等多个类别
  • ✅ 所有镜像已验证可从本地 Harbor 拉取
  • ✅ 支持 ARM64 架构(Apple Silicon)

限制

  • ❌ quay.io 镜像无法缓存(需要 EU Harbor 配置代理)
  • ❌ ghcr.io 镜像无法缓存(需要 EU Harbor 配置代理)
  • ❌ 部分 registry.k8s.io 镜像 EU Harbor 未缓存

下一步

  1. 🔴 高优先级: 在 EU Harbor 配置 quay-proxy(解决 11 个镜像)
  2. 🟡 中优先级: 在 EU Harbor 配置 ghcr-proxy(解决 2 个镜像)
  3. 🟢 低优先级: 手动缓存剩余 registry.k8s.io 镜像

📂 相关文件

  • k8s-common-images.txt - 完整镜像列表(68 个)
  • cache-image.sh - 镜像缓存工具
  • direct-cache-failed-images.sh - 直接缓存失败镜像的脚本(需要网络访问)
  • CACHE-IMAGE-K8S-SUPPORT.md - registry.k8s.io 支持文档
  • CACHE-IMAGE-BUGFIX.md - 路径不一致 BUG 修复文档

报告生成时间: 2025-12-31 执行者: Kiro AI Assistant 状态: ✅ 部分完成(57.4% 成功率)