0%

基于LXD的实验室公共GPU服务器配置记录

最前

本文用于记录实验室服务器配置情况,主要用途为遥感影像处理和炼丹,可供其他实验室作参考。

如有建议,可联系站长admin@busby.com.cn,十分感谢您的建议。

一、硬件配置

Dell R740机架式服务器

二、软件环境

Ubuntu 20.10

容器:LXD

存储:ZFS

面板:LXDUI

三、安装过程

3.1 LXD软件安装

  • LXD:用于创建和管理容器

  • ZFS:用于管理物理磁盘,支持 LXD 高级功能,负责容器存储

  • Bridge-Utils:用于搭建网桥,负责容器上网

1
sudo apt-get install lxd zfsutils-linux bridge-utils

3.2 LXD初始化

  • LXD Clustering:不需要
  • New storage pool:需要创建一个存储池
  • Name of storage pool:给存储池命名
  • storage backend:存储后端,使用 ZFS
  • Create a new ZFS pool:需要创建一个 ZFS 池
  • Use an existing block device:Yes
  • Path to block device:使用已有的磁盘分区用于 ZFS 的存储后端
  • MAAS server?:不知道是啥,不需要
  • New local network bridge?:需要,我只需要使用 LXD 默认的网桥即可
  • New bridge be called:给网桥命名
  • IPv4:默认 auto
  • IPv6:默认 auto
  • LXD available over the network?:默认 no
  • Stale cached?:默认 yes
  • YAML printed?:打印信息,yes/no 都行

3.3 LXD测试

  • 查看ZFS的后端存储池
1
sudo zpool list lxd
  • 查看LXD的配置信息
1
sudo lxc info
  • 查看默认容器配置
1
sudo lxc profile show default
  • 查看容器列表
1
sudo lxc list

3.4 创建容器模板

  • 配置清华镜像源
1
sudo lxc remote add tuna-images https://mirrors.tuna.tsinghua.edu.cn/lxc-images/ --protocol=simplestreams --public
  • 查看镜像列表,寻找合适的镜像的FINGERPRINT,用于下载
1
sudo lxc image list tuna-images
  • FINGERPRINT是镜像的指纹,在上条命令下查找,ContainerTemplateName为容器模板名称,自己定义
1
sudo lxc launch tuna-images:<FINGERPRINT> <ContainerTemplateName>
  • 举例,创建一个名为xenialTemplate的容器。在lxc清华源中24be957c5e9f是Ubuntu16.04的fingerprint
1
sudo lxc launch tuna-images:24be957c5e9f xenialTemplate
  • 进行容器列表查看
1
sudo lxc list
  • 可进入容器的 root 用户下 bash
1
sudo lxc exec <ContainerTemplateName> bash
  • 用户切换
1
2
sudo su
su ubuntu

3.5 配置共享目录

  • 设置共享目录来实现宿主机与容器之间的文件传输
  • 设置键值
1
sudo lxc config set <ContainerTemplateName> security.privileged true
  • 设置共享目录,其中shareName为虚拟的设备名称,lxd会虚拟出该设备并导通接通两者共享目录,path1为宿主机下共享目录路径,path2为容器下共享目录路径
1
sudo lxc config device add <ContainerTemplateName> <shareName> disk source=<path1> path=<path2>

3.6 设置用户密码

1
2
3
sudo lxc exec <ContainerTemplateName> bash

passwd

3.7 配置Frp(内网穿透)

  • 在 frp 版本发布页面 下载 linux 的文件,如 frp_0.21.0_linux_amd64.tar.gz。解压后文件如下:

    • frps:服务端执行文件
    • frps_full.ini:服务端参数参考
    • frps.ini:服务端参数文件
    • frpc:客户端执行文件
    • frpc_full.ini:客户端参数参考
    • frpc.ini:客户端参数文件
  • 宿主机配置:frps.ini,宿主机执行./frps -c frps.ini开启服务。

1
2
3
4
5
[common]
bind_port = 7000

# 限制端口,要对端口做好管理
allow_ports = 2000-3000
  • 客户机配置:frpc.ini,容器执行./frpc -c frpc.ini连接服务。
1
2
3
4
5
6
7
8
9
[common]
server_addr = 10.**.**.** # 网段下宿主机的IP
server_port = 7000 # 服务端的bind_port

[ssh-template] # 一个转发实例,注意每个实例名称都不能相同,括号中的名称自定义
type = tcp
local_ip = 127.0.0.1
local_port = 22 # 容器本地SSH访问端口
remote_port = 2011 # 宿主机映射端口

四、分配容器及可视化管理

4.1 分配容器

  • 克隆容器 参数一为模板容器名称,参数二为目标容器名称
1
sudo lxc copy <ContainerTemplateName> <newContainerName>
  • 运行新容器
1
sudo lxc start <newContainerName>
  • 进入新容器bash
1
sudo lxc exec <newContainerName> bash

注意,此步骤后需要修改Frp的端口,重新建立内外网穿透,建议修改后使用snapshot快照备份sudo lxc snapshot <ContainerName>

4.2 可视化管理

  • 下载源码
1
git clone https://github.com/AdaptiveScale/lxdui.git
  • 创建虚拟环境
1
2
3
python3 -m venv lxdui

source lxdui/bin/activate
  • 安装LXDUI面板
1
2
3
4
5
cd lxdui

pip3 install . --user
# 或
python3 setup.py install --user
  • 启动面板
1
python3 run.py start

五、参考文献

第一版修订于 2021.3.16