首页 > 解决方案 > 在部署 Docker 容器(在 Kubernetes 中)时置换静态目录结构的最佳实践?

问题描述

我有一个基本图像和几个完全正交的完全静态的“维度”映射到数据目录的叠加层,每个目录都有几个选项,我想置换这些选项以在我的部署中生成最终容器。作为一个退化的示例,基本映像 (X) 在部署时将需要 (A,B,C)、(P,D,Q) 和 (K,L,M) 中的每一个。我现在正在做的是为我最终实际需要的每个排列构建单独的图像:例如 XADM、XBDK 等。问题是随着静态数据覆盖的维度数量的增加以及每个维度内的选择数量得到更大,我遇到了严重的组合爆炸问题——我们的 CI/CD 系统可能需要 10 分钟来构建每个图像(一些叠加层很大),并且由于它是最常更改的基础图像,因此图层不会缓存好。

思念至今:

  1. 将每一层(ABCPDQKLM)生成为一个单独的容器,该容器填充一个卷,然后由我的每个 X 容器安装。这很好,尽管我不需要层是可写的,也不想为与感觉应该是多余的卷相关的持久存储付费。
  2. 将我的图层重新排序为最慢到最快的变化。这样做我可以得到一些改进,但我仍然遇到组合问题:我可能仍然需要构建我需要的所有组合,但至少我的 CI/CD 构建时间会得到改善。我认为这会导致整体层缓存较差,但以空间换时间可能是合理的,每个租户的结果仍然很好,并且在部署期间不会产生任何卷存储。

我对任何一个选项(或我当前的解决方案)都不满意。任何想法都会受到欢迎。

编辑/问题:

  1. “静态”表示只读,但实际上,A/B/C 覆盖可能是每个 100MB 的目录结构,要挂载/存在于容器文件系统的特定位置。在任何情况下,它都是基础映像中的程序将要使用的数据(甚至是内存映射的!),因此它至少需要非常有效地缓存在每个将要使用它的 CPU 附近. 我喜欢将数据烘焙到容器中的性能特征,但也许我应该更多地信任存储层,以使数据在真实 CPU 附近正确缓存/复制。这样做意味着在注册表空间费用与 PV 存储费用之间进行权衡,但这可能是一个次要考虑。
  2. 基本上,每个“维度”都是一种经过训练的机器学习模型。我需要通过选择正确的训练模型集来组合维度,以适应每个生产租户所需的域。

标签: dockerkubernetesgoogle-kubernetes-engine

解决方案


推荐阅读