Shifter: 面向高性能计算的容器

容器技术是一种操作系统层的虚拟化技术。它通过命名空间和 Cgroup 进行资源的隔离和控制,共享操作系统内核,分享系统资源。相比虚拟机,容器提供了一种更轻量级的虚拟化技术,它具有更高的资源利用率和更快的执行性能。Docker 作为一种容器技术,引入了应用镜像管理机制,适应快速的软件开发,部署和维护,推动了容器技术的普及和发展。

Shifter 容器的介绍 用于高性能计算的容器

在高性能计算领域,应用软件通常有大量的系统依赖和复杂的环境配置:各种的软件包,不同版本的库和操作系统的发布版本等。这让系统的部署和维护都面临巨大的挑战。传统的虚拟化技术可以解决部署和维护的问题,但是由于在计算上增加了额外的虚拟化负载,无法最大化利用机器的物理资源用于有效计算。而容器技术可以解决这些问题。

Docker 的镜像管理机制可以帮助用户将复杂的软件环境打包,便于管理和维护。容器的轻量级隔离性增强了系统的安全,而不会降低系统的计算性能。尽管如此,Docker 容器在高性能计算领域的采用也存在一些问题。Docker 的资源管理功能与集群管理软件的功能有重叠,Docker 独立的后台管理进程和集群系统的进程管理功能也有冲突。这使得高性能集群系统中采用 Docker 有诸多不便。例如采集容器消耗的资源和对容器状态的控制,都需要进一步的集成到资源管理系统。而 Docker 的用户权限提升问题又给生产环境引入了不安全的因素。

Shifter 是为了利用容器技术的优势,同时解决 Docker 在高性能计算环境下的问题而产生。它是美国国家能源研究科学计算中心 (NERSC) 开发的开源容器技术。通过复用现有容器技术(Docker) 的系统镜像,给高性能计算应用提供更有效的容器解决方案。

Shifter 的体系结构

Shifter 由两部分组成:命令行工具 (shifter, shifterimg) 和镜像管理器 (image gateway) 后台进程。命令行工具负责管理镜像和容器操作。镜像管理器根据镜像管理操作的请求,负责容器镜像的查找,下载和维护。

当 shifterimg 发出下载镜像请求,镜像管理器将从 Docker Registry 下载镜像到本地网络文件系统。在任何一个挂载网络文件系统的机器上,shifter 加载对应镜像,启动容器,运行应用程序。如图 1 所示。

图 1. Shifter 体系结构

图 1. Shifter 体系结构

镜像管理进程的模块是 Shifter 提供服务的后台进程。它提供了镜像管理的基本功能,并对外提供服务。如图 2 所示,它的实现包括以下模块:

Restful API:提供管理服务的接口。

Image Manager:负责维护镜像数据。

Celery:管理和执行镜像下载任务。

相关数据库:用于存储管理和系统数据。

图 2. 镜像管理器体系结构

图 2. 镜像管理器体系结构

如图 2 所示,当接收到下载请求时,镜像管理模块查询本地数据库(MongoDB),如果请求镜像已经下载到本地存储,直接返回成功。如果尚未下载,镜像管理模块创建下载任务,交给 Celery 执行。Celery 创建任务,下载镜像后,将镜像文件解压。解压后的文件集合用于创建 squash 文件系统。Squash 文件系统是一种压缩格式的文件系统,可以有效减少文件存储占用大小。它作为一个单独文件存在,文件内部是一个包含了原始 Docker 镜像内部所有文件的根文件系统。

体系结构本身的设计为镜像管理进程提供了灵活的部署方式。例如图 2,系统 A 中的 Celery Worker 运行在可以直接访问网络文件系统的服务器节点。系统 B 中的 Celery Workers 运行在管理节点上,通过 SCP 将镜像文件拷贝到文件服务器上。这是一种更灵活的部署选择,但是因为数据重复拷贝,效率上会差一点。

镜像管理器是一种简单灵活的实现,它充分利用现有的第三方软件和库,例如 Celery,MongoDB,Redis,Squash 文件系统等。使用少量的功能逻辑代码,有效地实现了镜像的集中管理功能。松耦合带来部署的灵活性、简单性,确保了系统的有效稳定。

图 3. Shifter 容器体系结构

图 3. Shifter 容器体系结构

Shifter 容器主要依赖于 Linux 提供的系统接口。如图 3 所示, Shifter 容器构建在 kernel 上,应用程序运行于容器里的根文件系统环境。当 Shifter 构建一个容器时:

建立自己的文件系统命名空间(Linux namespace)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/59069fa37b5a2447f0353d5e4ca3b8d5.html