Singularity入门之资源限制

2019-09-23  本文已影响0人  kongxx

在 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资源

这里只说说比较好演示的第三种方法,先看看我限制测试机器的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

这里

下面启动一个容器,来看看对内存的限制

$ sudo singularity shell --security uid:1000 --apply-cgroups mem.toml centos.simg

然后在宿主节点上查看一下内存限制

$ cat /sys/fs/cgroup/memory/singularity/*/memory.limit_in_bytes
524288000

其它

上面只是演示了怎样显示cpu和mem,其实 singularity 也可以限制其它资源,具体可以参考 /etc/singularity/cgroups/cgroups.toml 文件来配置。

参考

上一篇下一篇

猜你喜欢

热点阅读