Singularity介绍

Singularity是一个容器平台,使用Singularity可以将程序和依赖环境打包,然后在多中环境下运行。 你可以在你的laptop上build Singularity容器,然后在HPC集群上,在大学的或者公司的集群上,在一个服务器上, 在cloud中,在工作站等各种环境中运行它。你的容器文件是一个独立的文件,使用容器你不需要担心怎么在不同的OS上安装软件。

为什么用Singularity

Singularity最初是为了简单、便捷的在HPC集群上运行复杂的应用开发的。 最早是由劳伦斯伯克利国家实验室开发,其是一个开源项目,针对用户和开发者提供了友好的社区。 Singularity的使用领域也扩找到工业和科学的很多领域。

现在市面上已经有很多的容器平台,但是Singularity有一下特殊性:

  • 很好的可重复生产性和安全性,支持容器签名,使用制度的容器镜像格式,在内存中解密。

  • 强调集成而不是隔离,很容易使用集群中的GPU,高速网络和并行文件系统。

  • 便捷计算,一个容器就是一个SIF文件,可以很方便的共享和传递。

  • 简单,有效的安全模式。用户在容器内和容器外是同样的用户,不能获取额外的特权。 更多请参考 Singularity安全性.

为什么使用容器

Unix操作系统分为两部分:内核空间和用户空间。 内核空间和硬件交互,提供核心的系统功能,而用户空间是我们大部分人比较熟悉的部分, 比如应用,库和服务等。

传统情况下,一个操作系统是一个固定的内核空间和用户空间的组合,如果你访问安装有CentOS的机器, 你不能在上面安装Ubuntu的软件。另外安装一个软件的多个版本也会很困难。

容器的出现,将用户空间变成了可替换的部分。这就是说,Linux系统的用户空间,包括程序,定制化配置, 运行环境等都可以变成独立部分。容器将你需要的内容打包成一个独立的,可验证的文件。

现在软件开发者可以在他们软件需要的OS上开发软件, 然后将他们的软件和运行环境打包成容器就可以在各种操作系统上执行, 不需要在操作系统上安装各种依赖包。

使用场景

BYOE: Bring Your Own Environment!

工程师的研究计算工作通常是一个复杂和迭代的过程, 另外他们通常在一个共享的,灵活度不高的生产环境上进行研究,使用Singularity就可以提供灵活的运行环境。

另外,学校通常也需要提供标准化的,配置好的开发环境给学生, 以便他们能快速上手。

可重复性的科学研究

Singularity将程序,库,数据和脚本打包成一个容器,这个容器可以分发给其他人,他们可以直接在各种版本的linux上运行。

商业软件支持

有些商业软件只能运行在特定的Linux版本上,那么如果这个软件安装在满足需要的Linux版本的容器内。 那么软件就可以在各种host上运行。

另外,Singularity模糊了容器和host的界限,你可以在容器中使用host上的home目录,容器中的软件可以 直接访问自己原来的数据,很方便集成到原来的流程中。

运行环境存档

在一些政府或者基金会资助的研究类项目中,当学生完成一部分的工作后,他们可能被分配做其它事情,或者 毕业离校,因此将他们的工作打包成一个容器保存是很有必要的。

老系统上的老代码

比如一个例子,据我所知,有一个Linux OS发行版在15年前已经结束支持,但是到现在为止,这个发行版还在用于生产环境, 这是因为用户的软件是在这个环境上开发的,不能换发行版。 Singularity容器可以支持那个发现版,然后容器可以在新的操作系统上运行。

原来软件太复杂

有许多软件太复杂,需要花费很多时间将它们升级到支持新的OS。 比如气象领域的软件,这时候可以将它们打包成容器运行在新的OS上。

复杂的工作流

将一个复杂的工作流打包成容器将简化研究结果的分发。 其他的科学家可以基于自己完成的工作继续下去。