hashicorp 加壳器与 linuxkit 之间的区别

Difference between hashicorp packer vs linuxkit

我已使用 hashicorp packer 构建烘焙 VM 映像。

但想知道 linuxkit 也做同样的事情我的意思是构建烘焙的 VM 映像,唯一的区别是更加以容器和内核为中心。

想知道这两者的工作原理和用例之间的确切区别。

也可以有同时使用 packer 和 linuxkit 的用例。

我已经相当广泛地使用了两者(披露:我是 LinuxKit 的志愿维护者)。我使用 packer 有一段时间了,并将我在 packer 中所做的几乎所有工作都转移到了 LinuxKit (lkt)。

原则上,两者都是开源工具,目的相同:生成可以 运行 的 OS 图像。实际上,大多数将它用于 vbox、AWS、Azure、GCR 等上 运行 的 VM 映像,但你可以生成一个在裸机上 运行 的映像,我也这样做过。

Packer 较老,拥有更广泛的供应商、构建器、插件等。它试图做到基础相当广泛且不固执己见。构建无处不在,运行 任何你想要的安装。

LinuxKit 运行几乎所有东西 - onboot 进程和连续 services - 在一个容器中。甚至 init 阶段 - OS 映像将被引导 - 也是通过从 OCI 映像复制文件来配置的。

LinuxKit 关于如何 运行 和构建事物的强烈意见在某些方面可能是限制性的,但也是解放性的。

在我看来,最重要的区别如下:

  1. lkt 从头开始​​构建 up 到您需要的最低限度;数据包从 一个现有的 OS 基础构建
  2. lkt 的安全攻击面将更小,因为它不是从现有的 OS 开始的,而是什么都没有。
  3. lkt 图像可以小得多,因为您只添加您需要的内容。
  4. lkt 在本地构建 运行。 Packer 本质上是启动一个 VM(vbox、EC2 等),运行s 一些基本映像,根据您的说明修改它,然后将其保存为一个新映像。 lkt 只是通过下载和复制文件来创建新图像来操作 OCI 图像。

我可以使用 Packer 和 LinuxKit 获得相同的差异 1-3 的最终结果,尽管 lkt 的工作要少得多。例如。我贡献了 getty 包给 LinuxKit 来分离和控制 when/how getty 被启动,以及在哪个命名空间。在完整 OS 构建的打包器映像中分离和控制它的工作量会困难得多。 tpm 包也一样。等等

不过,IMO 最大的区别在于第 4 步。因为 Packer 会启动一个 VM 并在其中执行 运行s 命令,所以它要慢得多并且更难调试。需要我 10 多分钟才能构建的相同打包器映像在 lkt 中可能需要 30 秒。您的里程可能会有所不同,具体取决于是否下载了 OCI 图像,以及您正在做的事情有多复杂,但对我来说确实快了一个数量级。

类似地,逐步调试或发现错误,运行宁、调试和重建,在 运行s 在远程 VM 中的过程中要比在远程 VM 中困难得多本地命令:lkt build.

正如我所说,意见是我自己的,但这就是我将几乎所有构建工作转移到 lkt,做出贡献并在团队要求时同意加入优秀维护者团队的原因。

同时,我非常感谢 HashiCorp 提供的出色工具集。 Packer 为我服务得很好;现在,LinuxKit 更好地为我服务。