Loading... [哔哩哔哩](https://www.bilibili.com/video/BV1kq4y1T7CW/) # 介绍 TrueNAS SCALE的APP实际上是,K8S(kubernetes) 和Helm。它的基本单位是POD,不是docker容器。POD里面才是docker容器。 不过,使用SCALE的应用是不需要特别了解K8S的,社区已经做了很多的简化,我们只需要知道一些名词的意思就行。 # 准备 首先你要选择侧栏的**应用**,根据提示选择你想让应用数据放的池。 然后点击**设置-高级设置**  选择**节点IP**,**路由v4接口**, 填上**路由v4网关** 确保**启用容器镜像更新**和**Enable GPU support**是勾选的,最后保存等待即可(时间可能比较长)  确保你的时区设置正确(系统设置-常规)  ## 添加社区(TrueCharts)目录 添加社区目录请参照[这里](https://www.truenasscale.com/index.php/2021/12/09/56.html),就不重复介绍了 # 开始 ## 介绍 TrueNAS SCALE不仅有很多可以直接安装的应用,还支持自定义安装其他的容器镜像。在SCALE里有2种安装自定义应用的方式。 **弄懂了自定义应用的安装,其他所有的应用都是一样的** 1. 系统自带(官方的)**启动docker镜像** 2. Truecharts社区的**custom-app** 这两个不同点在于: - **启动docker镜像**可以设置独立的网络接口和IP,但是不能反向代理,默认不能和其他应用内部通信。 - **custom-app**可以使用社区的traefik反向代理,集成有健康检查,运行权限控制等 **个人推荐使用custom-app** ## custom-app 我们先介绍**custom-app**,我们这里就以自定义安装qbittorrent为例  在搜索框里输入cus,就可以搜到了,点击安装  应用名称随便输一个名字,我这里就以qb为名字,版本默认不要动,**这个版本是指custom-app的版本**  然后我们打开[dockerhub](https://hub.docker.com/)搜索qbittorrent,找到你需要的镜像,打开。  找到它的安装说明  - **Container Repository**填上镜像的名字 - **Container Tag**填上镜像的标签,一般填**latest**,意思是最新的 - **Container Pullpolicy** 有三个选项 1. **IfNotPresent**: 如果主机上没有镜像就拉取镜像,有的话就不拉取。 2. 总是:无论主机上有没有镜像每次部署都拉取镜像 3. 从不:无论主机上有没有镜像都不拉取 **一般选择IfNotPresent就可以了** 点击下一步  ***高级设置我们一般不需要设置,这里只是介绍一下*** 勾上两个选框,让选项显示出来**主意:这个选框只是是否隐藏,不是没有。不勾选只是不显示,选项是默认值** 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**:这个不做了解,不要使用。 点击下一步  **时区**和**UMASK**默认不需要修改,UMASK是控制新文件产生时的默认权限,有兴趣请自行搜索。 **Configure Image environment**对应的就是docker的environment,也就是**-e** 我们就参照dockerhub的qb安装说明配置一下  **注意:-e TZ=Europe/London 是配置时区,我们不需要再配置了,因为上面已经有时区了**  这就是按照dockerhub配置填写好的样子 **Show Expert Config**不需要勾选,也不需要配置,一般用不到 点击下一步  **Service Type**有4个选择 * **Simple**: 一般我们直接使用这个就可以了,它是K8S的LoadBalancer简化版,这里不需要知道什么是LoadBalancer,只要知道它可以做端口映射就可以了 * **ClusterIP**:这个选项是不映射端口,也就是说不能通过IP:端口访问了,只能应用间通过dns访问。 * **NodePort(Advanced)**:不推荐使用,也是可以端口映射的方式,社区已经抛弃使用它了 * **LoadBalancer (Advanced)**:和Simple一样,不过可以选择填写额外的IP,这个功能需要搭配Metallb使用,以后会介绍到它。 OK我们选到Simple就可以了  * **Port Type**:端口的类型,这个根据自己端口作用选择。网页一般选择http就可以了。像qb这种它有种子端口我们选择TCP和UDP * **Target Port**:目标端口,是容器的端口,是docker -p后面的端口  * **端口**:映射到主机的端口,这里可以随便填,只要不和其他应用重复冲突就好,如图我这里填的是9088 **注意:这是第一个端口的设置,它会用来做健康检查,也就是系统会测试这个端口能不能访问,不能访问会直接杀死容器,所以第一个端口最好填网页的端口**  然后我们添加额外的端口,如图我添加了qb的种子下载的端口,TCP和UDP 然后下一步  点击添加,可以看到**Type of Storage**有5个选择  这里我们只介绍前面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下载文件  点击添加,我们添加一个下载目录  如果你已经在创建数据集的时候设置好了权限的话,请把**Automatic Permissions**取消,因为它会自动化的设置权限,会更改你现有的权限 点击下一步 这里的ingress,在我们讲到反向代理的时候会介绍  直接下一步  这里是设置运行的用户和权限的地方 如果默认无法部署的话,看日子提示是权限问题  你需要使用root权限运行,按照图片就是root权限运行了,一般我们自定义应用大部分都需要用root权限 点击下一步  这里是设置资源限制的地方 勾选**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)** 点击下一步  这里是插件设置的地方,我们讲到特定插件的时候再说,直接下一步  高级这里是控制自动扩缩容的默认就可以了,直接下一步  OK,直接保存,就会部署了,等待部署完成,浏览器输入NAS IP加端口号就可以访问到了。 ## 启动docker镜像 点击右上角**启动docker镜像**,  应用名称这里随便,然后点击下一步。  这里的镜像库和custom app一样,填写docker镜像的名字,镜像标签和custom app也是一样的,一般我们填latest就可以了。镜像拉取策略和custom app一样。 点击下一步  **容器Entrypoint**是设置容器cmd和Entrypoint的,一般情况用不到的。直接点击下一步。  这里是设置容器的环境变量,**注意这里需要填时区TZ,因为启动docker镜像他没有一个默认的时区。**其他的和custom app是一样的。 点击下一步  **主机接口**:选择你的主网络接口 **IPAM Type**:选择静态ip,这里不能选择dhcp,因为每次重启容器的MAC地址都会改变,所以你如果选择dhcp的话,它的IP会一直的改变,所以只能选择静态IP。  **Configure Static IP Addresses**点击添加 填上你的内网一个IP,选择子网掩码 **Configure Static Routes**点击添加 目标填0.0.0.0,子网掩码选对,网关填上你路由器的IP。 同样你可以再添加一组,填上ipv6的地址。,网关和目标。  点击下一步  这一步是做端口转发的,因为我们刚刚已经设置了独立IP,就不需要再做端口转发了。 如果你上一步没有做的话,这里就需要做端口转发,具体是和custom app一模一样的,这里就不赘述了。 直接点击下一步  启动docker镜像,不支持PVC储存。我们只能使用**Configure Host Path Volumes** 挂载映射主机目录 **主机的路径需要自己提前创建好数据集。**  **Configure Memory Backed Volumes** 和**custom app**的`**emptyDir**一样,是挂载一些临时文件目录用的。一般我们用不到。 点击下一步  这里可以设置特权模式**Privileged Mode**,一般情况不需要勾选。 直接点击下一步  这里的更新策略和custom app一样的。默认就好 点击下一步  这里的资源限制只能选择是否直通显卡,不能设置使用CPU和内存的大部署 点击下一步,保存。然后等待部署,部署完成后,浏览器输入IP加端口号8080,就可以访问到了。 **如果你觉得本教程对你有帮助,请随意打赏,谢谢。** 最后修改:2021 年 12 月 13 日 © 允许付费转载 打赏 赞赏作者 支付宝微信 赞 13 如果觉得我的文章对你有用,请随意赞赏
27 条评论
选择池时遇到这个报错,请问怎么解决呢?
Error: [EINVAL] kubernetes_update.force: Missing '/mnt/app/ix-applications/config.json' configuration file. Specify force to override this and let system re-initialize applications.
或者,可以提供一份config.json文件吗?
可以unset之后先选择另一个池,把"另一个池/ix-applications/config.json"复制到"app/ix-applications/config.json",然后修改它里面的内容,unset之后换回app池
大佬 应用打不开怎么办 应用社区打不开No Applications are Available
请问下我安装docker-compose应用,一直转圈圈是什么情况?OωO
最后一步登网站显示Unauthorized咋办啊 ̄﹃ ̄
[EFAULT] Failed to install chart release: W0916 12:59:26.231899 60181 warnings.go:70] spec.template.spec.containers[0].env[10].name: duplicate name "PUID" W0916 12:59:26.231921 60181 warnings.go:70] spec.template.spec.containers[0].env[11].name: duplicate name "PGID" Error: INSTALLATION FAILED: Service "qb-custom-app" is invalid: spec.ports: Invalid value: []core.ServicePort{core.ServicePort{Name:"list-0", Protocol:"TCP", AppProtocol:(string)(nil), Port:6881, TargetPort:intstr.IntOrString{Type:0, IntVal:6881, StrVal:""}, NodePort:55303}, core.ServicePort{Name:"list-1", Protocol:"UDP", AppProtocol:(string)(nil), Port:6881, TargetPort:intstr.IntOrString{Type:0, IntVal:6881, StrVal:""}, NodePort:55303}, core.ServicePort{Name:"main", Protocol:"TCP", AppProtocol:(*string)(nil), Port:9087, TargetPort:intstr.IntOrString{Type:0, IntVal:8080, StrVal:""}, NodePort:59276}}: may not contain more than 1 protocol when type is 'LoadBalancer' 这个咋办啊OωO
应用的高级设置节点地址默认0.0.0.0无法更改,有没有什么影响?
没有
求教一下,truenas现在支持ovs吗,我试了很多linux部署ovs的方法,但是truenas的linux版本太新了,没有支持的
eeee大佬 这个默认的账户密码是多少啊,我记得我没设置过账号密码啊。。。。卡在登录界面就很难受呀,,,求求帮助一下 呜呜呜~
进群问
up,问个问题,我安装minio,用启动docker镜像的方式来安装,这里有个docker启动命令大致为:docker run
-d minio/minio server /data --console-address ":9001"
其中的
--console-address ":9001"
这个命令怎么配置呢?
minio社区有现成的,而且我也出过教程
2022-03-06 22:51:35
Startup probe failed: dial tcp 172.16.0.98:8080: connect: connection refused
2022-03-06 22:51:24
Started container v2ray-custom-app
2022-03-06 22:51:24
Created container v2ray-custom-app
2022-03-06 22:51:19
Container image "v2fly/v2fly-core:v4.44.0" already present on machine
2022-03-06 22:51:19
Started container hostpatch
2022-03-06 22:51:18
Created container hostpatch
2022-03-06 22:51:18
Started container lb-port-8080
2022-03-06 22:51:18
Created container lb-port-8080
2022-03-06 22:51:10
Container image "ghcr.io/truecharts/alpine:v3.14.2@sha256:4095394abbae907e94b1f2fd2e2de6c4f201a5b9704573243ca8eb16db8cdb7c" already present on machine
2022-03-06 22:51:10
Started container autopermissions
2022-03-06 22:51:10
Container image "rancher/klipper-lb:v0.1.2" already present on machine
2022-03-06 22:51:10
Started container lb-port-10809
2022-03-06 22:51:09
Created container lb-port-10809
2022-03-06 22:51:09
Created container autopermissions
2022-03-06 22:51:02
Container image "rancher/klipper-lb:v0.1.2" already present on machine
2022-03-06 22:51:02
Add eth0 [172.16.0.99/16] from ix-net
2022-03-06 22:51:01
Container image "ghcr.io/truecharts/alpine:v3.14.2@sha256:4095394abbae907e94b1f2fd2e2de6c4f201a5b9704573243ca8eb16db8cdb7c" already present on machine
2022-03-06 22:51:00
Add eth0 [172.16.0.98/16] from ix-net
Successfully assigned ix-v2ray/svclb-v2ray-custom-app-sjf6t to ix-truenas
2022-03-06 22:50:53
Created pod: svclb-v2ray-custom-app-sjf6t
Successfully assigned ix-v2ray/v2ray-custom-app-7988765996-ln6wt to ix-truenas
2022-03-06 22:50:50
Created pod: v2ray-custom-app-7988765996-ln6wt
2022-03-06 22:50:50
Scaled up replica set v2ray-custom-app-7988765996 to 1
2022-03-06 22:50:37
Deleted pod: v2ray-custom-app-7b977f86c8-wxp4m
2022-03-06 22:50:37
Stopping container lb-port-10807
2022-03-06 22:50:37
Scaled down replica set v2ray-custom-app-7b977f86c8 to 0
2022-03-06 22:50:37
Stopping container lb-port-10809
2022-03-06 22:50:37
Deleted pod: svclb-v2ray-custom-app-bpgwj
安装的另一个,端口号应该填什么啊?求助~
去tg群问
翻了一遍没找到你的tg群。。在哪,谢谢
博客左侧点开,点关于我
[EFAULT] Failed to install chart release: Error: INSTALLATION FAILED: Service "custom-custom-app" is invalid: spec.ports: Invalid value: []core.ServicePort{core.ServicePort{Name:"list-0", Protocol:"TCP", AppProtocol:(string)(nil), Port:6881, TargetPort:intstr.IntOrString{Type:0, IntVal:6881, StrVal:""}, NodePort:0}, core.ServicePort{Name:"list-1", Protocol:"UDP", AppProtocol:(string)(nil), Port:6881, TargetPort:intstr.IntOrString{Type:0, IntVal:6881, StrVal:""}, NodePort:0}, core.ServicePort{Name:"main", Protocol:"TCP", AppProtocol:(*string)(nil), Port:9088, TargetPort:intstr.IntOrString{Type:0, IntVal:8080, StrVal:""}, NodePort:0}}: may not contain more than 1 protocol when type is 'LoadBalancer'
显示这个怎么办啊,求助~
只设定HTTP 的端口,TCP和UDP先别设置,然后保存创建容器,完成之后再在容器上面编辑,再设置TCP和UDP就行了
自定义应用映射端口只能是一种协议的
我也遇到这个问题,这里应该是下面出现了两个tcp,但是9080这个明明我写的是http,但是它报的错也是tcp,有点蒙蔽了
是的,很奇怪,一样的bug。难道和顶上的高级设置有关?取消设置-高级设置-启用集成负载均衡器?
什么bug,进群问问
truenas的安装app弄的太复杂了,对于小白真的不友好,估计也是会限制他发展吧,黑群安装这些简单明了
群晖简单明了是因为系统已经很久了,各种教程多,SCALE刚开始需要接受新知识,教程少。所以感觉难吧
是的,ESXI上安装一个学习一下,就是看安装APP弄的太复杂了,估计是RC的版本原因!
OωO