锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

六.开发记录之实验室服务器LXD部署

时间:2023-11-21 06:07:01 2202传感器

专栏系列文章如下:

一.开发记录之AHRS、惯导传感器SBG-Ellipse-N配置和使用传感器_goldqiu的博客-CSDN博客

二.派勤工控机的远程使用和开发记录ubuntu和ROS环境配置_goldqiu的博客-CSDN博客

三.移动硬盘装载开发记录ubuntu系统配置、环境、各种软件安装备份等_goldqiu的博客-CSDN博客

四.开发记录之ubuntu系统安装ROS和开发环境_goldqiu的博客-CSDN博客

五.开发记录之ubuntu每个软件都安装在系统中_goldqiu的博客-CSDN博客

背景

实验室GPU服务器的LXD虚拟化

实验室增加了平台GPU由于实验室数量众多,服务器用于深度学习,但每个人使用的软件都非常不同。如果许多人使用相同的软件、环境、文件和配置。甚至有小白的命令会操作损坏系统。

所以我们做了虚拟化。为什么用?LXD而不是用最受欢迎的,docker呢?

两者都是基于的lxc虚拟化,而docker作为应用容器,LXD它是一个系统容器(是否可以安装完整的桌面),更接近我们的生产环境,想象别人使用它docker使用命令上传文件件,操作程序。尤其是小白对黑框会头疼。而自己打开远程,打开pycharm,美滋滋。去除什么linux2202年不要用桌面的想法,ubuntu桌面已经很稳定了。接下来安装使用吧。

注:标注重要的一定要看。

管理员须知(重要)

管理员应在桌面上新建使用说明read.txt,写下系统版本等信息,安装了什么软件,各种注意事项等等

LXD的安装

第一步:宿主机的安装和配置

以前已经安好了。

第二步:lxd安装与初始化

安装lxd

LXD 实现虚拟容器

ZFS 管理物理磁盘,支持LXD高级功能

bridge-utils 用于搭建网桥

安装LXD、ZFS和bridge-utils

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

配置网桥:

由于学校信息中心网络的限制,如果配置桥接网卡,会导致流量异常,直接断网,实现每人一个ip如果方式失败,我们必须使用端口监控来连接每个容器(如果您不想使用监控方式,请在线查询LXD配置桥接网卡)

配置ZFS

首先,我们运行sudo fdisk -l列出服务器上的可用磁盘和分区。我们有两个硬盘,第一个是系统磁盘,第二个是数据磁盘,用于构建数据磁盘LXD系统。

创建块设备

在块设备 /dev/sdb上创建一个ZFS存储池(硬盘地址根据实际情况变化)

sudo lxc storage create zfs-pool zfs source=/dev/sdb(硬盘地址根据实际情况变化)

LXD初始化

sudo lxd init

因为我们已经创造了一个名字zfs-pool所以在lxd初始化不需要创建新的存储池,然后配置

Would you like to use LXD clustering? (yes/no) [default=no]: Do you want to configure a new storage pool? (yes/no) [default=yes]: yes Name of the new storage pool [default=default]: default Name of the storage backend to use (btrfs, dir, lvm, zfs) [default=zfs]: zfs Create a new ZFS pool? (yes/no) [default=yes]: yes Would you like to use an existing block device? (yes/no) [default=no]: yes # 在这里输入我们刚刚做的分区 Path to the existing block device:/dev/sda1 # 每个容器的默认尺寸 Size in GB of the new loop device (1GB minimum) [default=30GB]: 1024G Would you like to connect to a MAAS server? (yes/no) [default=no]: # 桥接网络是否创建 Would you like to create a new local network bridge? (yes/no) [default=yes]: yes What should the new bridge be called? (yes/no) [default=yes]: yes What should the new bridge be called? [default=lxdbr0]: lxdbr0 What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: auto What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: auto Would you like the LXD server to be available over the network? (yes/no) [default=no]: Would you like stale cached images to be updated automatically? (yes/no) [default=yes] Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

再次配置

sudo lxc profile edit default

默认情况下修改容器内大小

每个容器的硬盘每个容器的硬盘尺寸也被限制为固定尺寸(如果没有,容器中的磁盘尺寸是整个存储池的尺寸)

第三步:创建容器

如果您认为此步骤制作容器母本比较麻烦,或者安装远程连接软件有问题,您可以直接使用镜像备份直接导入制作的桌面远程容器(容器不由英伟达驱动),详细信息在后面

加速源

使用清华镜像源(加速创建)

sudo lxc remote add tuna-imageshttps://mirrors.tuna.tsinghua.edu.cn/lxc-images/--protocol=simplestreams --public

列出可用的镜像

sudo lxc image list tuna-images:

创建ubuntu容器

使用清华源ubuntu镜像创建了一个名字test的容器

sudo lxc launch tuna-images:ubuntu/18.04 test

进入容器

sudo lxc exec test bash

我们登录的是root在这个容器中,用户已经存在了一个名字ubuntu的用户

修改密码

passwd root

passwd ubuntu

容器里的ubuntu这是一个非常简单的系统,需要安装各种软件

安装ssh

apt install ssh

通过ssh连接容器

检查容器和宿主机ip因为没有桥接网卡,不能从外部电脑访问容器(不能ping通容器的ip),因此,我们通过端口监控访问我们的容器。

退出容器

exit

在宿主机上查看容器

sudo lxc list

可知容器的ip地址

查看宿主机ip地址

ip addr

可知宿主机ip

端口转发

sudo lxc config device add test(这是容器名) proxy0(ssh为proxy0) proxy liste=tcp:172.22.24.126(宿主机ip):60601 connect=tcp:10.152.210.183(容器ip):22 bind=host

60601是我们定的端口号,通过宿主机的60601端口号监听容器中22端口号(SSH默认端口号)

sudo lxc config device add test(这里是容器名) proxy1(RDP为proxy1) proxy listen=tcp:172.22.24.126(宿主机ip):60611 connect=tcp:10.152.210.183(容器ip):3389 bind=host

60611是我们定的端口号,通过宿主机的60611端口号监听容器中3389端口号(RDP默认端口号)

RDP用于远程界面(转播3389端口),SSH用于远程命令和传输文件(转播22端口)

第四步:初始容器的配置

使用ssh连接容器并配置

ssh  ubuntu@172.22.24.126(宿主机ip) -p 60601

1. 更换源

备份原来的源

sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak

编辑写入网易源 (中国源)

(注意系统版本 ubuntu 18.04 bionic)

sudo vim /etc/apt/sources.list

deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse

2. 为容器添加显卡

我们回到宿主机为容器添加所有GPU:

lxc config device add yourContainerName gpu gpu

添加指定GPU:

lxc config device add yourContainerName gpu0 gpu id=0

安装驱动添加好显卡后,就相当于我们给容器安装了显卡,我们回到容器,然后安装显卡驱动与宿主机的显卡版本必须一致,安装方法参考第一步NVIDIA显卡驱动、CUDN、cuDNN的安装需要注意的是容器里面安装显卡驱动时需要加上后面的参数,安装时不需要安装到内核

sudo sh ./NVIDIA-Linux-X86_64-[YOURVERSION].run --no-kernel-module

到了这一步可以看第七步:容器模板,将server版的容器导出为镜像,可供不需要桌面的同学使用(推荐可以使用VSCode安装Remote SSH插件连接远程服务器)

3. 安装图形化界面

刷新源

sudo apt update

安装无推荐软件的ubuntu桌面(默认安装gnome,完整安装会有很多无关的软件)

sudo apt install --no-install-recommends ubuntu-desktop

4.安装远程连接

使用安装脚本(安装git后下载我们之后需要用的东西)

sudo apt install gitgit clone https://github.com/shenuiuin/LXD_GPU_SERVER

打开文件夹

cd LXD_GPU_SERVER/

赋予脚本可执行权限

sudo chmod a+x xrdp-installer-1.2.sh

脚本会下载一些文件,需要有Downloads文件夹

mkdir -p ~/Downloads

安装脚本

./xrdp-installer-1.2.sh -c -l -s

安装完成

脚本源地址

如果有其他桌面的需求

kde桌面环境以及xrdp安装

xfce桌面环境以及xrdp安装

xrdp解决声音重定向

5. 远程连接测试

端口转发在安装好XRDP后,与之前一样,因为我们ping不通容器,所以我们需要使用宿主机的端口号监听容器的xrdp的端口

sudo lxc config device add test proxy1 proxy listen=tcp:172.22.24.126:60611 connect=tcp:10.152.210.183:3389 bind=host

远程连接60611是我们定的端口号,通过宿主机的60611端口号监听容器中3389端口号(XRDP默认端口号)可以通过windows的远程连接来使用容器(windows运行mstsc)

第五步:ubuntu的美化等配置

icon图标主题

sudo apt updatesudo apt install papirus-icon-theme

GTK主题

git clone https://github.com/vinceliuice/vimix-gtk-themescd vimix-gtk-themes

sudo ./vimix-installer

应用主题主题安装好后用使用gnome-tweak-toos来应用主题

安装需要的软件

搜狗输入法、谷歌浏览器等等显示Linux系统信息

sudo apt install neofetchneofetch

查看CPU运行以及内存占用情况

sudo apt install htop

htop

查看显卡运行情况

nvidia-smi

实时查看显卡运行情况(按照0.1s的频率实时刷新)

watch -n0.1 nvidia-smi

第六步:容器管理

查看zfs储存卷的占用情况

zpool list

为容器修改参数配置

我们不想每个人使用全部的硬件资源,所以还需要限制每个人的参数容器参数配置说明配置容器参数lxc config edit YourContainerName

配置默认容器参数(新容器的参数会继承default配置的参数,容器会优先使用自己的参数)

sudo lxc profile edit default

第七步:容器模板

我们把这个配置好的容器当成模板,保存为镜像。

停止容器

sudo lxc stop test

将test容器保存为ubuntudemo镜像

sudo lxc publish test --alias ubuntudemo --public

从模板镜像中新建容器以后直接用模板镜像来创建容器,容器创建好后修改它的配置文件:添加端口映射(远程连接与SSH)、添加显卡(显卡驱动已经有了)、配置硬件参数,(可使用默认配置文件,使得新容器的参数继承于它,这一步就可以省略)

番外

使用镜像备份直接导入容器(如果嫌制作容器麻烦或者有问题可直接导入)下载我制作的镜像备份文件(ubuntu2004_xrdp,用户名和密码都为ubuntu)

https://pan.baidu.com/s/1AlnyEblEfP1ruIw9sg5Dtw 密码: cb25 拷贝至服务器,在该文件目录下导入镜像

lxc image import 4dd4710a11c146cbdbba13d7bc8c9fb69d7dca8fb93680b4a9285d2951b05db6.tar.gz --alias ubuntu_demo 就可以直接使用导入的镜像来创建容器,容器创建好后为它添加显卡和端口监听(远程连接与SSH),还有为容器安装显卡驱动(每个人的显卡驱动版本不同,我就没有安装了) 在lxd容器中使用docker

lxc config edit YourContainerName

然后重启容器

lxc restart YourContainerName

在容器内安装docker

共享目录

path1为宿主机路径,path2为容器内路径。

lxc config set yourContainerName security.privileged truelxc config device add privilegedContainerName shareName disk source=path1 path=path2 若容器内对共享目录沒有权限,只需将宿主机目录路径权限给足

sudo chmod -R 777 path1 使用自定义lxd容器上述lxd容器只能使用镜像源中,但如果我们想使用自己喜欢的发行版,或者自己已经有一台各方面已经调教满意的linux实体机,不想折腾了。这时候我们便可以将此系统移植到lxd中

LXD的使用(重要)

导入做好的镜像

lxc image import 4dd4710a11c146cbdbba13d7bc8c9fb69d7dca8fb93680b4a9285d2951b05db6.tar.gz(镜像压缩包) --alias ubuntu_demo(随便取)

通过lxc image ls 查看本机已有的镜像

通过lxc exec tf bash 可以进入容器内进行操作:

exit

:退出容器

lxc stop tf

:停止容器

lxc delete tf

:删除容器

lxc restart tf

:重启容器

新建容器

sudo lxc image list 查看镜像id

sudo lxc launch id name(容器名)

配置容器

在宿主机查看容器

sudo lxc list

可知容器的ip地址

查看宿主机ip地址

ip addr

可知宿主机ip

端口转发

sudo lxc config device add test(这里是容器名) proxy0(ssh为proxy0) proxy listen=tcp:172.22.24.126(宿主机ip):60601 connect=tcp:10.152.210.183(容器ip):22 bind=host

60601是我们定的端口号,通过宿主机的60601端口号监听容器中22端口号(SSH默认端口号)

sudo lxc config device add test(这里是容器名) proxy1(RDP为proxy1) proxy listen=tcp:172.22.24.126(宿主机ip):60611 connect=tcp:10.152.210.183(容器ip):3389 bind=host

60611是我们定的端口号,通过宿主机的60611端口号监听容器中3389端口号(RDP默认端口号)

RDP用于远程界面(转播3389端口),SSH用于远程命令和传输文件(转播22端口)

这里注意端口号按照顺序依次添加,ssh是01~09,rdp是11~19

为容器添加显卡

我们回到宿主机为容器添加所有GPU:

lxc config device add yourContainerName gpu gpu

添加指定GPU:

lxc config device add yourContainerName gpu0 gpu id=0

远程连接

使用ssh连接容器并配置

ssh  ubuntu@172.22.24.126(宿主机ip) -p 60601(ssh转播端口号)

ubuntu或者window远程桌面软件

172.22.24.126(宿主机ip):60611(rdp转播端口号)

lxd系统安装驱动

安装显卡驱动

sudo apt-get remove --purge nvidia*

设置为清华源

sudo apt-get update

sudo apt install nvidia-driver-470

sudo reboot

nvidia-smi

搞定

安装cuda:

https://blog.csdn.net/weixin_43742643/article/details/115355545

安装其他如ros、webots、anaconda后续有问题可以在这里补充。

参考博客

https://github.com/shenuiuin/LXD_GPU_SERVER

https://www.wangt.cc/2021/09/基于lxd搭建多人共用gpu服务器,简单易用,全网最详/

ps: 该文为整理搭建过程,有些是直接在网上大佬博客中复制的,侵权即删。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章