云计算百科
云计算领域专业知识百科平台

【云原生技术】但是我有3个镜像是10G这么大,其他的300MB,并行推送会影响吗?

会影响,而且很可能拖慢整体:docker push 基本受 上行带宽/registry 吞吐 限制,3 个 10GB 镜像一并跑会把带宽占满,导致其他 300MB 的小镜像也被“挤”得很慢,甚至触发超时/限流。

更好的做法是:分级并发(大镜像低并发、小镜像高并发),或先推小的再推大的。

推荐策略

1) 大镜像串行(1 并发),小镜像并行(例如 4~8 并发)

  • 先把 300MB 的快速推完,提升总体完成时间与成功率
  • 10GB 的同时只推 1 个(或最多 2 个,视带宽)

2) 如果必须混跑:最多同时 1 个大镜像 + N 个小镜像

这样既不让大镜像完全独占,也不把链路打爆。

一个简单可用的做法(按文件大小分组)

假设 tar 在目录里(大于 2GB 认为“大”),先小后大:

# 小包并行推(可调 -P)
find . -maxdepth 1 -name "*.tar" -size -2G -print0 |
xargs -0 -n 1 -P 6 -I {} bash -lc '
set -e
out=$(docker load -i "{}")
img=$(echo "$out" | awk "/Loaded image:/ {sub(\\"Loaded image: \\",\\"\\",$0); print $0}")
docker push "$img"
'

# 大包串行推
find . -maxdepth 1 -name "*.tar" -size +2G -print0 |
xargs -0 -n 1 -P 1 -I {} bash -lc '
set -e
out=$(docker load -i "{}")
img=$(echo "$out" | awk "/Loaded image:/ {sub(\\"Loaded image: \\",\\"\\",$0); print $0}")
docker push "$img"
'

如果你的 docker load 输出没有 Loaded image:(只有 image ID),这段需要改成“用清单映射 tar->tag”的方式。

并发怎么选(经验值)

  • 上行带宽一般:小镜像 -P 4~8;大镜像 -P 1
  • registry 有限流/负载小:整体并发降到 2~4
赞(0)
未经允许不得转载:网硕互联帮助中心 » 【云原生技术】但是我有3个镜像是10G这么大,其他的300MB,并行推送会影响吗?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!