|
|
||
|---|---|---|
| .. | ||
| base | ||
| examples | ||
| overlays/production | ||
| README.md | ||
Aurask k3s 部署方案(当前 DevCloud 部署与后续扩展)
当前 DevCloud 落地方案
当前 master 分支已经对接 DevCloud 的实际部署形态。仓库采用 base + production overlay 的混合结构:deploy/k3s/base 保持可复用默认清单,deploy/k3s/overlays/production 绑定当前 3 节点 DevCloud 集群、NodePort 和节点调度策略。
当前已落地组件
aurask-api- 镜像:
registry.mydevcloud.love/devcloud/aurask-api - 节点:
45.113.2.55 - Kubernetes 节点名:
devcloud-trade-agent-1 - Service:
NodePort 30091
- 镜像:
aurask-web- 镜像:
registry.mydevcloud.love/devcloud/aurask-web - 来源:
protal/ - 节点:
154.193.250.23 - Kubernetes 节点名:
devcloud-trade-agent-2 - Service:
NodePort 30090
- 镜像:
aurask-worker- 镜像:复用
registry.mydevcloud.love/devcloud/aurask-api - 节点:
45.113.2.55 - Kubernetes 节点名:
devcloud-trade-agent-1 - 启动命令:
python -m aurask worker --data /data/state.json
- 镜像:复用
aurask-manager- 镜像:
registry.mydevcloud.love/devcloud/aurask-manager - 来源:
manager/ - 节点:
154.193.250.23 - Kubernetes 节点名:
devcloud-trade-agent-2 - Service:
NodePort 30092 - 当前不接入公网 Caddy,仅作为管理员入口预留
- 镜像:
postgres- 镜像:
pgvector/pgvector:pg16 - 节点:
45.113.2.55 - Kubernetes 节点名:
devcloud-trade-agent-1 - Service:仅集群内访问
- 用途:预置 PostgreSQL + PGVector 数据面,当前业务主存储仍为 MVP JSON
- 镜像:
redis- 镜像:
redis:7-alpine - 节点:
45.113.2.55 - Kubernetes 节点名:
devcloud-trade-agent-1 - Service:仅集群内访问
- 用途:预置队列、幂等、缓存、限流数据面
- 镜像:
aurask命名空间aurask-api-statePVCStorageClass:local-path- 用于保存 MVP JSON 状态文件
当前公网入口
- 域名:
https://aurask.xyz - 路由方式:
/->aurask-web/api/*->aurask-api
- 边界入口通过前端节点宿主机
Caddy转发:154.193.250.23:443->NodePort 30090 / 30091
当前仍未纳入自动部署的组件
以下内容仍属于后续扩展计划,当前 master 分支自动发布不会部署:
- Langflow Runtime
- AnythingLLM
- Observability / Longhorn / CNPG
当前 production overlay 中 AURASK_USE_EXTERNAL_BRIDGES=false。也就是说,PostgreSQL / PGVector / Redis 已作为生产数据面清单落地,但 Aurask 业务代码仍运行在 MVP JSON 主存储模式;待真实 PostgreSQL repository、Redis 队列消费者、Langflow 与 AnythingLLM 工作负载完成后,再切换到外部桥接模式。
自动发布流水线
仓库内置 Gitea Actions 工作流:
- 文件:
.gitea/workflows/aurask-release.yml - 触发条件:
master分支 push - 动作:
- 运行单元测试
- 构建
aurask-api镜像 - 构建
aurask-web镜像 - 构建
aurask-manager镜像 - 推送镜像到私有仓库
- 通过 SSH 连接
64.90.15.15 kubectl apply -k deploy/k3s/overlays/production- 自动更新
aurask-api、aurask-worker、aurask-web与aurask-manager镜像到当前 commit SHA
仓库所需 Gitea Actions Secrets
SSH_PRIVATE_KEYREGISTRY_USERREGISTRY_PASSWORDPOSTGRES_DBPOSTGRES_USERPOSTGRES_PASSWORD
当前仓库内的部署资产位置
deploy/
images/
aurask-api/
Dockerfile
aurask-web/
Dockerfile
aurask-manager/
Dockerfile
k3s/
base/
aurask-runtime-config.yaml
namespace.yaml
aurask-api-pvc.yaml
aurask-api.yaml
aurask-worker.yaml
aurask-web.yaml
aurask-manager.yaml
postgres.yaml
redis.yaml
kustomization.yaml
overlays/
production/
kustomization.yaml
examples/
aurask-runtime-secrets.example.yaml
aurask-postgres-secret.example.yaml
aurask-redis-secret.example.yaml
目标扩展方案(300 名月度活跃用户)
本部署计划基于当前仓库结构更新:
api/ # 后端服务、桥接配置、前端到后端请求契约
protal/ # 用户前端使用面板
manager/ # 管理员前端使用面板
deploy/ # k3s 与后续部署配置
目标是支撑 约 300 名月度活跃付费用户,并满足 Aurask_Technical_Operations_Plan.md 中的核心边界:
- Aurask 网关是唯一公网业务入口。
Langflow、AnythingLLM、PostgreSQL、PGVector、Redis不直接暴露公网。- 基础用户只运行审核模板,不开放任意代码执行。
- AnythingLLM Workspace 与 Aurask
tenant_id绑定。 - 工作流执行前预扣 TBU,执行后按实际消耗结算。
- 支付、额度、审计、成本链路可追踪。
1. 当前代码到集群工作负载映射
当前仓库虽然仍是 Python 模块化单体,但已经按生产职责拆出目录和桥接层。部署时按以下方式映射:
| 仓库目录/模块 | k3s 工作负载 | 说明 |
|---|---|---|
api/aurask/api.py |
aurask-api |
HTTP 网关、鉴权、订单、额度、前端请求入口 |
api/aurask/cli.py |
aurask-api / aurask-worker 启动入口 |
当前用同一镜像不同命令启动 |
api/aurask/orchestrator.py |
aurask-worker |
工作流编排、TBU 预扣/结算、调用 Langflow |
api/aurask/payments.py |
aurask-worker / aurask-cron |
支付匹配、后续链上监听 |
api/aurask/bridges/postgres.py |
aurask-api / aurask-worker |
PostgreSQL schema contract |
api/aurask/bridges/pgvector.py |
aurask-worker |
向量检索契约,强制租户过滤 |
api/aurask/bridges/redis_bridge.py |
aurask-api / aurask-worker |
队列、缓存、幂等、限流 key 规则 |
api/aurask/bridges/anythingllm.py |
aurask-worker |
AnythingLLM Workspace / 文档入库桥接 |
api/aurask/bridges/langflow.py |
aurask-worker |
Langflow 模板运行桥接 |
protal/ |
aurask-protal |
用户前端静态站点 |
manager/ |
aurask-manager |
管理员前端静态站点 |
deploy/k3s/ |
GitOps / Kustomize / Helm | 部署配置根目录 |
2. 容量假设
300 MAU 首版不是 300 并发。按以下容量规划:
- 月度活跃付费用户:
300 - 日活高峰:
40-80 - 同时在线用户峰值:
15-30 - 同时工作流执行峰值:
10-20 - 文档总量:
<= 500GB - 向量层:首版
PostgreSQL + PGVector - 模型推理:外部模型 API / LLM Proxy,不在集群内自建 GPU 推理
- Runtime:基础用户共享 Runtime Pool,高付费用户后续独立 Namespace
触发扩容条件:
- 持续并发工作流
> 20 - 文档总量
> 500GB - 高付费独立空间用户
> 20 - 工作流排队 P95
> 10s - PostgreSQL 连接数、WAL、磁盘或 CPU 持续接近上限
3. 集群拓扑
推荐首版生产拓扑:
| 角色 | 数量 | 建议配置 | 用途 |
|---|---|---|---|
| Public LB | 1 | 云负载均衡或 HAProxy/Keepalived |
统一暴露 80/443 |
k3s server |
3 | 4 vCPU / 8GB RAM / 120GB SSD |
控制面 + embedded etcd |
| General worker | 2 | 8 vCPU / 16GB RAM / 200GB SSD |
aurask-api、前端、Ingress、观测 |
| Runtime worker | 2 | 8 vCPU / 16GB RAM / 250GB SSD |
aurask-worker、Langflow、AnythingLLM |
| Data worker | 可选 1-2 | 8 vCPU / 16GB RAM / 300GB+ SSD/NVMe |
PostgreSQL、Redis、存储密集型组件 |
如果预算有限,可先用 3 server + 4 worker,将 Data worker 合并到 worker 池;但 PostgreSQL 节点必须通过反亲和规则打散。
4. Namespace 规划
| Namespace | 组件 |
|---|---|
ingress-system |
Traefik / Nginx Ingress、External DNS |
cert-manager |
TLS 证书 |
aurask-api |
aurask-api、API Secret、API ServiceAccount |
aurask-web |
aurask-protal、aurask-manager 静态前端 |
aurask-runtime |
aurask-worker、langflow-runtime、anythingllm |
aurask-data |
PostgreSQL、PGVector、PgBouncer、Redis |
observability |
Prometheus、Grafana、Loki、Alertmanager |
longhorn-system |
Longhorn |
要求:
- 默认
NetworkPolicy为deny-all。 - 只允许
aurask-api接收公网 Ingress 流量。 aurask-protal、aurask-manager可以暴露公网,但它们只访问aurask-api。Langflow、AnythingLLM、PostgreSQL、Redis仅ClusterIP。
5. 应用工作负载
5.1 aurask-api
来源:
api/aurask/api.pyapi/aurask/app.pyapi/aurask/auth.pyapi/aurask/billing.pyapi/aurask/quota.py
职责:
- HTTP 网关。
- 鉴权。
- 租户上下文注入。
- 套餐、订单、额度查询。
- 前端请求入口。
- 管理端桥接状态接口:
GET /admin/bridge-status。
建议:
| 项目 | 值 |
|---|---|
| 副本 | 3 |
| requests | 500m CPU / 1Gi RAM |
| limits | 1 CPU / 2Gi RAM |
| HPA | CPU 65% 或 QPS 指标,扩到 5 |
| PDB | minAvailable=2 |
5.2 aurask-worker
来源:
api/aurask/orchestrator.pyapi/aurask/knowledge_base.pyapi/aurask/payments.pyapi/aurask/bridges/*
职责:
- 工作流编排。
- TBU 预扣与结算。
- 调用 Langflow Runtime。
- 调用 AnythingLLM。
- 处理文档入库。
- 后续消费 Redis 队列。
建议:
| 项目 | 值 |
|---|---|
| 副本 | 3 |
| requests | 1 CPU / 2Gi RAM |
| limits | 2 CPU / 4Gi RAM |
| HPA/KEDA | 按 Redis 队列长度扩到 6 |
| 调度 | 优先 Runtime worker |
5.3 aurask-cron
职责:
- 过期订单处理。
- 支付异常扫描。
- 周报/月报。
- 备份检查。
- 成本报表归集。
建议:
| 项目 | 值 |
|---|---|
| 类型 | CronJob |
| requests | 250m CPU / 512Mi RAM |
| limits | 500m CPU / 1Gi RAM |
5.4 aurask-protal
来源:protal/
职责:
- 用户登录后的使用面板。
- 调用 Aurask API。
- 创建 Workspace、运行模板、查看额度。
建议:
| 项目 | 值 |
|---|---|
| 类型 | 静态站点 Deployment |
| 副本 | 2 |
| requests | 50m CPU / 64Mi RAM |
| limits | 200m CPU / 256Mi RAM |
| Ingress host | app.aurask.example.com |
5.5 aurask-manager
来源:manager/
职责:
- 管理员使用面板。
- 查看桥接状态。
- 后续扩展租户、订单、异常支付、成本、审计。
建议:
| 项目 | 值 |
|---|---|
| 类型 | 静态站点 Deployment |
| 副本 | 2 |
| requests | 50m CPU / 64Mi RAM |
| limits | 200m CPU / 256Mi RAM |
| Ingress host | manager.aurask.example.com |
| 额外保护 | IP allowlist / SSO / BasicAuth / 二次认证 |
6. Runtime 组件
6.1 Langflow Runtime
部署名:langflow-runtime
用途:
- 仅执行 Aurask 审核过的模板工作流。
- 不向普通用户暴露 Langflow UI。
- 被
aurask-worker通过内部 Service 调用。
建议:
| 项目 | 值 |
|---|---|
| 副本 | 3 |
| requests | 1500m CPU / 3Gi RAM |
| limits | 3 CPU / 6Gi RAM |
| Service | ClusterIP |
| 调度 | Runtime worker |
关键环境变量:
LANGFLOW_AUTO_LOGIN=False
LANGFLOW_FALLBACK_TO_ENV_VAR=False
LANGFLOW_DATABASE_URL=postgresql://...
LANGFLOW_SECRET_KEY=<secret>
Aurask 侧桥接:
AURASK_LANGFLOW_BASE_URL=http://langflow-runtime.aurask-runtime.svc.cluster.local:7860
AURASK_LANGFLOW_API_KEY=<secret>
6.2 AnythingLLM
部署名:anythingllm
用途:
- Workspace。
- 文档入库。
- RAG。
- 聊天历史。
建议:
| 项目 | 值 |
|---|---|
| 副本 | 2 |
| requests | 1 CPU / 2Gi RAM |
| limits | 2 CPU / 4Gi RAM |
| Service | ClusterIP |
| 调度 | Runtime worker |
Aurask 侧桥接:
AURASK_ANYTHINGLLM_BASE_URL=http://anythingllm.aurask-runtime.svc.cluster.local:3001
AURASK_ANYTHINGLLM_API_KEY=<secret>
要求:
- 管理员账号仅由 Aurask 后台持有。
- 普通用户不进入 AnythingLLM 管理后台。
- Workspace 必须通过 Aurask 创建并绑定
tenant_id。
7. 数据组件
7.1 PostgreSQL + PGVector
推荐:CloudNativePG + PGVector
用途:
- 租户、用户、订单、额度、审计。
- 向量检索起步方案。
建议:
| 项目 | 值 |
|---|---|
| 实例数 | 3 |
| requests | 2 CPU / 4Gi RAM |
| limits | 4 CPU / 8Gi RAM |
| PVC | 每实例 200GB 起 |
| 备份 | WAL 归档到 S3 |
Aurask schema 契约来源:
api/aurask/bridges/postgres.pyapi/aurask/bridges/pgvector.py
必须启用:
CREATE EXTENSION IF NOT EXISTS vector;
7.2 PgBouncer
用途:
- 降低 API / Worker 连接风暴。
建议:
| 项目 | 值 |
|---|---|
| 副本 | 2 |
| requests | 500m CPU / 512Mi RAM |
| limits | 1 CPU / 1Gi RAM |
7.3 Redis
用途:
- 工作流队列。
- 幂等键。
- 限流。
- 短期缓存。
建议:
| 项目 | 值 |
|---|---|
| 副本 | 2-3 |
| requests | 500m CPU / 1Gi RAM |
| limits | 1 CPU / 2Gi RAM |
Aurask key 契约来源:
api/aurask/bridges/redis_bridge.py
8. 镜像构建计划
当前仓库建议构建三个镜像:
| 镜像 | 来源目录 | 用途 |
|---|---|---|
aurask-api |
api/ |
后端 API 与 worker 运行时 |
aurask-web |
protal/ |
用户前端静态站点 |
aurask-manager |
manager/ |
管理员前端静态站点 |
首版可先使用同一个 Python 镜像启动 aurask-api 与 aurask-worker:
aurask-api: python -m aurask serve --host 0.0.0.0 --port 8080
aurask-worker: python -m aurask worker # 当前提供最小常驻 worker 与 --once 自检
当前 aurask-worker 提供最小常驻进程、心跳日志与 --once 自检;真实 Redis 队列消费者完成前,它作为生产拓扑预留工作负载。
9. 环境变量
aurask-api 与 aurask-worker 共享:
AURASK_USE_EXTERNAL_BRIDGES=true
AURASK_DATABASE_URL=postgresql://aurask:<password>@pgbouncer.aurask-data.svc.cluster.local:5432/aurask
AURASK_POSTGRES_MIN_CONNECTIONS=1
AURASK_POSTGRES_MAX_CONNECTIONS=10
AURASK_PGVECTOR_TABLE=aurask_vectors
AURASK_PGVECTOR_DIMENSION=1536
AURASK_REDIS_URL=redis://redis.aurask-data.svc.cluster.local:6379/0
AURASK_REDIS_WORKFLOW_QUEUE=aurask:workflow-runs
AURASK_ANYTHINGLLM_BASE_URL=http://anythingllm.aurask-runtime.svc.cluster.local:3001
AURASK_ANYTHINGLLM_API_KEY=<secret>
AURASK_LANGFLOW_BASE_URL=http://langflow-runtime.aurask-runtime.svc.cluster.local:7860
AURASK_LANGFLOW_API_KEY=<secret>
Secret 管理:
- 推荐
External Secrets Operator。 - 或使用
SOPS + age管理 GitOps secret。 - 禁止将真实 API Key、数据库密码、钱包配置提交到 Git。
10. Ingress 规划
建议域名:
| Host | Service | 说明 |
|---|---|---|
api.aurask.example.com |
aurask-api |
API 网关 |
app.aurask.example.com |
aurask-protal |
用户面板 |
manager.aurask.example.com |
aurask-manager |
管理员面板 |
不创建公网 Ingress:
langflow-runtimeanythingllmpostgrespgbouncerredis
管理员面板额外要求:
- IP allowlist。
- SSO / BasicAuth / 二次认证。
- 操作审计。
11. NetworkPolicy 规划
默认拒绝所有东西向访问,然后按链路放通:
| From | To | Purpose |
|---|---|---|
| Ingress | aurask-api |
API 流量 |
| Ingress | aurask-protal |
用户面板 |
| Ingress | aurask-manager |
管理面板 |
aurask-api |
PgBouncer | 业务读写 |
aurask-worker |
PgBouncer | 业务读写 |
aurask-api |
Redis | 限流、缓存 |
aurask-worker |
Redis | 队列、幂等 |
aurask-worker |
Langflow | 模板执行 |
aurask-worker |
AnythingLLM | Workspace / 文档 / RAG |
| Langflow | 外部 LLM Proxy | 模型调用 |
| AnythingLLM | 外部 LLM Proxy / Object Storage | RAG 与文档处理 |
禁止:
- 用户请求直接访问 Langflow / AnythingLLM。
- 前端直接访问 PostgreSQL / Redis。
- Runtime 访问内网管理网段、云元数据地址。
12. 存储与备份
12.1 PVC
| 组件 | 存储 |
|---|---|
| PostgreSQL | cnpg-fast,优先云块存储 / NVMe |
| Redis | longhorn-general 或云块存储 |
| AnythingLLM | longhorn-critical 或外部对象存储缓存 |
| Observability | longhorn-general |
12.2 对象存储
优先外部 S3 兼容存储,用于:
- 用户文档对象。
- PostgreSQL 备份。
- Longhorn 备份。
- 审计归档。
12.3 备份目标
- PostgreSQL:
RPO <= 15 分钟,RTO <= 2 小时。 - Longhorn:每日快照,每周备份。
- 支付订单与链上交易匹配记录:至少保留
180天。 - 每月至少做一次恢复演练。
13. 可观测性
组件:
- Prometheus
- Grafana
- Loki
- Alertmanager
- kube-state-metrics
- node-exporter
必须监控:
aurask-apiQPS、P95、错误率。aurask-worker队列深度、执行时长、失败率。tbu_reserved_total、tbu_consumed_total、tbu_released_total。- 订单创建、支付匹配、异常订单数量。
- Langflow 执行耗时与错误率。
- AnythingLLM 文档入库耗时与失败率。
- PostgreSQL 连接数、WAL、复制延迟、磁盘。
- Redis 内存、队列长度、延迟。
14. 推荐部署配置目录
后续 manifests 建议落入:
deploy/k3s/
README.md
base/
namespaces.yaml
ingress.yaml
network-policies.yaml
secrets.example.yaml
aurask-api.yaml
aurask-worker.yaml
aurask-web.yaml
aurask-manager.yaml
langflow-runtime.yaml
anythingllm.yaml
postgres-cnpg.yaml
redis.yaml
observability.yaml
overlays/
staging/
kustomization.yaml
production/
kustomization.yaml
Helm 管理:
cert-managerlonghorncloudnative-pgprometheus-stacklokiredisoperator 或 chart
Kustomize 管理:
- Aurask 自研服务。
- Ingress。
- NetworkPolicy。
- 环境差异。
15. 上线步骤
Phase 1:集群底座
- 创建
3 server + 4 workerk3s 集群。 - 配置公网 LB 与 DNS。
- 安装
cert-manager。 - 安装
Longhorn或云 CSI。 - 安装 observability 基础栈。
Phase 2:数据层
- 安装
CloudNativePG。 - 初始化 PostgreSQL 与 PGVector。
- 部署 PgBouncer。
- 部署 Redis。
- 配置对象存储与备份桶。
Phase 3:Aurask 应用层
- 构建并推送
aurask-api镜像。 - 构建并推送
aurask-web镜像。 - 构建并推送
aurask-manager镜像。 - 部署
aurask-api。 - 部署
aurask-worker。 - 部署
aurask-web与aurask-manager。 - 配置 Ingress、TLS、NetworkPolicy。
Phase 4:Runtime 层
- 部署 Langflow Runtime。
- 部署 AnythingLLM。
- 配置
AURASK_LANGFLOW_*与AURASK_ANYTHINGLLM_*secret。 - 使用
GET /admin/bridge-status验证桥接配置。 - 跑通模板工作流与文档入库。
Phase 5:生产化验收
- 开启 HPA / KEDA。
- 跑并发工作流压测。
- 演练支付匹配。
- 演练 PostgreSQL 备份恢复。
- 演练节点故障与 Pod 重调度。
- 检查 Langflow / AnythingLLM 未暴露公网。
16. 验收标准
| 项目 | 目标 |
|---|---|
| API P95 | < 500ms,不含外部模型调用 |
| 峰值并发工作流 | 10-20 |
| 工作流成功率 | 95%+ |
| 支付匹配成功率 | 99%+ |
| 工作流排队 P95 | < 10s |
| PostgreSQL RPO | <= 15 分钟 |
| PostgreSQL RTO | <= 2 小时 |
| 月可用性 | 99%+ |
| 外部暴露面 | 仅 API、用户面板、管理面板 |
17. 当前代码差距
当前已经具备:
- 根目录划分:
api、protal、manager、deploy。 - PostgreSQL / PGVector / Redis / AnythingLLM / Langflow 桥接契约。
/admin/bridge-status桥接状态接口。- 静态用户面板和管理面板。
- 请求样例:
api/requests/aurask-api.http。
仍需补齐:
deploy/k3s/basemanifests。- 真实 PostgreSQL repository。
- Redis 队列消费者。
aurask-worker独立启动命令。- 真实 Langflow / AnythingLLM API 适配细节校验。
- 前端构建流程与容器镜像。
- Secret / NetworkPolicy / HPA / KEDA manifests。
18. 官方参考
- k3s HA embedded etcd:https://docs.k3s.io/datastore/ha-embedded
- cert-manager Installation:https://cert-manager.io/docs/installation/
- Longhorn Installation:https://longhorn.io/docs/latest/deploy/install/
- CloudNativePG Documentation:https://cloudnative-pg.io/documentation/current/
- CloudNativePG Backup:https://cloudnative-pg.io/documentation/current/backup/
- AnythingLLM System Requirements:https://docs.anythingllm.com/installation-docker/system-requirements
- Langflow Security:https://docs.langflow.org/security