前言
TrueCharts社区提供的应用为了可以方便单独运行,需要用到数据库的应用都会应用内自带一个数据库容器。如果多个这样的服务,会有些冗余且不好进行管理、备份,推荐数据库自己额外搭建,需要的应用都连接过去。
本篇介绍以TrueCharts提供的
custom-app
进行自定义app安装应用,搭建mariadb
测试环境
# uname -a
Linux truenas 5.15.79+truenas #1 SMP Tue Dec 13 12:40:04 UTC 2022 x86_64 GNU/Linux
# k3s -v
k3s version v1.25.3+k3s-9afcd6b9-dirty (9afcd6b9)
go version go1.19.1
# docker -v
Docker version 20.10.18, build b40c2f6
# docker-compose --version
docker-compose version 1.25.0, build unknown
准备工作
-
TrueNAS SCALE(网络已设置为桥接方式)
-
正常访问github网络
-
Kubernetes设置
Apps–Settings–Advanced Settings
-
Node IP: 选择桥接网络的IP
- Route v4 Interface: 选择桥接网口
- Route v4 Gateway: 路由网关
- Enable Container Image Updates: √
- Enable GPU support: √
-
Enable Integrated Loadbalancer: √
保存 -
时区
TrueNAS 容器默认使用主机的时区
System Settings–General–Localization设置好需要的时区
-
创建应用数据集
Datasets–选中对应目录Add Dataset -
Name: mariadb
其它默认,保存
权限推荐使用ACL模式,
NFS4_RESTRICTED
随后添加
Item
:
- User:
apps
- Permissions:
Full Control
有需要还可以加上smb的用户(权限Modify就好),其它保持默认。保存
有需要可以在命令行界面、smb映射到电脑或创建子数据集,在mariadb目录下再创建目录data便于有其他目录挂载
添加目录
Apps–Manage Catalogs–Add Catalog
添加目录
- Catalog Name*: Truecharts
- Force Create 强制创建,可选
- Repository*: https://github.com/truecharts/catalog.git
- Preferred Trains: stable
- Branch: main
保存后,点击Refresh All
更新目录
等待些时间,在Available Applications
就可以看到除了Official Charts官方提供的应用还有社区的应用也加载进来了,
安装
搜索custom-app
Application name
Application Name*
: mariadb
应用名,建议统一,便于后续一致
Container Image
-
Container Repository*
: linuxserver/mariadb
镜像仓库名。此处使用linuxserver提供有优化过目录、权限的镜像 -
Container Tag*
: latest
版本标签,latest为最新,有需要稳定可以指定版本
-
Container Pullpolicy:
-
IfNotPresent: 如果没有该镜像就自动拉取,默认这个
- Always: 总是自动拉取
- Never: 从不自动拉取
General Settings
- Desired Replicas*: 副本数
同时部署几个副本,默认1就好 - Custom Command: 自定义命令
可用于替换掉镜像默认的启动命令 - Extra Args: 启动额外参数
按需使用,一般配合自定义命令提供参数
注意需要多个作为分隔,例如node app.js -o xx
则每个都需要单独一个Arg
启动命令[node],参数[app.js][-o][xx] - Timezone: ‘Asia/Shanghai’ timezone
时区,默认是主机的时区 Extra Environment Variables
: 环境变量- Name: MYSQL_ROOT_PASSWORD
- Value: [mariadb root用户密码]
App Configuration
健康检测,探针,用于判断容器是否正常运行,一般用不上
- Liveness
- Readiness
- Startup
Networking and Services
端口映射
- Service Type:
- LoadBalancer (Expose Ports): 端口映射,默认
- ClusterIP (Do Not Expose Ports): 不映射端口,只能通过DNS访问
- Port Type: TCP
端口协议 Target Port*
: 3306
容器内的端口Port*
: 3306
映射到主机端口(自定义)- Additional Service Ports: 需要多个端口映射可以额外添加
- Show Expert Config
- Host-Networking (Complicated): 主机网络
- Add external Interfaces
- Host Interface*: 指定网口
- IPAM Type*: 获取IP的方式,动态与静态
Storage and Persistence
目录挂载
- Type of Storage: Host Path
-
PVC: k8s特有的存储方式,不能直接访问,一般是不需要手动修改的配置文件才选
-
Host Path: 主机目录挂载
-
Automatic Permissions: 自动对目录授权,一般不勾选,自己添加权限
-
Host Path
: /mnt/mypool/docker/mariadb/data
主机目录 Mount Path*
: /config
挂载到容器内的路径
-
-
emptyDir: 重启后会删除,一般存放临时文件
-
NFS Share: NFS服务目录
- NFS Server: NFS主机
- Path on NFS Server: NFS主机的路径
Ingress
反向代理,在此之前需要用到traefik
(可选),数据库不需要,此处只作说明
- HostName*: 反代域名
- Paths
- Path*: /
-
Path Type*: Prefix
-
TLS-Settings(用于https)
- Host*: 反代域名(与上面一致)
- Use TrueNAS SCALE Certificate (Deprecated): 选择有效的证书
- (Advanced) Traefik Entrypoint*: websecure
websecure为https,web为http - Traefik Middlewares: 中间件名
指是default开头的命名空间(自动会加上default-)
Security and Permissions
权限
- Show Advanced Security Settings: 勾选
runAsNonRoot
: 不以root运行,取消勾选- Privileged mode: 特权模式
- ReadOnly Root Filesystem: 根目录只读
-
Allow Privilege Escalation: 允许提升特权(还没搞清楚)
-
runAsUser: 0
运行的用户 - runAsGroup: 0
运行的用户组 - fsGroup: 568
拥有pod卷的组
568
指的是apps
0
,指的是root
Resources and Devices
资源
Advanced Limit Resource Consumption最大使用资源
- CPU: 4000m
4线程,1000m为一线程 - RAM: 8Gi
内存 - Mount USB Devices: 挂载USB设备
- GPU Configuration: 显卡直通,0为关,1为1
完成
连接
容器外连接
也就是正常连接,使用sql客户端连接
容器内连接
推荐使用自带的DNS连接
例如custom-app创建的mariadb的DNS为
mariadb-custom-app.ix-mariadb.svc.cluster.local
其它应用在数据库host填入该DNS,和端口、账号密码,就可以连接数据库
DNS查询可到TrueCharts的官方文档的Linking Apps Internally底部
如社区的emby
则是
名字一样的方便之处
额外
建议需要用到数据库的每个应用服务都单独使用一个账号密码,并创建只有该数据库的用户
# 创建用户testUser密码为123456
CREATE USER 'testUser'@'%' IDENTIFIED BY '123456';
# 授予用户testUser指定student数据库权限
grant all privileges on student.* to testUser@'%' identified by '123456';
# 刷新权限
flush privileges;
# %指的是任意客户端登录,有需要可以改为localhost
小结
自己创建一个可管理的数据库在后续还是给予不少方便之处,还可以弄定时备份数据库,不至于数据丢失无法找回。镜像方面用官方的有时候些应用会出现权限等问题,用linuxserver可以很好的规避这些问题,而且配置目录也是经过优化。