astronomerinc/ap-db-bootstrapper本镜像为Kubernetes环境下的Init Container,旨在通过Kubernetes Secrets存储的配置信息,自动化完成数据库的初始化流程。其核心功能是在Pod启动阶段,读取 Secrets 中的数据库连接参数(如用户名、密码、地址等),执行必要的初始化操作(如创建数据库、用户、权限配置或SQL脚本执行),确保主应用容器启动前数据库环境已准备就绪。初始化完成后自动退出(符合Init Container生命周期特性),若失败则终止Pod启动并输出错误信息,便于问题排查。
需提前创建存储数据库连接参数的Secrets(以下以MySQL为例),包含数据库地址、端口、用户名、密码等关键信息。若需执行SQL脚本,可额外创建存储脚本的Secrets。
yaml# db-credentials-secret.yaml apiVersion: v1 kind: Secret metadata: name: db-credentials namespace: default # 与Pod同命名空间 type: Opaque data: # 注意:值需Base64编码(可通过 echo -n "value" | base64 生成) db_host: bXlzcWwubG9jYWw= # 示例:mysql.local(Base64编码后) db_port: NTQzMg== # 示例:5432(PostgreSQL默认端口)或3306(MySQL) db_user: dXNlcjE= # 示例:user1 db_password: cGFzc3dvcmQxMjM= # 示例:password123 db_name: bXlkYg== # 示例:mydb(需初始化的数据库名称)
yaml# init-sql-secret.yaml apiVersion: v1 kind: Secret metadata: name: init-sql-scripts namespace: default type: Opaque data: # 多行SQL脚本示例(创建表、插入初始数据) schema.sql: Q1JFQVRFIFRBQkxFIGZvbyAoCmNvZGluZzogdmFyaWFudCwKbmFtZTogc3RyaW5nCik7CgogSU5TRVJUIElOVE8gZm9vICh2Y***YW50LCAnYmFyJyk7 # Base64编码后的SQL内容
在Pod定义中,通过initContainers字段配置本镜像,指定所需环境变量(用于关联Secrets和初始化参数)。主应用容器需依赖Init Container完成后启动(通过initContainers默认依赖关系实现)。
yaml# app-pod.yaml apiVersion: v1 kind: Pod metadata: name: app-with-db-init namespace: default spec: initContainers: - name: db-init image: [镜像名称] # 替换为实际镜像地址(如registry.example.com/db-bootstrap:v1.0) env: # 数据库类型(必填,支持:mysql/postgresql/mariadb/sqlserver) - name: DB_TYPE value: "postgresql" # 数据库连接参数Secrets配置(必填) - name: SECRET_DB_CREDENTIALS value: "db-credentials" # 对应上文创建的db-credentials Secrets名称 - name: SECRET_DB_HOST_KEY value: "db_host" # Secrets中存储主机地址的键名(对应data.db_host) - name: SECRET_DB_PORT_KEY value: "db_port" # Secrets中存储端口的键名 - name: SECRET_DB_USER_KEY value: "db_user" # Secrets中存储用户名的键名 - name: SECRET_DB_PASSWORD_KEY value: "db_password" # Secrets中存储密码的键名 - name: SECRET_DB_NAME_KEY value: "db_name" # Secrets中存储数据库名称的键名 # SQL脚本配置(可选,若无需脚本则删除以下2项) - name: SECRET_SQL_SCRIPTS value: "init-sql-scripts" # 对应上文创建的SQL脚本Secrets名称 - name: SECRET_SQL_KEY value: "schema.sql" # Secrets中存储SQL脚本的键名 # 日志级别(可选,默认:info,支持:debug/info/warn/error) - name: LOG_LEVEL value: "debug" containers: - name: main-app image: [主应用镜像] # 主应用容器镜像 # 主应用容器配置(如端口、环境变量等) ports: - containerPort: 8080
| 环境变量名 | 描述 | 取值范围/示例 | 是否必填 | 默认值 |
|---|---|---|---|---|
DB_TYPE | 目标数据库类型 | mysql/postgresql/mariadb/sqlserver | 是 | - |
SECRET_DB_CREDENTIALS | 存储数据库连接参数的Secrets名称 | db-credentials | 是 | - |
SECRET_DB_HOST_KEY | Secrets中存储数据库主机地址的键名 | db_host | 是 | - |
SECRET_DB_PORT_KEY | Secrets中存储数据库端口的键名 | db_port | 是 | - |
SECRET_DB_USER_KEY | Secrets中存储数据库用户名的键名 | db_user | 是 | - |
SECRET_DB_PASSWORD_KEY | Secrets中存储数据库密码的键名 | db_password | 是 | - |
SECRET_DB_NAME_KEY | Secrets中存储目标数据库名称的键名(需初始化的数据库) | db_name | 否 | default |
SECRET_SQL_SCRIPTS | 存储SQL初始化脚本的Secrets名称(若需执行脚本) | init-sql-scripts | 否 | - |
SECRET_SQL_KEY | Secrets中存储SQL脚本内容的键名(配合SECRET_SQL_SCRIPTS使用) | schema.sql | 否 | - |
LOG_LEVEL | 日志输出级别 | debug/info/warn/error | 否 | info |
CONNECT_TIMEOUT | 数据库连接超时时间(秒) | 10-300 | 否 | 30 |
RETRY_MAX_ATTEMPTS | 数据库连接失败后的重试次数 | 1-10 | 否 | 3 |
initContainers中的db-init容器。db-init容器通过环境变量指定的Secrets名称和键名,从Kubernetes API获取数据库连接参数和SQL脚本(若配置)。CONNECT_TIMEOUT和RETRY_MAX_ATTEMPTS控制)。SECRET_DB_NAME_KEY指定的数据库、授予用户权限)。SECRET_SQL_KEY对应的SQL内容(支持多行脚本,按顺序执行)。Init:Error,需通过日志排查问题。containers字段中的主应用容器。kubectl describe pod <pod-name>),确认Secrets是否存在、键名是否正确(如SECRET_DB_HOST_KEY是否与Secrets中的键匹配)。kubectl logs <pod-name> -c db-init),确认数据库地址、端口是否可达,用户名/密码是否正确。kubectl get secret init-sql-scripts -o jsonpath='{.data.schema.sql}' | base64 -d解码查看原始脚本)。



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务