面向 Kubernetes 的 MySQL 离线交付与运维工具包。
这个仓库不是单纯放一个 StatefulSet manifest,而是把下面几类能力按不同产物包做了拆分:
- MySQL 安装与对齐
- 监控补装
- 压测
- 离线
.run安装包交付
从当前版本开始,备份恢复统一接入独立数据保护系统;mysql-installer 会在安装阶段自动注册 MySQL 对应的 BackupAddon/BackupSource/BackupPolicy,不再单独交付 addon runner 镜像。
apps_mysql 和其他单一中间件仓库不完全一样,它会构建出 3 类产物:
mysql-installer-<arch>.runmysql-monitoring-<arch>.runmysql-benchmark-<arch>.run
可以这样理解:
- 想安装 MySQL 本体,用
mysql-installer - 已有 MySQL,只想补监控,用
mysql-monitoring - 只想做标准压测,用
mysql-benchmark
也就是说,apps_mysql 已经把“数据库本体、外围监控、压测”拆开了,使用者不需要为了压测或补监控把整套安装器一起带上。
适合:
- 首次离线安装 MySQL
- 对齐 StatefulSet / Service / PVC / Secret / ConfigMap
- 同时决定是否启用 exporter、ServiceMonitor、NodePort、Fluent Bit sidecar
支持动作:
installuninstallstatusaddon-installaddon-uninstalladdon-statusbenchmarkhelp
适合:
- 集群里已经有 MySQL
- 不想因为补监控而改动 MySQL StatefulSet
- 只想额外部署一个独立 exporter 和
ServiceMonitor
支持动作:
addon-installaddon-uninstalladdon-statusstatushelp
适合:
- 只对某个 MySQL 进行标准化压测
- 不携带安装和监控能力
支持动作:
benchmarkhelp
如果你直接使用 mysql-installer 默认安装,关键默认值如下:
- namespace:
aict - StatefulSet name:
mysql - Service name:
mysql - NodePort Service name:
mysql-nodeport - auth secret:
mysql-auth - replicas:
1 - root password:
passw0rd - storage class:
nfs - storage size:
10Gi - MySQL port:
3306 - NodePort:
30306 - monitoring:
true - ServiceMonitor:
true - metrics service name:
mysql-metrics - metrics port:
9104 - Fluent Bit sidecar:
false - wait timeout:
10m - target image repo:
sealos.hub:5000/kube4 - resource profile:
mid
Installer now supports:
--resource-profile low--resource-profile mid--resource-profile midd--resource-profile high
Default is mid. midd is accepted as an alias of mid.
Profile intent:
low: demo or lightweight validationmid: normal shared environment, baseline for500-1000concurrency and around10000usershigh: heavier traffic or larger working set
Per-profile baseline:
| Profile | MySQL | Exporter | Fluent Bit | Init container |
|---|---|---|---|---|
low |
200m / 512Mi request, 500m / 1Gi limit |
50m / 64Mi request, 100m / 128Mi limit |
50m / 64Mi request, 100m / 128Mi limit |
20m / 32Mi request, 100m / 64Mi limit |
mid |
500m / 1Gi request, 1 / 2Gi limit |
100m / 128Mi request, 200m / 256Mi limit |
100m / 128Mi request, 200m / 256Mi limit |
50m / 64Mi request, 200m / 128Mi limit |
high |
1 / 2Gi request, 2 / 4Gi limit |
200m / 256Mi request, 500m / 512Mi limit |
200m / 256Mi request, 500m / 512Mi limit |
100m / 128Mi request, 300m / 256Mi limit |
这套默认值是“单实例 MySQL + 默认开启监控 + 默认开放 NodePort”的交付方案。
默认安装:
./mysql-installer-amd64.run install -y会创建:
- 1 个 MySQL StatefulSet
- 1 个 headless Service:
mysql - 1 个 NodePort Service:
mysql-nodeport - 1 个 metrics Service:
mysql-metrics - 1 个
ServiceMonitor - 1 个 PVC
- 1 个 MySQL root Secret
- 1 个 probe ConfigMap
- 1 个 init users ConfigMap
- 1 个 MySQL 配置 ConfigMap
如果启用了 --enable-fluentbit,还会多出:
- 1 个 Fluent Bit sidecar
- 1 个 Fluent Bit ConfigMap
这部分是给新接手的人和 AI 最常用的“系统契约”。
默认 MySQL StatefulSet 名和 headless Service 都是 mysql,因此常用地址是:
- 直接连单实例:
mysql-0.mysql.aict.svc.cluster.local:3306 - 通过 service 访问:
mysql.aict.svc.cluster.local:3306
对于需要稳定连接单实例的下游组件,推荐使用:
mysql-0.mysql.aict
这也是 apps_nacos 当前默认使用的 MySQL 主机名。
默认启用 NodePort,因此可以通过任意工作节点 IP 访问:
<NODE_IP>:30306
默认会初始化这些账号:
root密码来自mysql-authSecret,默认值是passw0rdlocalroot@localhost默认密码:local@paasw0rd主要用于容器内本地维护mysqlhealthchecker@localhost默认密码:health@passw0rd仅用于健康检查repl@%默认密码:repl@passw0rd用于复制场景orch@%默认密码:orch@passw0rd用于编排/巡检类场景
如果你使用 addon-install 部署独立 exporter,还会额外创建:
mysqld_exporter默认密码:exporter@passw0rd
注意:
- 这些密码是仓库默认值,适合测试和初始交付
- 生产环境建议在首次安装时就显式改掉
root密码 - 如果你把这套文档给 AI 使用,默认也应该要求它优先显式传入生产密码,而不是依赖仓库默认值
默认主容器资源:
- request:
500m CPU / 1Gi memory - limit:
1 CPU / 2Gi memory
默认 exporter 资源:
- request:
100m CPU / 128Mi memory - limit:
200m CPU / 256Mi memory
开启 --enable-fluentbit 后,默认资源:
- request:
100m CPU / 128Mi memory - limit:
200m CPU / 256Mi memory
默认单实例并开启内嵌监控时:
| 项目 | 默认值 |
|---|---|
| CPU request | 600m |
| Memory request | 1152Mi |
| CPU limit | 1.2 |
| Memory limit | 2304Mi |
如果同时启用了 Fluent Bit,则额外增加:
- request:
100m CPU / 128Mi memory - limit:
200m CPU / 256Mi memory
默认 PVC:
10Gi
如果你把副本数调成 N,最低持久化存储需求也应按 N x 10Gi 估算。
日志这块是 apps_mysql 和其他仓库最不一样的地方之一,因为它同时考虑了:
kubectl logs- 平台日志采集
- 可选 Fluent Bit sidecar
当前默认行为:
- 错误日志写入
/var/log/mysql/error.log - slow log 写入
/var/log/mysql/slow.log - 默认把错误日志转到容器
stderr - 默认把 slow log 转到容器
stdout
所以默认就可以直接:
kubectl logs -n aict mysql-0 -c mysql启用 --enable-fluentbit 后:
- MySQL 错误日志仍保留在
mysql容器stderr - slow log 改为文件
fluent-bitsidecar 负责把 slow log 转发到自己的stdout
适用建议:
- 平台有统一日志采集时,优先直接采容器 stdout/stderr
- 只有明确需要 Pod 内慢日志文件时,再启用
--enable-fluentbit
MySQL 监控支持两种模式:
由 mysql-installer 直接把 exporter sidecar 放进 MySQL Pod。
默认行为:
monitoring=trueserviceMonitor=true- metrics Service:
mysql-metrics - metrics 端口:
9104 ServiceMonitor标签:monitoring.archinfra.io/stack=default
由 mysql-monitoring 或 mysql-installer addon-install 单独部署一个 exporter Deployment。
默认对象:
- Deployment:
mysql-exporter - Service:
mysql-exporter - Secret:
mysql-exporter-auth - ServiceMonitor:
mysql-exporter-monitor
默认监控目标:
mysql-0.mysql.aict:3306
如果你的 Prometheus Stack 按我们统一方案启用了按标签发现,那么 MySQL 的默认 ServiceMonitor 会被自动发现,因为它默认带了:
monitoring.archinfra.io/stack=default
MySQL 默认不依赖这些组件启动:
- Redis
- Nacos
- MinIO
- RabbitMQ
- MongoDB
- Milvus
在我们当前这套组件体系里,最直接依赖 MySQL 的是:
apps_nacos
apps_nacos 的默认参数就是:
- host:
mysql-0.mysql.aict - port:
3306 - database:
frame_nacos_demo - user:
root
所以如果你是先装 MySQL 再装 Nacos,这两个组件天然能接上。
apps_mysql 不直接执行备份恢复任务,但会负责把 MySQL 注册进独立数据保护系统。
当前边界是:
- 安装、监控、压测:
apps_mysql - 备份恢复执行、多中心数据保护:独立数据保护系统
- MySQL 备份接入注册:
mysql-installer
不要再从 apps_mysql 中寻找:
backuprestoreverify-backup-restore
但可以直接通过 install 注册:
BackupAddon/mysql-dumpBackupSource/<namespace>-<sts-name>BackupPolicy/<namespace>-<sts-name>-backup
./mysql-installer-amd64.run install \
--namespace aict \
--root-password 'StrongPassw0rd' \
--backup-storage-name minio-primary \
-y./mysql-installer-amd64.run install \
--disable-nodeport \
--root-password 'StrongPassw0rd' \
-y./mysql-installer-amd64.run install \
--disable-monitoring \
--disable-service-monitor \
--root-password 'StrongPassw0rd' \
-y./mysql-monitoring-amd64.run addon-install \
--namespace aict \
--mysql-host mysql-0.mysql.aict \
--mysql-password 'StrongPassw0rd' \
-y./mysql-benchmark-amd64.run benchmark \
--namespace aict \
--mysql-host mysql-0.mysql.aict \
--mysql-password 'StrongPassw0rd' \
-y如果后续把安装包放到服务器上,希望由 AI 自动安装,这几个规则最重要。
如果没有额外约束,优先使用:
mysql-installernamespace=aict- 单实例
- 开启监控
- 开启
ServiceMonitor - 开启 NodePort
- 显式传入
--root-password
可以把下面这些作为安装成功信号:
mysql-0PodRunningmysqlService 存在mysql-nodeportService 存在- PVC 已绑定
mysql-metricsService 存在- 如果集群有
ServiceMonitorCRD,则mysql-monitor存在 kubectl logs能正常看到 MySQL 日志
- PVC 长时间
Pending mysql-0CrashLoopBackOffmysql-authSecret 不存在或密码未正确传入- metrics Service 存在但 exporter 没启动
- 误以为
apps_mysql会直接执行backup/restore;实际仍由 dataprotection 控制器执行
./mysql-installer-amd64.run status -n aict
kubectl get pods,svc,pvc -n aict
kubectl logs -n aict mysql-0 -c mysql --tail=200
kubectl get servicemonitor -A | grep mysql如果是独立 addon 监控:
kubectl get deploy,svc -n aict | grep mysql-exporter
kubectl logs -n aict deploy/mysql-exporter --tail=200版本来源:
- 仓库根目录
VERSION - GitHub Release tag 统一使用
v<version>,例如v1.5.13 install.sh中显示的版本、.run产物名、release 附件名都由同一版本规则生成
当前构建会产出:
mysql-installer-v<version>-<arch>.runmysql-monitoring-v<version>-<arch>.runmysql-benchmark-v<version>-<arch>.run
运行时依赖:
- 目标机器需要
kubectl - 如需导入和推送离线镜像,还需要
docker - 最终
.run安装包运行时不依赖jq
GitHub Actions 负责:
main/master多架构构建v*tag 发布 release
本地构建示例:
./build.sh --arch amd64 --profile integrated
./build.sh --arch arm64 --profile monitoring --version v1.5.13
./build.sh --arch all --profile all --version v1.5.13发布 tag 版本建议流程:
- 修改根目录
VERSION - 本地执行一次
./build.sh --arch amd64 --profile integrated做 smoke build - 提交代码并推送
- 创建并推送同版本 tag,例如
v1.5.13 - GitHub Actions 自动生成 release 并上传带版本号的
.run和.sha256
Default install now enables:
monitoring=true- embedded exporter
ServiceMonitorPrometheusRule- Grafana dashboard
ConfigMap
Grafana auto-import contract:
- dashboard label:
grafana_dashboard=1 - platform label:
monitoring.archinfra.io/stack=default - folder annotation:
grafana_folder=Middleware/MySQL
Built-in alerts:
MySQLDownMySQLConnectionsHighMySQLSlowQueriesHigh
Built-in dashboard panels:
- MySQL Up
- Threads Connected
- Threads Running
- Slow Queries / 1h
- Query Rate
- Connections
If the cluster does not provide the PrometheusRule CRD, the installer automatically disables rule creation and keeps the main MySQL deployment path available.