哔哩哔哩

介绍

TrueNAS SCALE的APP实际上是,K8S(kubernetes)
和Helm。它的基本单位是POD,不是docker容器。POD里面才是docker容器。
不过,使用SCALE的应用是不需要特别了解K8S的,社区已经做了很多的简化,我们只需要知道一些名词的意思就行。

准备

首先你要选择侧栏的应用,根据提示选择你想让应用数据放的池。
然后点击设置-高级设置
image.png

选择节点IP路由v4接口, 填上路由v4网关
确保启用容器镜像更新Enable GPU support是勾选的,最后保存等待即可(时间可能比较长)

image.png

确保你的时区设置正确(系统设置-常规)
image.png

添加社区(TrueCharts)目录

添加社区目录请参照这里,就不重复介绍了

开始

介绍

TrueNAS SCALE不仅有很多可以直接安装的应用,还支持自定义安装其他的容器镜像。在SCALE里有2种安装自定义应用的方式。
弄懂了自定义应用的安装,其他所有的应用都是一样的

  1. 系统自带(官方的)启动docker镜像
  2. Truecharts社区的custom-app
    这两个不同点在于:

    • 启动docker镜像可以设置独立的网络接口和IP,但是不能反向代理,默认不能和其他应用内部通信。
    • custom-app可以使用社区的traefik反向代理,集成有健康检查,运行权限控制等
      个人推荐使用custom-app

custom-app

我们先介绍custom-app,我们这里就以自定义安装qbittorrent为例

image.png

在搜索框里输入cus,就可以搜到了,点击安装

image.png

应用名称随便输一个名字,我这里就以qb为名字,版本默认不要动,这个版本是指custom-app的版本

image.png

然后我们打开dockerhub搜索qbittorrent,找到你需要的镜像,打开。
image.png

找到它的安装说明

image.png

  • Container Repository填上镜像的名字
  • Container Tag填上镜像的标签,一般填latest,意思是最新的
  • Container Pullpolicy 有三个选项

    1. IfNotPresent: 如果主机上没有镜像就拉取镜像,有的话就不拉取。
    2. 总是:无论主机上有没有镜像每次部署都拉取镜像
    3. 从不:无论主机上有没有镜像都不拉取
      一般选择IfNotPresent就可以了
      点击下一步

image.png
高级设置我们一般不需要设置,这里只是介绍一下

勾上两个选框,让选项显示出来主意:这个选框只是是否隐藏,不是没有。不勾选只是不显示,选项是默认值

  1. (Advanced) Controller Type:控制器类型,这个一般默认选择Deployment就可以了
  2. Desired Replicas:副本数(同时部署几个副本),这是K8S的概念,一般我们默认一个就可以了
  3. (Advanced) Update Strategy:更新策略

    • Recreate: Kill existing pods before creating new ones:升级的时候先杀死旧的应用,再部署新的
    • RollingUpdate: Create new pods and then kill old ones:滚动升级,先部署新的,再杀死旧的应用
    • (Legacy) OnDelete: ignore .spec.template changes:这个不做了解,不要使用。

点击下一步

image.png

时区UMASK默认不需要修改,UMASK是控制新文件产生时的默认权限,有兴趣请自行搜索。

Configure Image environment对应的就是docker的environment,也就是-e

我们就参照dockerhub的qb安装说明配置一下
image.png

注意:-e TZ=Europe/London 是配置时区,我们不需要再配置了,因为上面已经有时区了

image.png
这就是按照dockerhub配置填写好的样子

Show Expert Config不需要勾选,也不需要配置,一般用不到

点击下一步

image.png

Service Type有4个选择

  • Simple: 一般我们直接使用这个就可以了,它是K8S的LoadBalancer简化版,这里不需要知道什么是LoadBalancer,只要知道它可以做端口映射就可以了
  • ClusterIP:这个选项是不映射端口,也就是说不能通过IP:端口访问了,只能应用间通过dns访问。
  • NodePort(Advanced):不推荐使用,也是可以端口映射的方式,社区已经抛弃使用它了
  • LoadBalancer (Advanced):和Simple一样,不过可以选择填写额外的IP,这个功能需要搭配Metallb使用,以后会介绍到它。

OK我们选到Simple就可以了
image.png

  • Port Type:端口的类型,这个根据自己端口作用选择。网页一般选择http就可以了。像qb这种它有种子端口我们选择TCP和UDP
  • Target Port:目标端口,是容器的端口,是docker -p后面的端口
    image.png
  • 端口:映射到主机的端口,这里可以随便填,只要不和其他应用重复冲突就好,如图我这里填的是9088

注意:这是第一个端口的设置,它会用来做健康检查,也就是系统会测试这个端口能不能访问,不能访问会直接杀死容器,所以第一个端口最好填网页的端口

image.png

然后我们添加额外的端口,如图我添加了qb的种子下载的端口,TCP和UDP
然后下一步
image.png

点击添加,可以看到Type of Storage有5个选择
image.png

这里我们只介绍前面3个

  • PVC (simple):PVC是K8S里面特有的储存方式,它类似docker里面的卷储存。在SCALE里面由于ZFS驱动的问题,PVC储存在本地是没办法访问的,所以不需要手动修改的配置文件一般才会选择PVC,而且应用删除后PVC储存的文件也会被删除
  • HostPath (simple):这个和docker映射主机路径(docker run -v appdata/config:/config)是一样的,但是你需要提前创建好数据集,并且设置好权限
  • emptyDir :这个一般放临时文件,重启后会删除,比如PLEX的/transcode转码的临时文件,一般我们自定义应用用不到

这里我们就用PVC来储存qb的/config配置文件,用HostPath (simple)来储存qb的/downloads下载文件
image.png

点击添加,我们添加一个下载目录
image.png

如果你已经在创建数据集的时候设置好了权限的话,请把Automatic Permissions取消,因为它会自动化的设置权限,会更改你现有的权限

点击下一步
这里的ingress,在我们讲到反向代理的时候会介绍
image.png

直接下一步

image.png

这里是设置运行的用户和权限的地方
如果默认无法部署的话,看日子提示是权限问题
image.png

你需要使用root权限运行,按照图片就是root权限运行了,一般我们自定义应用大部分都需要用root权限

点击下一步

image.png
这里是设置资源限制的地方

勾选Set Custom Resource Limits/Requests(Advanced) 就可以看到设置了

  • Advanced Limit Resource Consumption:让应用最大使用的资源

    • 处理器4000m的意思是4线程,1000m就是一个线程的意思。最小单位是10m
  • Advanced Request minimum resources required:这个是运行这个应用最小需要多少资源,默认就可以了,不要改这个
  • Configure Mount USB devices:这里可以挂载USB设备
  • GPU Configuration:这里可以选择直通显卡0是关,1是开。注意:一块显卡只能直通给一个应用使用

一般资源限制默认就可以了,不需要勾选Set Custom Resource Limits/Requests (Advanced)

点击下一步
image.png

这里是插件设置的地方,我们讲到特定插件的时候再说,直接下一步
image.png

高级这里是控制自动扩缩容的默认就可以了,直接下一步

image.png

OK,直接保存,就会部署了,等待部署完成,浏览器输入NAS IP加端口号就可以访问到了。

启动docker镜像

点击右上角启动docker镜像
image.png

应用名称这里随便,然后点击下一步。
image.png

这里的镜像库和custom app一样,填写docker镜像的名字,镜像标签和custom app也是一样的,一般我们填latest就可以了。镜像拉取策略和custom app一样。

点击下一步

image.png

容器Entrypoint是设置容器cmd和Entrypoint的,一般情况用不到的。直接点击下一步。

image.png

这里是设置容器的环境变量,注意这里需要填时区TZ,因为启动docker镜像他没有一个默认的时区。其他的和custom app是一样的。

点击下一步

image.png

主机接口:选择你的主网络接口
IPAM Type:选择静态ip,这里不能选择dhcp,因为每次重启容器的MAC地址都会改变,所以你如果选择dhcp的话,它的IP会一直的改变,所以只能选择静态IP。
image.png

Configure Static IP Addresses点击添加
填上你的内网一个IP,选择子网掩码
Configure Static Routes点击添加
目标填0.0.0.0,子网掩码选对,网关填上你路由器的IP。

同样你可以再添加一组,填上ipv6的地址。,网关和目标。
image.png

点击下一步

image.png

这一步是做端口转发的,因为我们刚刚已经设置了独立IP,就不需要再做端口转发了。
如果你上一步没有做的话,这里就需要做端口转发,具体是和custom app一模一样的,这里就不赘述了。

直接点击下一步
image.png

启动docker镜像,不支持PVC储存。我们只能使用Configure Host Path Volumes 挂载映射主机目录
主机的路径需要自己提前创建好数据集。
image.png

Configure Memory Backed Volumescustom app的`emptyDir一样,是挂载一些临时文件目录用的。一般我们用不到。

点击下一步

image.png

这里可以设置特权模式Privileged Mode,一般情况不需要勾选。
直接点击下一步

image.png

这里的更新策略和custom app一样的。默认就好
点击下一步

image.png

这里的资源限制只能选择是否直通显卡,不能设置使用CPU和内存的大部署
点击下一步,保存。然后等待部署,部署完成后,浏览器输入IP加端口号8080,就可以访问到了。

如果你觉得本教程对你有帮助,请随意打赏,谢谢。

最后修改:2021 年 12 月 13 日
感谢您的支持