diff --git a/README.md b/README.md deleted file mode 100644 index 8918017..0000000 --- a/README.md +++ /dev/null @@ -1,153 +0,0 @@ -# LPT Infrastructure - -Kubernetes 部署清单,按环境隔离。 - -``` -├── traefik/ -│ └── dynamic.yml -├── dev/ -│ ├── deployment-lpt-fe.yaml -│ ├── deployment-lpt-be.yaml -│ ├── deployment-lpt-ai.yaml -│ ├── service-lpt-fe.yaml -│ ├── service-lpt-be.yaml -│ ├── service-lpt-ai.yaml -│ ├── configmap.yaml -│ ├── mysql-deployment.yaml -│ ├── mysql-service.yaml -│ ├── mysql-storage.yaml -│ ├── mysql-backup-cronjob.yaml -│ └── lpt-logs-storage.yaml -├── prod/ -│ ├── deployment-lpt-fe.yaml -│ ├── deployment-lpt-be.yaml -│ ├── deployment-lpt-ai.yaml -│ ├── service-lpt-fe.yaml -│ ├── service-lpt-be.yaml -│ ├── service-lpt-ai.yaml -│ ├── configmap.yaml -│ ├── mysql-deployment.yaml -│ ├── mysql-service.yaml -│ ├── mysql-storage.yaml -│ ├── mysql-backup-cronjob.yaml -│ └── lpt-logs-storage.yaml -└── README.md -``` - -## 首次部署 - -### 1. 创建 namespace -```bash -kubectl create namespace lpt-dev -kubectl create namespace lpt-prod -``` - -### 2. 创建 Secret(仅一次,由 CI/CD 自动管理) -```bash -# dev -kubectl create secret generic lpt-secrets \ - --from-literal=llm-api-key=sk-xxx \ - --from-literal=mysql-root-password=xxx \ - -n lpt-dev - -kubectl create secret docker-registry regcred \ - --docker-server=192.168.123.199:5000 \ - --docker-username=admin \ - --docker-password=xxx \ - -n lpt-dev - -# prod -kubectl create secret generic lpt-secrets \ - --from-literal=llm-api-key=sk-xxx \ - --from-literal=mysql-root-password=xxx \ - -n lpt-prod - -kubectl create secret docker-registry regcred \ - --docker-server=192.168.123.199:5000 \ - --docker-username=admin \ - --docker-password=xxx \ - -n lpt-prod -``` - -### 3. Apply 全部配置 -```bash -kubectl apply -f dev/ -kubectl apply -f prod/ -``` - -`kubectl apply -f dev/` / `prod/` 会同时创建 MySQL 的 Service、PV/PVC、Deployment 和每日备份 CronJob。 - -## 数据库(MySQL) - -MySQL 与业务服务一起由清单管理,每个 namespace 一个 `mysql` Deployment 和 NodePort Service(端口 3306),数据通过 hostPath PV/PVC 持久化。 - -| 项目 | dev | prod | -|------|-----|------| -| 镜像 | `mysql:9` | `mysql:8.0` | -| 数据目录 | `/vol1/lpt/mysql/dev/data` | `/vol1/lpt/mysql/prod/data` | -| 备份目录 | `/vol1/lpt/backup/dev` | `/vol1/lpt/backup/prod` | -| 日志目录 | `/vol1/lpt/logs/dev` | `/vol1/lpt/logs/prod` | -| 数据库 | `learning_progress_tracker` | `lpt_prod` | - -- LPT 数据统一放在 `/vol1/lpt` 下:MySQL 数据、备份、lpt-ai 日志(挂载到容器 `/app/data`,持久化 `logs.json`)。 -- PV 使用 hostPath 并绑定节点 `cw8505fnos`;新环境需要同步修改 `mysql-storage.yaml` / `lpt-logs-storage.yaml` 中的路径和节点名。 -- dev 使用 `mysql:9`;若 Docker Hub 不可达,可先在本机 containerd 打标签:`ctr -n k8s.io images tag docker.io/library/mysql:latest docker.io/library/mysql:9`。 -- root 密码来自 Secret `lpt-secrets.mysql-root-password`,应用当前以 root 连接数据库。 -- 表结构由 lpt-be 启动时的 Flyway 自动迁移,不需要手工建表。 -- 每日 03:00 通过 `mysql-backup` CronJob 执行 mysqldump,备份保留 14 天。 -- 历史数据已从 `/vol1/1000/mysql`、`/vol1/1000/mysql-my/LPT/prod/data` 迁移到 `/vol1/lpt`,旧目录保留未删除;更换节点前先 dump 备份,再恢复到新路径。 -- 局域网维护:MySQL Service 已开放 NodePort,dev 为 `30306`,prod 为 `30307`;不需要对外访问时可改回 ClusterIP。 - -## 日常更新 - -```bash -cd ~/lpt-infra -git pull -kubectl apply -f dev/ -kubectl apply -f prod/ -``` - -## 手动部署流水线 - -`lpt-infra` 提供 Gitea Actions 手动流水线(`.gitea/workflows/deploy.yml`),只支持手动触发,不会随 push 自动执行。 - -使用方式: - -1. 在 lpt-infra 仓库配置 Secret `KUBECONFIG_B64`(kubeconfig 的 base64)。 -2. Gitea → lpt-infra → Actions → Run workflow。 -3. 选择 `environment`:`all` / `dev` / `prod`。 - -流水线会 checkout 最新代码并执行 `kubectl apply -f dev/` 或 `kubectl apply -f prod/`。 - -注意:整目录 apply 会把 Deployment 镜像 tag 重置为清单中的 `:dev` / `:prod`;如果 app CI 用不可变 tag 管理镜像,建议 app 发布后不要立即整目录 apply,或只 apply 本次变更的清单。 - - -## Traefik - -Traefik 以 Docker 容器运行在宿主机,通过 file provider 加载路由规则,转发到 K8s NodePort。 - -### 更新路由 - -```bash -# 将最新配置复制到 Traefik 挂载目录 -sudo cp traefik/dynamic.yml /etc/traefik/dynamic/k8s-lpt.yml - -# Traefik 自动检测文件变更,无需重启 -# 或手动验证 -sudo docker exec traefik cat /etc/traefik/dynamic/k8s-lpt.yml -``` - -### 端口对照 - -| 服务 | dev NodePort | prod NodePort | -|------|-------------|---------------| -| lpt-fe | 30080 | 30180 | -| lpt-be (api) | 30082 | 30182 | -| lpt-ai | ClusterIP | ClusterIP | -| mysql | 30306 | 30307 | - -## 验证 -```bash -kubectl get pods -n lpt-dev -kubectl get pods -n lpt-prod -```