Unikernels是使用库操作系统——维基百科——构建的专门的单地址空间机器映像
Unikernels承诺在启动和运行时使用轻量级、安全、简约的图像。它们假定在安全的虚拟机监控程序中运行,因此可以消除现代操作系统的许多复杂性。主要有两种方法:
剥离,即简化现有内核以减少其开销并删除不必要的功能
尽管在2015-2016年前后有很多炒作,但unikernels没有';不要像容器或库伯内特那样大受欢迎。
作为虚拟机运行意味着应用程序可以';不要像在Linux容器中那样共享一些资源(未使用的RAM)
安全性单内核最有力的理由之一是减少了攻击面。而那';这很难反驳,同样的方法会使调试更加困难。类似于从容器内部调试从头开始的容器。虽然这可以通过在调试和监视工具中烘焙来缓解,但这与整个想法背道而驰。
轻量级是unikernels的另一个有力论据:低开销和小内存占用。另一方面,你需要为你的虚拟机分配一定数量的资源,这可以';不能像Linux容器一样与其他应用程序共享。因此,您可能无法像使用容器那样进行扁平封装。
性能虽然没有系统调用切换开销的简单内核确实提高了某些操作的性能,但它';目前还不清楚这在多大程度上适用于系统调用不适用的应用程序';t瓶。此外,高性能是有代价的,因此对于一部分应用程序来说,这只是一个可接受的折衷方案。
调试/监控随着eBPF的出现,内核的可视性显著提高,因此标准也提高了。Unikernels需要为大规模采用提供一个可行的替代方案。
调度容器现在有几个用于调度的选项(Kubernetes、Nomad等)。使用类似OpenStack的东西调度虚拟机需要进行大量改进,才能达到特定于容器的解决方案所提供的易用性/速度水平。这可以通过鞭炮之类的东西来缓解,这些东西可以与库伯内特斯结合,但是这些天堂';我也不太受欢迎。
兼容性容器对现有软件进行打包,并在未归档的情况下运行。Unikernels需要与应用程序一起编译内核。有一些解决方案可以生成用于调试的Linux二进制文件和用于生产的内核映像。保持单内核(大部分)Linux兼容是可能的,但需要一些胶水。
目前,我能找到的仅有两种商业支持是Unikraft和NanoOS。如果你';如果你想学习自己制作,可以去看看圣安德鲁斯大学(St Andrews university)教过的StardustOS,它为Xen提供了一个最小的内核';很容易浏览。