资讯动态

Terminus 中集成 MariaDB 中间件:通过 OlaresManifest.yaml 声明式接入应用数据库

发布时间:2026/10/14 15:55:08 来源:尧图企业网站定制
云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载本文基于 Terminus 仓库中的官方文档 mw-integrate-with-mariadb.md 展开讲解如何在 Olares 平台上安装 MariaDB 服务、在OlaresManifest.yaml中声明数据库依赖并把系统注入的.Values.mariadb.*值映射为容器环境变量。读完本文你将掌握完整的应用集成流程并理解从 manifest 声明到底层MiddlewareRequest控制器自动建库、建用户、授权的全链路实现。前置条件从 Market 安装 MariaDB 服务MariaDB 与 PostgreSQL、Redis 不同它不是系统预装服务需要先手动安装后才能被应用声明依赖这一点在 系统注入变量文档 中明确说明MongoDB, MinIO, RabbitMQ, MySQL and MariaDB must be installed separately before your app can use them。安装步骤从 Launchpad 打开 Market搜索 MariaDB点击Get再点击Install等待安装完成。安装完成后该服务及其连接信息会出现在 Control Hub 的 Middleware 列表中。从源码结构看MariaDB 服务运行在独立的mariadb-middleware命名空间中中间件控制器的 handler_mariadb.go 中定义了const mariadbNamespace mariadb-middleware而集群内访问地址为mariadb-mariadb-headless.mariadb-middleware.svc.cluster.local:3306见 getMariaDBHost。helper.go 中的ListMariadbClusters则表明该服务底层是一个名为mariadb的 KubeBlocks 集群实例由平台统一管理。在OlaresManifest.yaml中声明 MariaDB 依赖在应用的OlaresManifest.yaml中通过middleware段声明所需的 MariaDB 配置username字段指定数据库用户名databases字段请求一个或多个数据库每个数据库名将作为.Values.mariadb.databases中的 key 被注入。示例middleware: mariadb: username: mariadbclient databases: - name: aaaOlaresManifest.yaml是 Olares 应用包OAC中约定俗成的清单文件名manifest.go 中即定义为常量ManifestFileName OlaresManifest.yaml解析流程由 LoadManifestFile 驱动。请求如何被翻译成集群资源应用部署时app-service 会基于 manifest 中的声明渲染出一个MiddlewareRequest自定义资源。middleware_request_tpl.go 中的mariadbRequest模板展示了最终产物apiVersion: apr.bytetrade.io/v1alpha1 kind: MiddlewareRequest metadata: name: {{ .AppName }}-mariadb namespace: {{ .Namespace }} spec: app: {{ .AppName }} appNamespace: {{ .AppName }} middleware: mariadb mariadb: databases: - name: {{ $v.Name }} password: valueFrom: secretKeyRef: name: {{ .AppName }}-{{ .Namespace }}-mariadb-password key: password user: {{ .Middleware.Username }}该 CRD 的完整 schema 定义在 apr.bytetrade.io_middlewarerequests.yaml。由模板可知几个关键事实请求资源命名为应用名-mariadb与应用一一对应密码默认不是明文除非你显式提供否则模板会引用系统自动生成的 Secret应用名-命名空间-mariadb-passwordmiddleware.go 显示最终下发到数据库的用户名由三部分拼装而成manifest 中的 username-属主用户名-应用名。也就是说 manifest 里的username: mariadbclient是一个前缀真实账号带有属主与应用标识天然实现了多应用、多用户隔离。将注入值映射为容器环境变量声明依赖后Olares 会在部署时把 MariaDB 的连接信息注入应用的values.yaml。由于 Helm values 不会自动进入容器你需要在部署模板的env段显式映射.Values.mariadb.*字段。示例containers: - name: my-app # For MariaDB, the corresponding value is as follows env: - name: MDB_HOST value: {{ .Values.mariadb.host }} - name: MDB_PORT value: {{ .Values.mariadb.port }} - name: MDB_USER value: {{ .Values.mariadb.username }} - name: MDB_PASSWORD value: {{ .Values.mariadb.password }} # Database Name # The database name configured in OlaresManifest (e.g., aaa) - name: MDB_DB value: {{ .Values.mariadb.databases.aaa }}环境变量名MDB_HOST等以你的应用实际要求为准关键是value一侧引用的.Values.mariadb.*路径必须与值参考表一致。关于.Values.mariadb.databases.aaa取到的值从 handler_mariadb.go 的实现看执行CREATE DATABASE时使用的名称来自 GetDatabaseName即appNamespace_name。因此可以推断注入回.Values.mariadb.databases.name的值就是控制器实际创建的数据库名应用直接使用该值连接即可无需自行拼接命名空间前缀。MariaDB values 参考MariaDB values 是部署期间注入values.yaml的预定义运行时值由系统管理、用户不可编辑。ValueTypeDescription.Values.mariadb.hostStringMariaDB host..Values.mariadb.portNumberMariaDB port..Values.mariadb.usernameStringMariaDB username..Values.mariadb.passwordStringMariaDB password..Values.mariadb.databasesMapString,StringRequested databases, keyed by database name. For example, a request forapp_dbis available at.Values.mariadb.databases.app_db.完整的中间件值参考含 PostgreSQL、MySQL、MongoDB 等服务可参见 系统注入运行时变量文档。底层执行链控制器如何创建数据库与账号声明依赖并安装应用后真正干活的是MiddlewareRequest的 operator 控制器。createOrUpdateMariaDBRequest 的执行顺序是从mariadb-middleware命名空间的 Secretmariadb-mariadb-account-root见 FindMariaDBAdminUser读取管理员账号用管理员连接数据库执行CREATE USER IF NOT EXISTS user IDENTIFIED BY password遍历spec.mariadb.databases逐个执行CREATE DATABASE IF NOT EXISTS appNamespace_name对每个库执行GRANT ALL PRIVILEGES ON db.* TO user最后FLUSH PRIVILEGES使授权生效。对应的清理逻辑在 deleteMariaDBRequest卸载应用时会DROP USER并DROP DATABASE回收所有为该应用创建的数据库若管理员 Secret 已不存在说明 MariaDB 服务本身已被移除删除操作会安全地跳过。这套声明即开通、卸载即回收的机制正是 Olares 中间件集成的核心价值应用开发者只需在 manifest 里写几行 YAML账号隔离、建库、授权、回收全部由平台自动完成。本地开发提示无集群环境下渲染与校验 chart开发应用 chart 时oac工具可以脱离真实集群对 chart 做 dry-run 渲染。values.go 的BuildValues会构造一组假的注入值供 Helm 模板渲染其中 MariaDB 对应 第 45 行mariadb: map[string]interface{}{databases: map[string]interface{}{}},这意味着本地校验时.Values.mariadb.databases是一个空 map——如果你的模板写死了.Values.mariadb.databases.aaa渲染不会报错但会渲染为空字符串建议模板中对 databases 使用has/index判断或提供default以便本地 lint 与真实部署行为一致。安装后如何验证数据集成完成后如需连接服务检查数据、执行查询或排查问题可参考 查看 MariaDB 数据文档它介绍了通过 Olares 终端kubectl exec进入mariadb-middleware命名空间下的 Pod 使用mysql -u root -p连接以及通过 Bytebase 图形化管理 schema 的完整步骤连接信息从 Control Hub 的 Middleware 详情页获取。中间件总览与各服务的接入/管理文档导航见 Middleware in Olares。赞分享云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载相关推荐Terminus 应用开发指南用 OlaresManifest.yaml 的 envs 声明式环境变量注入应用配置Terminus 应用开发指南用 OlaresManifest.yaml 的 envs 声明式环境变量注入应用配置 在 TerminusOlares生态中云原生后端运维TerminusOlares应用集成 Elasticsearch 中间件OlaresManifest 声明、values 注入与环境变量映射TerminusOlares应用集成 Elasticsearch 中间件OlaresManifest 声明、values 注入与环境变量映射 本篇基于 T云原生后端运维告别繁琐安装LKY Office Tools如何彻底改变Office部署体验告别繁琐安装LKY Office Tools如何彻底改变Office部署体验 还在为Office安装过程中的各种复杂步骤而烦恼吗从下载、安装到激活每一个环桌面应用CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑