这个事情从23年初开始说起,没想到最后会这么晚才开始弄。市面上群晖的nastools搭建方案都是极好的,弄我这改一改就可以直接用在k8s上了。由于nas-tool现在要求建BT站了,不打算一开始就弄这么麻烦,哥们一个季度三个月可能就看一部番。所以计划是先构建基础的媒体站,在这个基础上再搭PT(当然这个计划就不知道会咕多久了)。这样这个blog作为教程也可以循序渐进了。

旧版本的nas-tools我也进行了相对的尝试,折腾了很久但是作用不是很大。qbittorrent自己就可以实现rss解析,大部分的番剧站点也都支持rss,例如miobt,acgrip,蜜柑计划,动漫花园等等。(但是其他的例如国内的和美剧我似乎没有找到很靠谱的rss站点,可能只有后续在PT计划中弄了)。

qBittorrent 安装和配置

k8s

需要两个持久化,config和存储点,路径/media/config

其中media需要RWM

开放6681的tcp和udp,开放8080

镜像 linuxserver/qbittorrent

做完这些之后直接进行端口暴露是有问题的,因为这个容器目前只允许8080的环回访问

直接编辑配置文件,重启后会被镜像恢复,我的做法是直接把qBittorrent.conf文件塞入只读configmap(但是这样会导致webui中进行的设置不可写入)参考上一篇文章关于configmap 独立条目作为文件被挂载且不隐藏文件夹中的其他文件 (maoyulong.club)

[Preferences]上做下列配置

WebUI\HostHeaderValidation=false
WebUI\CSRFProtection=false

创建代理服务

大部分的BT站点,获取RSS是需要代理服务的,得益于k8s的网络结构,我们可以非常方便的通过service在集群内进行互联。

同namespace上构建好代理之后,我们暴露对应的http和socket端口。

用virtualIP或者coredns进行连接。

同时,在qBittorrent.conf文件进行配置

[Network]
PortForwardingEnabled=true
Proxy\AuthEnabled=false
Proxy\HostnameLookupEnabled=true
Proxy\IP=x.x.x.x
Proxy\Password=
Proxy\Port=@Variant(\0\0\0\x85\x1e\xd2)
Proxy\Profiles\BitTorrent=true
Proxy\Profiles\Misc=false
Proxy\Profiles\RSS=true
Proxy\Type=HTTP
Proxy\Username=

x.x.x.x 即为service IP,或者在ui界面进行配置

配置RSS

选项 -> rss 中打开 启用获取RSS订阅启用RSS Torrent自动下载选项,添加RSS下载规则,我们可以设置一个最简单的规则,并把需要更新的RSS在”对以下订阅源应用规则”中勾选,如果网络连接顺利,则会立即下载未读的Torrent。

tips

在站点中,我们可能会早到多个字母组的结果,我们以acg.rip为例,搜索“猪肝记得煮熟再吃”。后,选择一个心仪的字幕组,可能他的标题如下

[LoliHouse] 猪肝记得煮熟再吃 / Buta no Liver wa Kanetsu Shiro - 06 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕]

直接复制发布的标题到集数之前进行搜索,例如

[LoliHouse] 猪肝记得煮熟再吃 / Buta no Liver wa Kanetsu Shiro

有可能会有多种字幕发布,我们也可以跳过集数,这样搜索

[LoliHouse] 猪肝记得煮熟再吃 / Buta no Liver wa Kanetsu Shiro  [WebRip 1080p HEVC-10bit AAC][简繁内封字幕]

这样我们就得到一个干净的列表,获取RSS链接即可:

对于下载的番剧,Jellyfin需要去识别到每一个具体的番剧和集数,所以对于文件夹的命名有一些要求,具体的新番下载的配置,见下文。

Jellyfin 安装

安装amd驱动

我的b节点拥有一个amd的核显,这可以让播放器进行硬解,首先打上32位架构

sudo dpkg --add-architecture i386
sudo apt update 

在amd官网下载安装包

Linux® Drivers for AMD Radeon™ and Radeon PRO™ Graphics | AMD

安装驱动包

sudo apt install ./amdgpu-install_xxx_all.deb

安装驱动

amdgpu-install -y

使用设备插件,Kubernetes 实现了设备插件(Device Plugin),让 Pod 可以访问类似 GPU 这类特殊的硬件功能特性。详见:调度 GPU | Kubernetes 关于三家的GPU设置方案,这里都有描述。

我们可以直接使用官方的yaml进行构建:

kubectl create -f https://raw.githubusercontent.com/RadeonOpenCompute/k8s-device-plugin/master/k8s-ds-amdgpu-dp.yaml

安装jellyfin

持久化,和qb挂载同一个media持久化至路径/media,挂载一个配置文件的持久化至/config,缓存持久化至/cache。

关于硬件加速,首先是在创建yaml的时候设置资源预留:

          resources:
            limits:
              amd.com/gpu: '1'

deployment构建完成后,完成相关设置后进入控制台->播放->硬件加速:AMD AMF 即可

元数据

即metadata,当你通过qb下载了新番或者电视剧之后,可能是没有一个完整的剧集信息的,这时候就需要从一些信息源,一般是TMDB和Bangumi

Bangumi

bangumi插件更适合动漫的元数据刮削,而且网络连接上也可以直连,在 插件->存储库 添加如下网址:

https://jellyfin-plugin-bangumi.pages.dev/repository.json

然后在 目录->元数据 中添加Bangumi插件

豆瓣

同样的方法,添加如下连接:

https://raw.githubusercontent.com/caryyu/jellyfin-plugin-repo/master/manifest-us.json

这之后就可以获取数据了

创建媒体库

内容类型选择节目,元数据插件全部勾选,将Bangumi 排在首位,勾选 优先使用内置的剧集信息而不是文件名媒体资料储存方式:Nfo、将媒体图像保存到媒体所在文件夹

选择好对应的文件夹之后,Jellyfin就会开始扫描了,建议按照如下的格式进行:

root@jellyfin-d755f9b68-clsbb:/media/video/anime# tree Sousou\ no\ Frieren/
Sousou no Frieren/
├── folder.jpg
├── S01
│   ├── folder.jpg
│   ├── [KitaujiSub] Sousou no Frieren [01][WebRip][HEVC_AAC][CHS_JP].mp4
│   ├── [KitaujiSub] Sousou no Frieren [01][WebRip][HEVC_AAC][CHS_JP].nfo
│   ├── [KitaujiSub] Sousou no Frieren [02][WebRip][HEVC_AAC][CHS_JP].mp4
│   ├── [KitaujiSub] Sousou no Frieren [02][WebRip][HEVC_AAC][CHS_JP].nfo
│   ├── [KitaujiSub] Sousou no Frieren [03][WebRip][HEVC_AAC][CHS_JP].mp4
│   ├── [KitaujiSub] Sousou no Frieren [03][WebRip][HEVC_AAC][CHS_JP].nfo

这里就可以看到,Jellyfin已经把nfo文件放置在里面了。

文件最外面是番剧的名字,然后是季度,最后是里面的文件。

对于没有nas-tools的情况下,我的解决办法是每个番创建一个下载规则,然后让其保存到其他目录来解决命名的问题。