singularity
容器技術(shù)是一種以應(yīng)用軟件為中心的虛擬化技術(shù)。以應(yīng)用軟件為單元,將軟件及所有的依賴打包成容器鏡像,打包后的容器鏡像可直接拷貝到不同的Linux主機(jī)上運(yùn)行。通過容器技術(shù),可以很好的解決安裝軟件時(shí),依賴庫的安裝問題、軟件環(huán)境的隔離以及軟件環(huán)境的移植問題。
Singularity為勞倫斯伯克利國家實(shí)驗(yàn)室開發(fā)專門用于高性能計(jì)算場景的容器技術(shù),Singularity完全基于可移植性進(jìn)行虛擬化,更加輕量級,部署更快,Singularity目前被廣泛地各高性能計(jì)算中心。
通過Singularity來滿足作業(yè)運(yùn)行的軟件環(huán)境,首先是創(chuàng)建或者獲取軟件鏡像,再將創(chuàng)建好的軟件鏡像上傳到集群上運(yùn)行;
通過Singularity創(chuàng)建軟件鏡像,需要在有root權(quán)限的Linux主機(jī)上,或者在配置好fakeroot的Linux主機(jī)上以“fakeroot”的身份進(jìn)行。
下面將介紹如何在有root權(quán)限的主機(jī)上安裝Singularity,以及如何使用Singularity創(chuàng)建軟件鏡像;
同時(shí)介紹如何在已配置好fakeroot節(jié)點(diǎn)上,通過Singularity構(gòu)建軟件鏡像。
首先介紹在擁有root權(quán)限的個(gè)人主機(jī)上安裝Singularity:
# 安裝依賴
yum install -y gcc libuuid-devel squashfs-tools openssl-devel make
# 安裝go
export VERSION=1.17.2 OS=linux ARCH=amd64
wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz
tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz
rm -f go$VERSION.$OS-$ARCH.tar.gz
echo 'export PATH=/usr/local/go/bin:$PATH' >> /etc/profile
source /etc/profile
# 安裝singularity
export VERSION=3.9.2
wget https://github.com/sylabs/singularity/releases/download/v${VERSION}/singularity-ce-${VERSION}.tar.gz
tar -xzf singularity-ce-${VERSION}.tar.gz
cd singularity-ce-${VERSION}
./mconfig --prefix=/opt/singularity/${VERSION}
cd builddir/
make && make install
echo "export PATH=/opt/singularity/${VERSION}/bin:\$PATH" >> /etc/profile
接著介紹如何使用Singularity部署軟件鏡像,以軟件molspin為例:
# 拉取docker鏡像創(chuàng)建sandbox格式容器
singularity build --sandbox molspin docker://centos:7.6.1810
# 通過交互的方式進(jìn)入容器鏡像,進(jìn)行軟件的安裝
singularity shell -w molspin
# 安裝依賴
yum install epel-release centos-release-scl -y
yum install devtoolset-7 armadillo-devel -y
source /opt/rh/devtoolset-7/enable
echo "source /opt/rh/devtoolset-7/enable" >> /environment
# 注冊并下載MolSpin安裝包, 解壓后進(jìn)入
unzip -d molspin molspin-v1.0.120819.zip
cd molspin && make
cp molspin /usr/local/bin/
# 在安裝軟件完后退出鏡像
exit
# 生成sif文件
singularity build molspin.sif molspin/
# 將創(chuàng)建好的軟件鏡像上傳到高性能計(jì)算集群,加載singularity軟件環(huán)境
# 運(yùn)行鏡像,其中example.msd為輸入文件
singularity exec molspin.sif molspin -p 2 -a example.msd
SIF和sandbox兩種格式的鏡像是可以相互轉(zhuǎn)換的;
# 1. 將SIF格式的容器轉(zhuǎn)換成sandbox; singularity build --sandbox centos76 centos76.sif # 2. 將sandbox容器鏡像轉(zhuǎn)化成SIF格式; singularity build centos76.sif centos76
同時(shí),集群上部署了節(jié)點(diǎn)專門用于構(gòu)建Singularity軟件鏡像,用戶可以在該節(jié)點(diǎn)上使用fakeroot安裝軟件鏡像,具體方式如下:
# 登錄專用節(jié)點(diǎn)
ssh <user_id>@162.105.133.209
# 拉取docker鏡像創(chuàng)建sandbox格式容器
# 創(chuàng)建容器時(shí)加入?yún)?shù)--fakeroot
singularity build --fakeroot --sandbox molspin docker://centos:7.6.1810
# 通過交互的方式進(jìn)入容器鏡像,修改容器鏡像
# 加入?yún)?shù)--fakeroot
singularity shell --fakeroot -w molspin
# 安裝依賴
yum install epel-release centos-release-scl -y
yum install devtoolset-7 armadillo-devel -y
source /opt/rh/devtoolset-7/enable
echo "source /opt/rh/devtoolset-7/enable" >> /environment
# 注冊并下載MolSpin安裝包, 解壓后進(jìn)入
unzip -d molspin molspin-v1.0.120819.zip
cd molspin && make
cp molspin /usr/local/bin/
# 在安裝軟件完后退出鏡像
exit
# 生成sif文件
singularity build --fakeroot molspin.sif molspin/
# 運(yùn)行鏡像,其中example.msd為輸入文件
singularity exec molspin.sif molspin -p 2 -a example.msd
使用fakeroot創(chuàng)建的sandbox鏡像,不能直接通過rm -rf 刪除,刪除方式如下:
# 假設(shè)要?jiǎng)h除的為文件夾名為molspin的sandbox鏡像
# 首先,以可讀的模式進(jìn)入要?jiǎng)h除的鏡像
singularity shell --fakeroot -w molspin
# 刪除掉容器中,基于fakeroot創(chuàng)建的所有文件
rm -rf /* 1>/dev/null 2>&1
# 退出鏡像
exit
# 將創(chuàng)建好的軟件鏡像上傳到高性能計(jì)算集群,加載singularity軟件環(huán)境
# 刪除掉剩下的
rm -rf molspin