Singularity入門之資源限制
- 2019 年 10 月 7 日
- 筆記
在 Singularity 中如果需要限制容器的資源,也可以通過 Linux 的 cgroup 來實現。Singularity 對資源的限制是通過一個 .toml 文件來定義的,Singularity 提供了一個樣例配置文件 /etc/singularity/cgroups/cgroups.toml,後面做資源限制的時候可以參考。
如果要使用 Singularity 來限制資源,需要在啟動容器的時候使用 –apply-cgroups 選項來指定定義的 .toml 文件,且必須使用 root 用戶來執行,比如:
$ sudo singularity shell --apply-cgroups cgroups.toml centos.sif
如果要在容器里使用普通用戶可以 "–security uid:1000" 選項來運行容器。
限制CPU資源
在 Singularity 中可以通過三種方式來限制CPU資源
- shares
- quota/period
- cpus/mems
這裡只說說比較好演示的第三種方法,先看看我限制測試機器的cpu情況,使用 lscpu 來查看,共有4個cpu,如下:
$ lscpu -e CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ 0 0 0 0 0:0:0:0 yes 2401.0000 1600.0000 1 0 0 1 1:1:1:0 yes 2401.0000 1600.0000 2 0 0 2 2:2:2:0 yes 2401.0000 1600.0000 3 0 0 3 3:3:3:0 yes 2401.0000 1600.0000
下面創建一個 cpu.toml 文件,來指定只使用第0和1個 CPU 內容如下:
[cpu] cpus = "0-1"
然後我們使用 cpu.toml 來啟動容器
$ sudo singularity shell --security uid:1000 --apply-cgroups cpu.toml centos.simg
然後在容器里運行一個應用程式,比如 sleep 命令,然後在容器里查看這個 sleep 命令可以使用的CPU資訊,由於容器被限制了最多只能使用兩個CPU,所以其內部運行的容器也最多只能使用兩個CPU。
Singularity centos.simg:/singularity-study> sleep 12345 & [1] 21390 Singularity centos.simg:/singularity-study> cat /proc/21390/status | grep Cpus_allowed_list Cpus_allowed_list: 0-1
下面我們修改 cpu.toml 文件,來使用機器的全部CPU,修改後內容如下
[cpu] cpus = "0-3"
再次在容器中運行應用程式並查看CPU情況
$ sudo singularity shell --security uid:1000 --apply-cgroups cpu.toml centos.simg Singularity centos.simg:/singularity-study> sleep 12345 & [1] 31539 Singularity centos.simg:/singularity-study> cat /proc/31539/status | grep Cpus_allowed_list Cpus_allowed_list: 0-3
限制記憶體資源
和限制CPU類似,要限制記憶體也可以通過一個 .toml 文件來限制,比如:
[memory] limit = 524288000 swap = 524288000 disableOOMKiller = false
這裡
- limit – 指定了記憶體的限制,單位是位元組
- swap – 指定了 mem + swap 的限制,單位是位元組
- disableOOMKiller – 指定當記憶體超限後,是否啟用kill容器策略
下面啟動一個容器,來看看對記憶體的限制
$ sudo singularity shell --security uid:1000 --apply-cgroups mem.toml centos.simg
然後在宿主節點上查看一下記憶體限制
$ cat /sys/fs/cgroup/memory/singularity/*/memory.limit_in_bytes 524288000
- 這裡說一下,本來想在容器里啟動一個程式來演示的,後來測試了發現,容器里運行的應用程式並不能限制住記憶體,不知道這是不是一個Bug。
其它
上面只是演示了怎樣顯示cpu和mem,其實 singularity 也可以限制其它資源,具體可以參考 /etc/singularity/cgroups/cgroups.toml 文件來配置。