介绍
TrueNAS SCALE的APP实际上是,K8S(kubernetes)
和Helm。它的基本单位是POD,不是docker容器。POD里面才是docker容器。
不过,使用SCALE的应用是不需要特别了解K8S的,社区已经做了很多的简化,我们只需要知道一些名词的意思就行。
准备
首先你要选择侧栏的应用,根据提示选择你想让应用数据放的池。
然后点击设置-高级设置
选择节点IP,路由v4接口, 填上路由v4网关
确保启用容器镜像更新和Enable GPU support是勾选的,最后保存等待即可(时间可能比较长)
确保你的时区设置正确(系统设置-常规)
添加社区(TrueCharts)目录
添加社区目录请参照这里,就不重复介绍了
开始
介绍
TrueNAS SCALE不仅有很多可以直接安装的应用,还支持自定义安装其他的容器镜像。在SCALE里有2种安装自定义应用的方式。
弄懂了自定义应用的安装,其他所有的应用都是一样的
- 系统自带(官方的)启动docker镜像
Truecharts社区的custom-app
这两个不同点在于:- 启动docker镜像可以设置独立的网络接口和IP,但是不能反向代理,默认不能和其他应用内部通信。
- custom-app可以使用社区的traefik反向代理,集成有健康检查,运行权限控制等
个人推荐使用custom-app
custom-app
我们先介绍custom-app,我们这里就以自定义安装qbittorrent为例
在搜索框里输入cus,就可以搜到了,点击安装
应用名称随便输一个名字,我这里就以qb为名字,版本默认不要动,这个版本是指custom-app的版本
然后我们打开dockerhub搜索qbittorrent,找到你需要的镜像,打开。
找到它的安装说明
- Container Repository填上镜像的名字
- Container Tag填上镜像的标签,一般填latest,意思是最新的
Container Pullpolicy 有三个选项
- IfNotPresent: 如果主机上没有镜像就拉取镜像,有的话就不拉取。
- 总是:无论主机上有没有镜像每次部署都拉取镜像
- 从不:无论主机上有没有镜像都不拉取
一般选择IfNotPresent就可以了
点击下一步
高级设置我们一般不需要设置,这里只是介绍一下
勾上两个选框,让选项显示出来主意:这个选框只是是否隐藏,不是没有。不勾选只是不显示,选项是默认值
- (Advanced) Controller Type:控制器类型,这个一般默认选择Deployment就可以了
- Desired Replicas:副本数(同时部署几个副本),这是K8S的概念,一般我们默认一个就可以了
(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,就可以访问到了。
如果你觉得本教程对你有帮助,请随意打赏,谢谢。
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