高性能容器之Apptainer

news/2024/12/2 13:11:50/

1.Apptainer简介

Apptainer是一个开源容器平台,旨在简单,快速, 和安全。有许多容器平台可用,但 Apptainer 的设计 便于在共享系统和高性能计算 (HPC) 中使用 环境。它的特点是:

  1. 不可变的单文件容器映像格式,支持加密 签名和加密。
  2. 默认情况下,集成高于隔离。轻松利用 GPU,高速 网络,群集或服务器上的并行文件系统。
  3. 计算的移动性。单文件 SIF 容器格式易于运输 并分享。
  4. 简单有效的安全模型。您是容器内的同一用户 作为外部,并且无法通过以下方式获得主机系统上的其他权限 违约。

2.Singularity与Apptainer的区别

Singularity已经成为一个成熟的开源项目,因为我们已经超越了该项目的所有原始设计目标。是时候将项目提升到一个新的成熟水平了。Singularity项目将正式进入Linux基金会,立即生效。作为此举的一部分,为了与其他同名项目和商业产品区分开来,我们将该项目重命名为“Apptainer”

2.1版本区别:

Apptainer的第一个版本将是1.0,它将存在于 https://github.com/apptainer/apptainer 的新存储库中。Singularity 存储库已移动 存储库已移至 https://github.com/apptainer/singularity 该存储库将作为存档保留,并在 Apptainer 的第一个版本后设置为只读。

2.2Sylabs仍然有一个奇点,Apptainer与此有什么关系?

当Sylabs分叉Singularity项目时,他们选择不重命名他们的分叉。这在社区中造成了相当大的混乱,而且随着时间的推移,这种混乱只会变得更糟。我们决定在我们自己之间修复它,以接受品牌重塑的打击,这将解决混淆,并允许Sylabs有权继续在其商业产品线中使用Singularity名称。

2.3向后兼容性

Apptainer 将作为命令行链接提供,并将尽可能多地维护 CLI 和环境功能。从用户的角度来看,与Singularity几乎没有什么变化。

2.4Sylabs会重新加入Apptainer项目吗?

我们当然希望如此,但这取决于他们。像任何其他组织一样,欢迎他们向Apptainer提交PR,随着时间的推移,他们可能会被考虑参加TSC。理想情况下,Sylabs 会将 Apptainer 视为他们的上游来源,为这个社区贡献 PR,然后为他们自己的商业产品拍摄这个项目的快照,并在 Apptainer 基础上添加他们自己的增值(例如库、远程构建器等)。

2.5官方文档

Singularity官方文档:GitHub - apptainer/singularity: Singularity has been renamed to Apptainer as part of us moving the project to the Linux Foundation. This repo has been persisted as a snapshot right before the changes.

Apptainer官方文档:https://github.com/apptainer/apptainer

3.Docker与Apptainer的区别

Apptainer是一个相对较新的容器软件,相对于 docker 来说,它不需要 root 权限,因此更符合科研应用的场景(因为共享服务器中普通用户通常不会有root权限)。

Docker

Apptainer(使用Singularity的话,将命令中的apptainer替换为singularity)

镜像

无(Apptainer没有镜像的概念,用户创建和运行的都是一个个容器)

获取镜像(容器)

docker pull busybox:latest

apptainer pull ./busybox.sif docker://busybox:latest或者apptainer build ./busybox.sif docker://busybox:latest

容器

有(Apptainer容器有两种存在形式:SIF和sandbox。SIF只读,主要用来执行用户程序;sandbox可修改,可用来开发和创建新容器)

查看运行的容器

docker ps

apptainer instance list

运行容器

docker run busybox ping www.baidu.com

apptainer exec busybox.sif ping www.baidu.com

挂载目录

-v host_path:container_path

-B或者--bind

交互式运行容器

docker run -it busybox

apptainer shell busybox.sif

4.相对Singularity容器Apptainer新增功能

4.1库API注册表

Apptainer 使用户能够使用库 API 容器注册表将容器推送到专门为 SIF 映像并拉取其他人创建的 SIF 映像。

许多库 API 注册表需要身份验证才能执行操作 例如推送容器映像或拉取潜在的私有容器映像。 命令组控制库 API 的身份验证 登记处。查看有关如何使用远程端点添加和登录的说明。remote

通过身份验证后,即可推送容器!

具体操作可查看文档:Library API Registries — Apptainer User Guide main documentation

4.2限制容器资源

限制容器消耗的资源通常很有用,例如 以允许容器仅使用 1 个 CPU 或系统上 50% 的 RAM。 尽管在 HPC 群集上,使用作业计划程序启动容器是很常见的 可以为每个作业设置限制,以下方案是示例,其中更多 直接控制很有用:

  1. 在 HPC 作业中运行多个容器化应用程序时,每个应用程序 作业中的容器应具有不同的资源限制。
  2. 在工作站上测试 HPC 代码时,避免过多的 CPU/RAM 使用率 使桌面环境和其他应用程序停止运行。
  3. 当基准测试代码不提供限制数量的内部方法 它使用的 CPU 数量。

有三种方法可以将限制应用于运行容器 应用器:

  1. 使用下面所述的每资源命令行限制标志。
  2. 使用该标志应用的文件 定义资源限制。--apply-cgroupscgroups.toml
  3. 使用外部工具(如工具)应用限制,然后叫systemd-runapptainer

Limiting Container Resources — Apptainer User Guide main documentation

4.3应用程序检查点

检查点功能允许用户透明地保存 容器化应用程序在执行时,然后从 保存的状态。这对于需要最大限度地减少短暂影响的用例很有价值 环境故障、随机硬件故障或作业预处理。

Checkpoint Feature — Apptainer User Guide main documentation

4.4Singularity兼容性

由于社区决定将该项目转移到 Linux 基金会中,因此 对项目名称更改的限制,这一直是 项目,以尽量减少对用户群的影响。如果您在制作时遇到问题 搬家,请与社区联系,以便 我们可以为您提供帮助!

Singularity Compatibility — Apptainer User Guide main documentation

5.Apptainer安装

5.1源码安装

5.1.1安装系统依赖

必须先将开发工具和库安装到主机上。在基于 Debian 的系统上,包括 Ubuntu:

# Ensure repositories are up-to-date
sudo apt-get update
# Install debian packages for dependencies
sudo apt-get install -y \build-essential \libseccomp-dev \pkg-config \uidmap \squashfs-tools \squashfuse \fuse2fs \fuse-overlayfs \fakeroot \cryptsetup \curl wget git

在 CentOS/RHEL 上:

# Install basic tools for compiling
sudo yum groupinstall -y 'Development Tools'
# Ensure EPEL repository is available
sudo yum install -y epel-release
# Install RPM packages for dependencies
sudo yum install -y \libseccomp-devel \squashfs-tools \squashfuse \fuse-overlayfs \fakeroot \/usr/*bin/fuse2fs \cryptsetup \wget git

在 SLE/openSUSE 上

# Install RPM packages for dependencies
sudo zypper install -y \libseccomp-devel \libuuid-devel \openssl-devel \cryptsetup sysuser-tools \gcc go

5.1.2安装go代理

Apptainer 是用 Go 编写的,可能需要比现在更新的 Go 版本 在分配的存储库中可用。我们建议安装 官方二进制文件中的最新版本的 Go。

首先,将 Go tar.gz 存档下载到 ,然后将存档解压缩到 。/tmp/usr/local

注意:如果要从旧版本更新 Go,请确保在重新安装之前删除 /usr/local/go。

export GOVERSION=1.19.3 OS=linux ARCH=amd64  # change this as you need
wget -O /tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz \https://dl.google.com/go/go${GOVERSION}.${OS}-${ARCH}.tar.gz
sudo tar -C /usr/local -xzf /tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz

最后,添加到环境变量:/usr/local/go/binPATH

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

6.安装Apptainer

6.1克隆存储库

随着 Go 模块的采用,您不再需要克隆容器 存储库到特定位置。

在您选择的位置克隆存储库:git

git clone https://github.com/apptainer/apptainer.git
cd apptainer

默认情况下,您的克隆将位于开发所在的分支上 的Apptainer发生。 要构建特定版本的 Apptainer,请在编译之前检查发布标记, 例如:main

git checkout v1.1.8

编译应用器,可以使用以下命令配置、构建和安装 Apptainer:

./mconfig
cd ./builddir
make
make install

就是这样!现在,您可以通过运行以下命令来检查您的应用器版本:

apptainer --version

该命令接受可以修改生成和安装的选项 的申请者。例如,要在不同的文件夹中构建并设置 将前缀安装到其他路径:mconfig

./mconfig -b ./buildtree -p /usr/local

如果要安装 setuid(以前是默认安装),请使用该选项。--with-suid

有关可用选项,请参阅 的输出。./mconfig -h

6.2tar方式

下载apptainer压缩包

VERSION=1.1.8
wget https://github.com/apptainer/apptainer/releases/download/v${VERSION}/apptainer-${VERSION}.tar.gz

解压并安装

tar xf apptainer-${VERSION}.tar.gz
cd apptainer-1.1.8
./mconfig
若要指定安装路径和支持suid:
(./mconfig --with-suid --prefix=/public/home/cluslab/software)
cd ./builddir
make
make install


http://www.ppmy.cn/news/79511.html

相关文章

Flink入门

目录 一、Flink简介 二、为什么选择Flink 三、与传统数据处理架构相比 四、Flinik批处理数据基础代码 五、Flink流处理基础代码 一、Flink简介 Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数 据流进行状态计算。 二、为什么选择Flink 流数据更…

00后是真卷不过,工作没两年,跳槽到我们公司起薪20K都快接近我了

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…

Vue之数据代理(getter、setter)

文章目录 前言一、数据代理1.Object.defineProperty()2.数据代理讲解 总结 前言 Object.defineProperty 数据代理 一、数据代理 1.Object.defineProperty() (1)实例对象可以通过Object.defineProperty()方法来添加属性,但是添加的属性默认…

win7下java环境搭建以及jdk环境变量配置

很多人在搭建页游、手游时候经常遇到JAVA闪退,基本都是环境变量或者路径错误导致的。本章节主要讲解在win7系统环境下,java环境变量配置方法,java环境配置正确,才可以对apk程序进行反编译运行页游手游。其他操作系统环境变量大同小…

react native 集成腾讯语音合成TTS(iOS)

一、前言 从我去年集成好安卓的代码,已经过去了大半年了,sdk的版本也从1.5升级到了2.0,近期终于完成了ios的集成,希望可以帮助到大家。本人)Objective C写的不好,代码可能不是那么大的完备,仅作参考学习。 二、下载sdk 需要登陆腾讯云,找到语音技术,下载sdk 文档链…

旋翼无人机常用仿真工具

四旋翼常用仿真工具 rviz: 简单的质点(也可以加上动力学姿态),用urdf模型在rviz中显示无人机和飞行轨迹、地图等。配合ROS代码使用,轻量化适合多机。典型的比如浙大ego-planner的仿真: https://github.c…

Redis三种模式——主从复制、哨兵模式、集群

目录 一、Redis模式二、Redis主从复制2.1 主从复制概述2.2 主从复制2.3 Redis主从复制过程2.4 搭建Redis主从复制2.4-1 环境部署2.4-2 安装Redis2.4-3 修改 Redis 配置文件(Master节点操作)2.4-4 修改 Redis 配置文件(Slave节点操作&#xff…

ES 查询优化

1、ES调优手段 1.1、设计阶段调优 ES数据区分热、温、冷三个阶段 ES索引按月滚动生成 mapping设置合理的数据类型是否需要分词 使用别名管理索引??? 1.2、数据写入优化 1> 单条写入改为多条数据写入 2> 自动生成ID 3> 索引刷盘时间,…