TrueNAS SCALE custom-app&mariadb

前言

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

    image-20230315134628729

  • Node IP: 选择桥接网络的IP

  • Route v4 Interface: 选择桥接网口
  • Route v4 Gateway: 路由网关
  • Enable Container Image Updates: √
  • Enable GPU support: √
  • Enable Integrated Loadbalancer: √

    image-20230315135018257

    保存

  • 时区
    TrueNAS 容器默认使用主机的时区
    System Settings–General–Localization设置好需要的时区

    image-20230315135702925

  • 创建应用数据集
    Datasets–选中对应目录Add Dataset

  • Name: mariadb

其它默认,保存

image-20230315140042437

权限推荐使用ACL模式,NFS4_RESTRICTED
image-20230314194226625

随后添加Item:

  • User: apps
  • Permissions: Full Control

有需要还可以加上smb的用户(权限Modify就好),其它保持默认。保存

image-20230315140255212

有需要可以在命令行界面、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

image-20230315132354381

保存后,点击Refresh All更新目录

等待些时间,在Available Applications就可以看到除了Official Charts官方提供的应用还有社区的应用也加载进来了,


安装

搜索custom-app

image-20230315134247767

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客户端连接

image-20230315151555985

容器内连接

推荐使用自带的DNS连接

例如custom-app创建的mariadb的DNS为

mariadb-custom-app.ix-mariadb.svc.cluster.local

image-20230315152130080

其它应用在数据库host填入该DNS,和端口、账号密码,就可以连接数据库

image-20230315154833570

DNS查询可到TrueCharts的官方文档的Linking Apps Internally底部

image-20230315152254301

如社区的emby则是

image-20230315152447717

名字一样的方便之处


额外

建议需要用到数据库的每个应用服务都单独使用一个账号密码,并创建只有该数据库的用户

# 创建用户testUser密码为123456
CREATE USER 'testUser'@'%' IDENTIFIED BY '123456';

# 授予用户testUser指定student数据库权限
grant all privileges on student.* to testUser@'%' identified by '123456';
# 刷新权限
flush privileges;

# %指的是任意客户端登录,有需要可以改为localhost

小结

自己创建一个可管理的数据库在后续还是给予不少方便之处,还可以弄定时备份数据库,不至于数据丢失无法找回。镜像方面用官方的有时候些应用会出现权限等问题,用linuxserver可以很好的规避这些问题,而且配置目录也是经过优化。

参考

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇