| .. | ||
| README.md | ||
Aurask k3s 部署方案(300 名月度活跃用户)
本方案用于 Aurask 首版在 k3s 上的生产级部署规划,目标是支撑 约 300 名月度活跃付费用户 的稳定运行。
该方案遵循 Aurask_Technical_Operations_Plan.md 的技术边界:Aurask 网关为唯一公网入口、Langflow 模板化运行、AnythingLLM 与租户绑定、TBU 预扣/结算、订单台账与审计可追踪。
当前仓库实现仍是模块化单体 MVP。
在k3s上建议先拆成aurask-api+aurask-worker两类工作负载,随后再逐步拆分为独立服务。
1. 容量假设
由于“300 月度活跃用户”不等于“300 并发用户”,本部署按以下合理首版假设规划:
- 月度活跃付费用户:
300 - 日活高峰:
40-80 - 同时在线用户峰值:
15-30 - 同时工作流执行峰值:
10-20 - 基础套餐为主,绝大部分用户运行 模板化 Langflow 工作流
- 外部大模型走 API / Proxy 路由,不在集群内自建 GPU 推理
- AnythingLLM 文档总量控制在
500GB以内 - 向量层优先采用
PostgreSQL + PGVector
如果后续出现以下任一情况,应升级到下一档集群:
- 持续并发工作流
> 20 - 文档总量
> 500GB - 高付费独立空间用户
> 20 - AnythingLLM 或 Langflow 需要更强隔离时改用单租户 Namespace/Pod
2. 目标部署拓扑
建议采用 3 台 control-plane + 4 台 worker + 1 个公网负载均衡入口 的最小高可用拓扑。
2.1 节点规划
| 角色 | 数量 | 建议配置 | 用途 |
|---|---|---|---|
| Public LB | 1 | 云负载均衡或双机 HAProxy/Keepalived |
统一暴露 80/443 |
k3s server |
3 | 4 vCPU / 8GB RAM / 120GB SSD |
API Server、Scheduler、Controller、embedded etcd |
| General worker | 2 | 8 vCPU / 16GB RAM / 200GB SSD |
aurask-api、aurask-worker、Traefik、observability |
| AI/runtime worker | 2 | 8 vCPU / 16GB RAM / 250GB SSD |
Langflow Runtime、AnythingLLM、异步任务 |
2.2 为什么是这个规模
这个规格对应的是 “300 MAU、10-20 并发工作流、外部模型 API” 的首个生产档:
3个 server 节点保证k3s控制面高可用4个 worker 节点可让应用、Runtime、数据库和监控具有基础调度弹性- 不再沿用文档里“低价单机 VPS 拼装”的方式,而是改为 节点池 + 调度隔离
- 仍然控制在可运维范围内,适合首版商业化
3. Namespace 设计
建议至少划分以下命名空间:
| Namespace | 作用 |
|---|---|
ingress-system |
Traefik / LoadBalancer 相关资源 |
cert-manager |
TLS 证书管理 |
aurask-system |
Aurask API、Worker、CronJob、Secrets |
aurask-runtime |
Langflow Runtime、AnythingLLM |
aurask-data |
PostgreSQL、Redis、内部状态性服务 |
observability |
Prometheus、Loki、Grafana、Alertmanager |
longhorn-system |
Longhorn 存储控制平面 |
要求:
Langflow、AnythingLLM、PostgreSQL、Redis不暴露公网 Ingress- 默认
NetworkPolicy为deny-all,只放通必要南北向与东西向流量 - 高付费独立用户后续可按租户扩展
aurask-tenant-<id>命名空间
4. 组件部署清单
4.1 边界入口层
| 组件 | 副本数 | 部署位置 | 说明 |
|---|---|---|---|
| Traefik | 2 | ingress-system |
统一入口,终止 TLS |
| cert-manager | 2 | cert-manager |
自动签发 TLS 证书 |
| External DNS | 1 | ingress-system |
可选,自动写 DNS |
公网仅开放:
80/tcp443/tcp
Aurask 对外只暴露:
aurask-webaurask-api
不要暴露:
- Langflow UI
- AnythingLLM 管理后台
- PostgreSQL
- Redis
- 内部 worker
4.2 Aurask 应用层
首版建议从同一个镜像拆出两个工作负载:
| 工作负载 | 副本数 | 建议资源 requests |
建议资源 limits |
说明 |
|---|---|---|---|---|
aurask-api |
3 | 500m CPU / 1Gi RAM |
1 CPU / 2Gi RAM |
网关、鉴权、订单、额度查询 |
aurask-worker |
3 | 1 CPU / 2Gi RAM |
2 CPU / 4Gi RAM |
工作流编排、异步执行、支付匹配、后台任务 |
aurask-cron |
1 | 250m CPU / 512Mi RAM |
500m CPU / 1Gi RAM |
账单修正、过期订单、周报任务 |
建议:
aurask-api开启HPA,CPU65%或自定义 QPS 指标触发扩容至5副本aurask-worker依据队列长度扩容至6副本PodDisruptionBudget至少保证aurask-api minAvailable=2
4.3 Runtime 层
| 工作负载 | 副本数 | 建议资源 requests |
建议资源 limits |
说明 |
|---|---|---|---|---|
langflow-runtime |
3 | 1500m CPU / 3Gi RAM |
3 CPU / 6Gi RAM |
仅运行审核模板,不开放任意代码执行 |
anythingllm |
2 | 1 CPU / 2Gi RAM |
2 CPU / 4Gi RAM |
Workspace、文档、RAG、聊天记录 |
Runtime 层要求:
- 使用
nodeSelector或taints/tolerations调度到AI/runtime worker Langflow开启安全配置:LANGFLOW_AUTO_LOGIN=FalseLANGFLOW_FALLBACK_TO_ENV_VAR=FalseLANGFLOW_DATABASE_URL指向集群内 PostgreSQL
AnythingLLM只允许通过 Aurask 网关与后台服务访问- 两者都只通过
ClusterIP暴露
4.4 数据层
推荐首版方案
| 组件 | 建议方案 | 副本/实例 | 说明 |
|---|---|---|---|
| PostgreSQL | CloudNativePG + PGVector |
3 | 主库 + 副本 + 自动故障切换 |
| PgBouncer | Deployment | 2 | 降低应用连接风暴 |
| Redis | StatefulSet 或 Operator | 2-3 | 会话、缓存、任务队列 |
| Object Storage | 优先外部 S3 兼容存储 | 外部 | 降低集群内状态复杂度 |
原因:
PGVector可同时承载业务数据库与向量检索,适合 Aurask 首版CloudNativePG比自建主从脚本更适合作为k3s首版生产标准- 文档对象、备份对象尽量放到外部对象存储,避免首版把
MinIO、数据库、向量库、应用全部堆在一个小集群里
PostgreSQL 资源建议
| 组件 | 副本数 | requests |
limits |
|---|---|---|---|
cnpg-cluster instance |
3 | 2 CPU / 4Gi RAM |
4 CPU / 8Gi RAM |
pgbouncer |
2 | 500m CPU / 512Mi RAM |
1 CPU / 1Gi RAM |
存储建议:
- 数据卷:每实例
200GB起 - 存储类型:优先云块存储 / CSI Block / 本地 NVMe
- 如果必须首版全部自建,可使用
Longhorn,但数据库卷要使用更快磁盘池
Redis 资源建议
| 组件 | 副本数 | requests |
limits |
|---|---|---|---|
redis |
2 | 500m CPU / 1Gi RAM |
1 CPU / 2Gi RAM |
Redis 在 Aurask 中主要承担:
- 会话
- 幂等键
- 工作流队列
- 限流与短期缓存
5. 存储方案
5.1 首版推荐
Longhorn:为集群内 PVC 提供高可用块存储- 外部 S3 兼容对象存储:保存文档对象、PostgreSQL 备份、审计归档、Longhorn 备份
5.2 Longhorn 使用边界
Longhorn 更适合:
- 应用 PVC
- AnythingLLM 一般性文档缓存
- Redis/监控等非极端 IOPS 场景
Longhorn 不应被当成性能无限的数据库盘。
对 PostgreSQL:
- 最优是云块存储或本地 NVMe + 复制/备份
- 次优才是
Longhorn高副本卷
5.3 建议存储类
| StorageClass | 用途 | 副本数 |
|---|---|---|
longhorn-general |
应用与一般 PVC | 2 |
longhorn-critical |
AnythingLLM、审计、重要状态 | 3 |
cnpg-fast |
PostgreSQL | 3 或使用外部 CSI |
6. 网络与安全
6.1 网络策略
必须启用:
- 默认拒绝所有 Pod 间访问
aurask-api -> aurask-workeraurask-api / aurask-worker -> PostgreSQLaurask-api / aurask-worker -> Redisaurask-worker -> Langflowaurask-worker -> AnythingLLMLangflow / AnythingLLM -> 外部模型代理或白名单域名
6.2 入口安全
- 强制 HTTPS
- 开启 WAF/基础限流
- 对
/payments/*、/auth/*、/workflow-runs增加速率限制 - 后台入口强制二次认证
6.3 Secret 管理
建议使用以下任一方案:
External Secrets Operator+ 外部密钥管理SOPS+age
不要把以下信息明文提交到 Git:
LANGFLOW_SECRET_KEYDATABASE_URLTRC20收款钱包配置- 第三方 LLM API Key
- SMTP / Webhook 签名密钥
7. 可观测性
建议部署:
| 组件 | 作用 |
|---|---|
| Prometheus | 指标采集 |
| Grafana | 可视化 |
| Loki | 日志检索 |
| Alertmanager | 告警 |
| kube-state-metrics | 集群对象指标 |
| node-exporter | 节点指标 |
至少监控以下指标:
aurask-api请求量、延迟、错误率workflow_runs_totalworkflow_run_failed_totaltbu_reserved_totaltbu_consumed_totalqueue_depthlangflow_runtime_secondsanythingllm_document_ingest_seconds- PostgreSQL CPU、连接数、WAL、复制延迟
- Redis 内存、延迟、命中率
告警优先级:
P1:API 全站不可用、数据库主库不可写、支付匹配故障P2:工作流失败率升高、AnythingLLM 入库堆积、队列堆积P3:磁盘使用率、备份失败、证书续期异常
8. 备份与容灾
8.1 PostgreSQL
- 使用
CloudNativePG做持续归档与定时备份 - 备份目标:外部 S3 兼容对象存储
- 目标:
RPO <= 15 分钟RTO <= 2 小时
8.2 Longhorn
- 每日快照
- 每周备份到对象存储
- 每月恢复演练一次
8.3 AnythingLLM 与 Aurask 审计数据
- 文档对象外部化存储
- 审计日志每日归档
- 支付订单与链上交易匹配记录保留至少
180天
9. 推荐调度策略
9.1 节点标签
建议给节点加标签:
node-role.kubernetes.io/runtime=truenode-role.kubernetes.io/general=truenode-role.kubernetes.io/data=true
9.2 调度建议
aurask-api:调度到generalaurask-worker:优先general,可溢出到runtimelangflow-runtime:只调度到runtimeanythingllm:优先runtime- PostgreSQL / Redis:优先
data或资源更稳定的 worker
9.3 高可用约束
topologySpreadConstraintspodAntiAffinityPodDisruptionBudget
避免:
- 同一应用所有副本落在同一节点
- PostgreSQL 三个实例共用同一宿主机
- Langflow 与数据库争抢同一节点全部资源
10. 推荐发布方式
建议使用:
Helm管理第三方组件Kustomize管理 Aurask 自研服务GitOps管理环境变更
建议目录:
deploy/
k3s/
README.md
base/
namespace.yaml
network-policies.yaml
aurask-api.yaml
aurask-worker.yaml
ingress.yaml
overlays/
staging/
production/
11. 分阶段上线顺序
Phase 1:集群底座
- 创建
3 server + 4 workerk3s集群 - 配置公网 LB / MetalLB / DNS
- 安装
cert-manager - 安装
Longhorn - 安装 observability 基础栈
Phase 2:数据层
- 部署
CloudNativePG - 初始化
PostgreSQL + PGVector - 部署
PgBouncer - 部署
Redis - 配置对象存储与备份桶
Phase 3:应用层
- 部署
aurask-api - 部署
aurask-worker - 部署
Langflow Runtime - 部署
AnythingLLM - 接通内部服务发现与 NetworkPolicy
Phase 4:生产化
- 开启
HPA - 打通告警
- 打通 PostgreSQL 备份
- 打通 Longhorn 备份
- 完成一次恢复演练
- 完成一次工作流压测与支付链路演练
12. 首版压测目标
建议上线前达到以下最低标准:
| 项目 | 目标 |
|---|---|
| API 可用性 | 99.5%+ |
| 健康工作流成功率 | 95%+ |
| 支付匹配成功率 | 99%+ |
| 峰值并发工作流 | 10-20 |
| P95 API 延迟 | < 500ms(不含外部模型调用) |
| P95 工作流排队时间 | < 10s |
| PostgreSQL 备份恢复演练 | 每月 1 次 |
13. 当前实现与目标部署的差异
当前仓库已经具备首版领域骨架,但与 k3s 生产部署之间还存在以下差异:
- 当前仍是单进程模块化单体,需要拆成
API与Worker - 当前使用本地 JSON 持久化,生产需切到
PostgreSQL - 当前 Langflow / AnythingLLM 是适配层,生产需接真实服务
- 当前未交付 Helm/Kustomize manifests,本文档先定义目标方案
14. 首版推荐结论
如果 Aurask 现在就要按 300 名月度活跃付费用户 上 k3s,推荐的最稳妥首版是:
3台k3s server4台 workerTraefik + cert-managerCloudNativePG + PGVectorRedisLonghornPrometheus + Grafana + Loki + Alertmanager- Aurask 自身先拆成
aurask-api与aurask-worker - Langflow / AnythingLLM 作为内部
ClusterIP服务接入
这个方案的重点不是“极限压低成本”,而是 先满足 300 MAU 阶段的稳定性、隔离、审计、扩容和恢复能力。
15. 官方参考
以下官方文档可作为落地实施时的基线依据:
k3sCluster Datastore:https://docs.k3s.io/datastorek3sHigh Availability Embedded etcd:https://docs.k3s.io/datastore/ha-embeddedcert-managerInstallation:https://cert-manager.io/docs/installation/LonghornInstallation / Requirements:https://longhorn.io/docs/latest/deploy/install/CloudNativePGDocumentation:https://cloudnative-pg.io/documentation/current/CloudNativePGBackup:https://cloudnative-pg.io/documentation/current/backup/AnythingLLMSelf-hosted System Requirements:https://docs.anythingllm.com/installation-docker/system-requirementsLangflowSecurity:https://docs.langflow.org/security