前言

上篇文章我在PVE上部署了OMV,一切都准备就绪,但发现传输速度其实也并没有非常快,大概也就比黑群晖快了一倍左右,并没有跑满带宽。于是我又翻阅了大量的资料和文章。(这里吐槽一下国内的环境,百度出来的内容都是千篇一律,有价值的东西真的很少)

LXC技术

为了解决性能问题,就需要更好的方式来部署,那么PVE除了可以创建虚拟机以外,还可以创建LXC容器,LXC技术是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,这类似于我们熟悉的dockerLXC容器有以下优势:

  • 与宿主机使用同一个内核,性能损耗小
  • 不需要指令级模拟
  • 不需要即时(Just-in-time)编译
  • 容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制
  • 避免了准虚拟化和系统调用替换中的复杂性
  • 轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享

那么LXC容器的性能肯定是优于普通虚拟机的。于是,我就想OMV可以使用LXC进行部署吗?其实这是可行的,因为OMV的底层系统就是在debian系统,我们只需要部署一个debianLXC容器,然后在该容器上安装OMV即可。

PVE Helper Scripts

说起来简单,但其实部署需要花很多的时间,在我决定要开始手动部署的时候,竟然发现了一个PVE宝藏脚本,Proxmox VE Helper Scripts。这是一个用来自动化创建PVE虚拟机的脚本集合,只需要界面化交互即可。这让使用PVE更加简单了。

Github地址:https://github.com/tteck/Proxmox
脚本下载地址:https://tteck.github.io/Proxmox/

大家可以去这个项目的网站看一下,会有很多新的发现和理解,它是一个非常好的开源项目,强烈推荐使用PVE的人使用它。那么在其官网,是有OMV-LXC部署脚本的,这个脚本使用起来真是相当简单。
pve-helper-scripts
这个网站有非常多的实用脚本可以使用,我们就以OMV-LXC脚本开始吧。

创建OMV-LXC

相比我们手动部署OMV虚拟机,使用PVE-Helper-Scripts简直不要太简单。

  • 首先我们在官网找到OMV-LXC的脚本。
    pve-helper-scripts-2

  • 然后打开PVEshell命令终端,执行该脚本即可。
    deploy-omv-lxc

  • 执行脚本命令后,会出现图形化界面,只需根据提示设置即可,非常简单。在这个过程中,会问你是否默认设置安装,可以选择Advanced高级,根据提示去设置,主要是设置CPU,内存,硬盘等信息,硬盘我只给了20GB,用于安装系统和docker,之后会挂载新的硬盘。
    deploy-omv-lxc-2

  • 安装过程中,需要根据提示,选择debian 11,设置容器为特权容器(这个很重要),打开ssh等,然后等待安装完成即可,安装完成后,PVE管理页面左侧就会出现该虚拟机,这就安装完成了。

  • 注意点:PVE中,LXC被称为CT

设置OMV-LXC

虽然安装是比较简单的,但是当我们进入OMV-Web管理页面时,会发现没有磁盘可用,OMV无法发现磁盘。这才是整个部署过程中最难最花费时间的部分。

挂载硬盘

首先因为我只给了omv 20GB的磁盘,只为了装系统和简单使用docker而已。所以我需要挂载新的硬盘上去,但因为LXC容器是没有直通的,直接使用宿主机的资源。所以我们需要先将其他的硬盘作为lvm或目录挂载到PVE上。
setting-omv-lxc
在跟节点,选择磁盘,然后创建Volume Group,当然你也可以创建目录的形式,这些都是可以挂载到LXC容器的。在创建Volume Group时选择一个新的硬盘,如果没有新的硬盘,就无需创建,直接使用系统盘挂载到omv即可。

创建完成后,点开我们刚刚安装好的`omv-lxc`虚拟机,选择资源,点击左上角添加,添加挂载点即可。这里存储选择系统盘或者刚刚创建的即可。路径是挂载到`omv-lxc`中的路径。输入要挂载的磁盘大小即可。

setting-omv-lxc-2

设置硬盘

虽然我们挂载了磁盘,但是在omv中,我们还是无法使用,omv找不到这些挂载点。我们需要进行一些设置,让omv可以识别到。

查看挂载点Block Device

我们打开PVE,在PVEshell执行以下代码,用来查询挂载点的Block Device

lvdisplay

setting-omv-lxc-3
记住这个参数253:10,我们需要设置LXC容器的执行权限,并告诉OMV有这个磁盘。不管你挂载了多少磁盘,都是通过上面的命令来获取Block Device参数的。

创建挂载脚本

为了让OMV识别该挂载点,我们需要编写一个挂载脚本,我这里LXC容器ID是102,需要换成你LXC容器的ID,然后在脚本中填入需要识别的block device。

# 使用vim创建挂载脚本,也可以使用nano或vi
vim /var/lib/lxc/102/mount_hook.sh

# 将下面的内容放入脚本中,253 10 就是刚刚我们获取到的block device
#--------------------这是分隔符,忽略----------------------------

#!/bin/sh
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sda b 253 10

#--------------------这是分隔符,忽略----------------------------

这里需要说明的是,/dev/sdaLXC容器内的设备,这个需要挂载后去 容器中查看 的。在容器中使用lsblk命令进行查看。例如,我这里是sda,所以是/dev/sda。这一步的对应,主要是为了在omv中存储器/磁盘中可以看到该磁盘。
setting-omv-lxc-4

设置LXC容器权限

上面设置好挂载点后,我们还需要将磁盘的权限给LXC容器开通,并将挂载脚本告诉LXC容器。这里我们只需要设置/etc/pve/lxc/[LXC_ID].conf文件即可,[LXC_ID]就是你的LXC容器ID。

# 编辑conf文件,102换成你LXC容器的ID
vim /etc/pve/lxc/102.conf

# 加入以下代码
# 其中253:10是磁盘挂载的block device
# lxc.hook.autodev用来设置挂载脚本
#--------------------这是分隔符,忽略----------------------------
lxc.apparmor.profile: unconfined
lxc.cgroup2.devices.allow: b 253:10 rwm
lxc.autodev: 1
lxc.hook.autodev: /var/lib/lxc/102/mount_hook.sh
#--------------------这是分隔符,忽略----------------------------

设置文件系统

  • 修改完配置文件后,重启LXC容器,然后登录omv网页即可看到磁盘了。

  • 进入omv存储器菜单 -> 点击文件系统 -> 挂载现有文件系统 即可。

  • 剩下的设置SMB/NFS与上篇文章一样。

安装docker及部署jellyfin

omv中可以使用omv-extras安装docker,web页面有portainer进行管理。但新版已经将portainer移除,使用compose进行管理,易用性确实没有portainer强了。

我的想法是将jellyfin安装在LXC容器中,这样方便使用。不过在LXC容器中的omv安装compose插件时却出错了,根本无法安装,又因为已经没有了portainer进行管理,不如自己手动安装docker好了,顺便再安装portainer进行管理即可。

安装docker

  • 更新apt及安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
  • 添加官方Docker GPG Key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
  • 设置仓库
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  • 完成
# 查看版本
docker --version
# 查看运行状态
systemctl status docker

安装docker-compose(可选)

docker-compose可以不装,但是我比较喜欢使用docker-compose去写yaml脚本,然后再去运行容器,不需要输入一大堆命令。

# 下载docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.19.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

# 设置软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 赋予权限
sudo chmod +x /usr/local/bin/docker-compose

# 查看版本,验证安装是否成功
docker-compose --version

部署portainer

  • 创建docker-compose.yml
version: '3.2'

services:
  portainer:
    image: portainer/portainer-ce
    container_name: portainer
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./portainer/data:/data
    environment:
      TZ: Asia/Sahnghai
      LANG: en_US.UTF-8
    ports:
      - "9000:9000"
  • 启动portainer
docker-compose up -d

部署jellyfin

我们可以通过portainer或者docker-compose进行部署。

Portainer部署jellyfin

  • 创建容器,镜像为nyanmisaka/jellyfin,端口为8096
    create-jellyfin-container

  • 设置挂载
    create-jellyfin-container-2

  • 设置设备挂载
    create-jellyfin-container-3

  • 部署容器
    create-jellyfin-container-4

docker-compose部署jellyfin

  • 编写docker-compose.yml文件
version: '3.2'

services:
  jellyfin:
    image: nyanmisaka/jellyfin
    container_name: jellyfin
    restart: unless-stopped
    volumes:
      - /docker/jellyfin/config:/config
      - /docker/jellyfin/cache:/cache
      - /srv/dev-sda/media:/media
    devices:
      - /dev/dri:/dev/dri
    ports:
      - "8096:8096"
  • 运行容器
docker-compose up -d

总结

LXC容器中的omv性能确实非常不错,上传直接跑满带宽,下载速度要稍微慢一些,但也很不错了。总的来说很不错,不枉费这段时间的折腾。

部分参考

文章作者: Willxup
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Willxup
Linux Linux PVE OMV
喜欢就支持一下吧