Docker K8s 优化镜像以减少加载时间

Ben*_*Odr 4 linux amazon-web-services docker kubernetes

我们有很多 docker 镜像需要上传到 k8s,它可以工作,但是当我们启动一个新节点时,这个过程可能需要很多时间。

我们尝试更改图像以使用“多阶段”构建,但是这个过程仍然需要很多时间,而且我们没有看到新节点的启动时间发生重大变化。

现在我们尝试以下操作:(但是我们不确定我们会看到多大的影响......)

  1. 尝试(尽可能多地)使用相同的 docker 图像 from,例如所有使用 alpine 的图像使用完全相同的版本(3.11)而不是一些使用版本3.10和一些3.10.1和一些3.11等等,这将阻止重用机制码头工人到已经兑现的层......

  2. 减少层数,将RUN命令组合为一个而不是多个。(我们需要为许多 docker 文件执行此操作...),不确定 docker 机制将如何帮助实现我们的目标

所有这些改变使用相同版本和减少层的过程可能需要很多时间,我们是在浪费时间还是在那里,或者这是可以减少加载时间的东西?还有其他想法可以帮助我们吗?

我们有很多基于 Golang、NodeJS、java 等的 docker 镜像。

Gur*_*uru 6

所以你在正确的轨道上

  • 使用最小层
  • 重用层
  • 使用相同的标签来缓存图层
  • 使用高山或苗条的图像
  • 使用多阶段构建

我认为你不能进一步缩小尺寸。试试docker squash但这不会有太大帮助。

那么如何更快地启动节点呢?

  • 是否可以在其中烘焙包含所需图像层的节点图像?
  • 是否可以在您的节点旁边设置一个 docker 注册表?以便在没有网络延迟的情况下更快地拉取图像
  • 是否可以在运行时将库保留在映像之外并挂载库?(例如,如果您的代码是 nodejs 代码,请将 npm 保留在容器之外并在运行时挂载 npms 目录)
  • k8s 可以运行除 docker 镜像之外的其他镜像。像cri-o。您可以构建 cri-o 图像吗?它们很轻。