fix(k8s): 同步 local 模式数据路径为 /app/sqlite3.db 与二进制同级
- deployment/quick-deploy: PVC 挂载 sqlite3.db/redka.db 到 /app/,含旧 data/ 迁移 - configmap 与 run.sh 状态输出对齐新路径 - README 补充 local 模式说明
This commit is contained in:
1 parent
d27a2e6cbe
commit
8df0acb338
7 files changed
+71
-10
No files matched your search
@@ -64,7 +64,7 @@ func Load() *Config {
|
|||||||
viper.SetDefault("port", "8080")
|
viper.SetDefault("port", "8080")
|
||||||
viper.SetDefault("log_level", "info")
|
viper.SetDefault("log_level", "info")
|
||||||
viper.SetDefault("database.driver", "sqlite")
|
viper.SetDefault("database.driver", "sqlite")
|
||||||
viper.SetDefault("database.dbname", "data/aiops.db")
|
viper.SetDefault("database.dbname", "sqlite3.db")
|
||||||
viper.SetDefault("database.host", "localhost")
|
viper.SetDefault("database.host", "localhost")
|
||||||
viper.SetDefault("database.port", 3306)
|
viper.SetDefault("database.port", 3306)
|
||||||
viper.SetDefault("database.charset", "utf8mb4")
|
viper.SetDefault("database.charset", "utf8mb4")
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ AIOps 平台在 Kubernetes 上的部署清单(Go/Gin 后端 + go:embed 前端
|
|||||||
| `mysql.yaml` | MySQL 8.0 StatefulSet + Headless Service + 10Gi 持久卷 |
|
| `mysql.yaml` | MySQL 8.0 StatefulSet + Headless Service + 10Gi 持久卷 |
|
||||||
| `redis.yaml` | Redis 7 StatefulSet + Headless Service + 2Gi 持久卷 |
|
| `redis.yaml` | Redis 7 StatefulSet + Headless Service + 2Gi 持久卷 |
|
||||||
| `deployment.yaml` | AIOps Deployment(embed 单端口 8080)+ NodePort Service (30080) |
|
| `deployment.yaml` | AIOps Deployment(embed 单端口 8080)+ NodePort Service (30080) |
|
||||||
|
| `pvc-aiops-data.yaml` | local 模式 PVC:`sqlite3.db` / `redka.db` 与 `/app/aiops` 同级 |
|
||||||
| `ingress.yaml` | Ingress:所有流量 → aiops:8080(含 WebSocket 支持) |
|
| `ingress.yaml` | Ingress:所有流量 → aiops:8080(含 WebSocket 支持) |
|
||||||
|
|
||||||
## 架构
|
## 架构
|
||||||
@@ -123,6 +124,17 @@ kubectl -n devops get pvc
|
|||||||
|
|
||||||
## 配置说明
|
## 配置说明
|
||||||
|
|
||||||
|
### local 模式(默认 `MODE=local`)
|
||||||
|
|
||||||
|
- 容器内工作目录 `/app`,数据文件与二进制同级:
|
||||||
|
- `/app/aiops` — 应用二进制(镜像内)
|
||||||
|
- `/app/sqlite3.db` — SQLite(PVC 持久化)
|
||||||
|
- `/app/redka.db` — 本地缓存(PVC 持久化)
|
||||||
|
- `replicas` 必须为 **1**(SQLite 不支持多副本共享);`./run.sh kubernetes scale` 扩到 >1 时会自动切 `MODE=release` + MySQL/Redis
|
||||||
|
- 旧版 PVC 若存有 `data/sqlite3.db`,init 容器会自动迁移到根路径
|
||||||
|
|
||||||
|
### 集群凭据
|
||||||
|
|
||||||
| 项目 | 来源 | 值 |
|
| 项目 | 来源 | 值 |
|
||||||
|------|------|----|
|
|------|------|----|
|
||||||
| MySQL 业务账号 | Secret `aiops-secret` | 用户 `aiops` / 密码 `aiops_pass_2026` / 库 `aiops` |
|
| MySQL 业务账号 | Secret `aiops-secret` | 用户 `aiops` / 密码 `aiops_pass_2026` / 库 `aiops` |
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ data:
|
|||||||
|
|
||||||
database:
|
database:
|
||||||
driver: sqlite
|
driver: sqlite
|
||||||
dbname: data/sqlite3.db
|
dbname: sqlite3.db
|
||||||
max_conn: 100
|
max_conn: 100
|
||||||
max_idle: 10
|
max_idle: 10
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,25 @@ spec:
|
|||||||
hostNetwork: true
|
hostNetwork: true
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
enableServiceLinks: false
|
enableServiceLinks: false
|
||||||
|
# 首次部署时在 PVC 中预创建库文件,避免 subPath 挂载成目录 // Logan.Li
|
||||||
|
initContainers:
|
||||||
|
- name: init-local-db
|
||||||
|
image: busybox:1.36
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
if [ -f /vol/data/sqlite3.db ] && [ ! -f /vol/sqlite3.db ]; then
|
||||||
|
cp /vol/data/sqlite3.db /vol/sqlite3.db
|
||||||
|
fi
|
||||||
|
if [ -f /vol/data/redka/redka.db ] && [ ! -f /vol/redka.db ]; then
|
||||||
|
cp /vol/data/redka/redka.db /vol/redka.db
|
||||||
|
fi
|
||||||
|
[ -f /vol/sqlite3.db ] || install -m 644 /dev/null /vol/sqlite3.db
|
||||||
|
[ -f /vol/redka.db ] || install -m 644 /dev/null /vol/redka.db
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /vol
|
||||||
containers:
|
containers:
|
||||||
- name: aiops
|
- name: aiops
|
||||||
image: 10.10.10.72/library/aiops:embed
|
image: 10.10.10.72/library/aiops:embed
|
||||||
@@ -77,8 +96,13 @@ spec:
|
|||||||
readOnly: true
|
readOnly: true
|
||||||
- name: uploads
|
- name: uploads
|
||||||
mountPath: /app/uploads
|
mountPath: /app/uploads
|
||||||
|
# local 模式:sqlite3.db / redka.db 与 /app/aiops 同级持久化 // Logan.Li
|
||||||
- name: data
|
- name: data
|
||||||
mountPath: /app/data
|
mountPath: /app/sqlite3.db
|
||||||
|
subPath: sqlite3.db
|
||||||
|
- name: data
|
||||||
|
mountPath: /app/redka.db
|
||||||
|
subPath: redka.db
|
||||||
|
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# pvc-aiops-data.yaml — local 模式 SQLite + redka 数据持久化
|
# pvc-aiops-data.yaml — local 模式 sqlite3.db + redka.db 持久化(挂载到 /app/ 与二进制同级)
|
||||||
# 部署: kubectl apply -f pvc-aiops-data.yaml
|
# 部署: kubectl apply -f pvc-aiops-data.yaml
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# 两种模式:
|
# 两种模式:
|
||||||
# 远程模式 (默认): MODE=release, 连接外部 MySQL + Redis
|
# 远程模式 (默认): MODE=release, 连接外部 MySQL + Redis
|
||||||
# 本地模式: MODE=local, 自动 SQLite (data/sqlite3.db) + redka 本地缓存
|
# 本地模式: MODE=local, 自动 SQLite (sqlite3.db) + redka (redka.db),与二进制同级 /app/
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
@@ -19,7 +19,7 @@ data:
|
|||||||
|
|
||||||
database:
|
database:
|
||||||
driver: sqlite
|
driver: sqlite
|
||||||
dbname: data/sqlite3.db
|
dbname: sqlite3.db
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
driver: redka
|
driver: redka
|
||||||
@@ -55,6 +55,24 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
hostNetwork: true
|
hostNetwork: true
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
|
initContainers:
|
||||||
|
- name: init-local-db
|
||||||
|
image: busybox:1.36
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
if [ -f /vol/data/sqlite3.db ] && [ ! -f /vol/sqlite3.db ]; then
|
||||||
|
cp /vol/data/sqlite3.db /vol/sqlite3.db
|
||||||
|
fi
|
||||||
|
if [ -f /vol/data/redka/redka.db ] && [ ! -f /vol/redka.db ]; then
|
||||||
|
cp /vol/data/redka/redka.db /vol/redka.db
|
||||||
|
fi
|
||||||
|
[ -f /vol/sqlite3.db ] || install -m 644 /dev/null /vol/sqlite3.db
|
||||||
|
[ -f /vol/redka.db ] || install -m 644 /dev/null /vol/redka.db
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /vol
|
||||||
containers:
|
containers:
|
||||||
- name: aiops
|
- name: aiops
|
||||||
image: aiops:embed
|
image: aiops:embed
|
||||||
@@ -84,7 +102,11 @@ spec:
|
|||||||
subPath: config.yaml
|
subPath: config.yaml
|
||||||
readOnly: true
|
readOnly: true
|
||||||
- name: data
|
- name: data
|
||||||
mountPath: /app/data
|
mountPath: /app/sqlite3.db
|
||||||
|
subPath: sqlite3.db
|
||||||
|
- name: data
|
||||||
|
mountPath: /app/redka.db
|
||||||
|
subPath: redka.db
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: 100m
|
cpu: 100m
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ cmd_dev() {
|
|||||||
info "前端地址: http://localhost:$FRONTEND_PORT"
|
info "前端地址: http://localhost:$FRONTEND_PORT"
|
||||||
info "后端地址: http://localhost:$BACKEND_PORT"
|
info "后端地址: http://localhost:$BACKEND_PORT"
|
||||||
info "健康检查: http://localhost:$BACKEND_PORT/health"
|
info "健康检查: http://localhost:$BACKEND_PORT/health"
|
||||||
info "数据库: SQLite (backend/sqlite3.db)"
|
info "数据库: SQLite (./sqlite3.db)"
|
||||||
echo ""
|
echo ""
|
||||||
info "使用 './run.sh stop' 停止服务"
|
info "使用 './run.sh stop' 停止服务"
|
||||||
else
|
else
|
||||||
@@ -272,9 +272,12 @@ cmd_status() {
|
|||||||
else
|
else
|
||||||
warning "前端: 未运行"
|
warning "前端: 未运行"
|
||||||
fi
|
fi
|
||||||
if [ -f "$SCRIPT_DIR/$BACKEND_DIR/sqlite3.db" ]; then
|
if [ -f "$SCRIPT_DIR/sqlite3.db" ]; then
|
||||||
|
local db_size=$(du -h "$SCRIPT_DIR/sqlite3.db" | cut -f1)
|
||||||
|
info "数据库: SQLite (./sqlite3.db, $db_size)"
|
||||||
|
elif [ -f "$SCRIPT_DIR/$BACKEND_DIR/sqlite3.db" ]; then
|
||||||
local db_size=$(du -h "$SCRIPT_DIR/$BACKEND_DIR/sqlite3.db" | cut -f1)
|
local db_size=$(du -h "$SCRIPT_DIR/$BACKEND_DIR/sqlite3.db" | cut -f1)
|
||||||
info "数据库: SQLite (sqlite3.db, $db_size)"
|
info "数据库: SQLite (backend/sqlite3.db 旧路径, $db_size)"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user