哈希公司的Packer和LinuxKit之间的区别

9

我使用HashiCorp Packer来构建虚拟机镜像。

但是我想知道LinuxKit是否也可以做同样的事情,我的意思是构建烤制的虚拟机镜像,唯一的区别在于更加容器化和内核中心化。

想要了解这两者工作方式的确切区别和使用情况。

同时,是否可以使用packer和linuxkit进行任何用途。


我认为最大的区别在于LinuxKit中的所有内容都作为容器运行。即使是init或DHCP也是如此。因此,您不需要使用packer安装软件包,而是将内核和一堆容器打包在一起。除此之外,两者做的事情基本相同。 - odk
1个回答

23

我广泛使用过两者(声明:我是LinuxKit的志愿维护者)。我使用Packer很长一段时间,几乎把我在Packer中做的所有工作都转移到了LinuxKit(lkt)中。

原则上两者都是开源工具,用于生成可以运行的操作系统映像。实际上,大多数人使用它来生成可以在vbox、AWS、Azure、GCR等虚拟机环境中运行的映像,但也可以生成在裸机上运行的映像,这也是我所做的。

Packer因为出现较早,具有更广泛的配置器、构建器、插件等。它试图尽可能不持有任何特定观点,在任何地方构建,运行您想要的任何安装程序。

LinuxKit几乎将所有的进程和连续服务services都运行在容器中,即使在启动操作系统映像的init阶段也是通过从OCI镜像中复制文件进行配置。

LinuxKit对如何运行和构建事物的强烈观点在某些方面可能会限制,但也是解放的。

我认为最重要的区别如下:

  1. lkt从零开始构建到您需要的最小要求;Packer从现有的操作系统基础上构建。
  2. lkt的安全攻击面更小,因为它不是从现有的操作系统开始构建,而是从零开始构建。
  3. lkt映像可以显著缩小,因为您只添加确切需要的内容。
  4. lkt构建在本地运行。Packer基本上会启动一个虚拟机(vbox、EC2等),运行一些基本映像,根据您的指令进行修改,然后将其保存为新映像。lkt仅通过下载和复制文件来操纵OCI映像以创建新映像。

我可以使用Packer和LinuxKit获得1-3差异的相同结果,尽管lkt要少得多。例如,我为LinuxKit贡献了getty软件包,以便在哪个名称空间中分离和控制启动getty的时间/方式。在构建完整的操作系统上的packer镜像中分离和控制这一点所需的工作量将更大。tpm软件包也是如此,等等。

但是,在我看来,最大的区别在于第4步。因为Packer启动了虚拟机并在其中运行命令,所以速度慢得多,调试起来也更加困难。在lkt中,我可以在30秒内构建完成一个需要我在Packer中花费10多分钟才能构建完成的相同packer镜像。取决于是否下载OCI映像以及您正在进行的操作的复杂程度,您的情况可能有所不同,但对我而言,它确实快了一个数量级。

同样地,逐步调试或查找错误,在远程VM中运行的过程比在本地命令lkt build中更加困难:

正如我所说,这些都是我的个人意见,但那就是我将几乎所有的构建工作转移到了lkt的原因,并且在团队要求我加入优秀的维护人员之一时,我表示同意。

同时,我非常感激HashiCorp提供的出色工具集。Packer为我服务得很好,现在LinuxKit对我来说更好了。


lkt build是用来生成可以共享的QEMU虚拟机镜像吗?还是因为假设了特殊的UEFI固件等原因,它们总是依赖于lkt run - undefined
1
完全不是。它生成标准的镜像。输出格式可以是initrd+kernel,或者vmdk,或者aws等等。如果你在qemu中运行并且想要UEFI引导,你可能需要一个UEFI固件,但这对于任何镜像都是适用的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接