0%

910实验室服务器搭建-LXC虚拟化

根据实验室的任务需要,该服务器需要同时运行多种任务,且任务间的干扰大。
为了能够将不同开发人员的环境区分开,我们在经过多种尝试后,决定采用LXC容器进行虚拟化。

虚拟化需求

  1. 各容器应当具有独立IP
  2. 容器内具备运行CUDA环境的能力
  3. 性能损耗小
  4. 管理方便

LXC思路

因为现有的服务器资源比较充裕,所以给用户空间和编译执行空间设定了不同的RAID卷,用户空间单独提出进行挂载,这样,每个用户的数据都能安全保存。
每个用户对应独立IP的容器,容器内具有root权限,可以执行任意的操作。

通过LVM对根目录扩充,容许用户在容器中进行大磁盘占用的操作。独立的RAID0 SSD,支持用户将当前的执行任务放入其中,进行当前运行。独立的RAID1 HDD,支持用户存储用户目录内容,且数据安全有保证。

LXC容器创建

创建模板容器

首先创建一个模板容器,并将网络、ssh-server等内容配置好,之后给用户配置的容器都基于该模板容器进行复制。

1
lxc-copy -n old_name -N new_name -K

old_name 是模板容器名,new_name 是目标容器名,-K表示保存之前的配置。

修改容器内的特定信息

进入到复制得到的容器rootfs,更改容器内的/etc/hostname,将其更改为需要的名称,否则会显示模板的主机名。

修改容器的配置文件config,将文件夹的挂载配置修改为对应的目录。

由宿主机的lxc-attach,进入容器中,创建用户,并赋予sudo权限,用户名与挂载的目录一致。

实现效果

最终实现的效果,是用户可以通过独立IP登陆到容器中,并且可以使用挂载的设备与目录。

用户可以自行配置UI,通过vncserver进行访问;也可以创建ftp服务器,直接进行文件传输。

从实际使用效果来看,创建的各个容器就像虚拟机一样,有自己独立的空间,也有独立的IP可以直接访问。

因为创建的容器运行在用户态,在容器中即使以root身份执行,对应于实际机器中的进程ID也不是真正的root。

容器相对于虚拟机来说,资源占用小得多,并且可以根据实际需要进行释放,大大缓解宿主机的压力。