You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Kubernetes中使用DinD时实现容器镜像缓存的可行方案问询

K8s CI动态代理镜像缓存方案选型问题

背景

我们使用自建K8s集群运行CI动态代理,部分工作负载在Docker容器中执行,以此确保开发机与CI系统的构建流程一致。但每次构建前需拉取合计10GB的镜像,导致从Pod启动到构建开始的耗时较长,因此希望引入镜像缓存来缩短该时长。

现有方案分析

1. 多DinD方案

  • 每个Pod包含一个DinD sidecar容器和一个CI代理容器
  • DinD对接工作节点上的containerd,CI代理通过设置DOCKER_HOST=localhost访问DinD
  • /var/lib/docker挂载为emptyDir: {},每个新Pod均从零开始,无镜像缓存,需重复拉取镜像
  • 不足:无法利用缓存,耗时问题未得到解决

2. 单DinD方案

  • 运行单个DinD容器的Pod,多个CI代理Pod通过其Service进行连接
  • DinD的存储目录/var/lib/docker采用hostPath类型的PV和PVC挂载到节点磁盘,实现镜像缓存,大幅缩短启动耗时
  • 不足:单Daemon无法支持多个CI代理启动同名容器,容器隔离性不满足需求

核心需求

需找到满足以下两个条件的方案:

  • 每个CI代理Pod具备镜像缓存能力
  • 同名容器可实现运行隔离

备选方案的顾虑

我们考虑过挂载各工作节点的/run/containerd/containerd.sock,利用现有镜像缓存,并通过kube-fledged预拉取所需镜像,但担心CI代理Pod中的误操作(如执行docker prune)会干扰K8s平台的containerd镜像,进而破坏集群。


内容的提问来源于stack exchange,提问作者Jakub S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:33:24