aurask/deploy/k3s/README.md
Aaron 1ae23d44c1
All checks were successful
aurask-release / build-and-deploy (push) Successful in 3m7s
Expand Aurask k3s production overlay and release pipeline
2026-04-19 18:05:46 +08:00

20 KiB
Raw Blame History

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
    • ServiceNodePort 30091
  • aurask-web
    • 镜像:registry.mydevcloud.love/devcloud/aurask-web
    • 来源:protal/
    • 节点:154.193.250.23
    • Kubernetes 节点名:devcloud-trade-agent-2
    • ServiceNodePort 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
    • ServiceNodePort 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-state PVC
    • StorageClass: 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-apiaurask-workeraurask-webaurask-manager 镜像到当前 commit SHA

仓库所需 Gitea Actions Secrets

  • SSH_PRIVATE_KEY
  • REGISTRY_USER
  • REGISTRY_PASSWORD
  • POSTGRES_DB
  • POSTGRES_USER
  • POSTGRES_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 网关是唯一公网业务入口。
  • LangflowAnythingLLMPostgreSQLPGVectorRedis 不直接暴露公网。
  • 基础用户只运行审核模板,不开放任意代码执行。
  • 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-protalaurask-manager 静态前端
aurask-runtime aurask-workerlangflow-runtimeanythingllm
aurask-data PostgreSQL、PGVector、PgBouncer、Redis
observability Prometheus、Grafana、Loki、Alertmanager
longhorn-system Longhorn

要求:

  • 默认 NetworkPolicydeny-all
  • 只允许 aurask-api 接收公网 Ingress 流量。
  • aurask-protalaurask-manager 可以暴露公网,但它们只访问 aurask-api
  • LangflowAnythingLLMPostgreSQLRedisClusterIP

5. 应用工作负载

5.1 aurask-api

来源:

  • api/aurask/api.py
  • api/aurask/app.py
  • api/aurask/auth.py
  • api/aurask/billing.py
  • api/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.py
  • api/aurask/knowledge_base.py
  • api/aurask/payments.py
  • api/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.py
  • api/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-apiaurask-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-apiaurask-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-runtime
  • anythingllm
  • postgres
  • pgbouncer
  • redis

管理员面板额外要求:

  • 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 备份目标

  • PostgreSQLRPO <= 15 分钟RTO <= 2 小时
  • Longhorn每日快照每周备份。
  • 支付订单与链上交易匹配记录:至少保留 180 天。
  • 每月至少做一次恢复演练。

13. 可观测性

组件:

  • Prometheus
  • Grafana
  • Loki
  • Alertmanager
  • kube-state-metrics
  • node-exporter

必须监控:

  • aurask-api QPS、P95、错误率。
  • aurask-worker 队列深度、执行时长、失败率。
  • tbu_reserved_totaltbu_consumed_totaltbu_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-manager
  • longhorn
  • cloudnative-pg
  • prometheus-stack
  • loki
  • redis operator 或 chart

Kustomize 管理:

  • Aurask 自研服务。
  • Ingress。
  • NetworkPolicy。
  • 环境差异。

15. 上线步骤

Phase 1集群底座

  1. 创建 3 server + 4 worker k3s 集群。
  2. 配置公网 LB 与 DNS。
  3. 安装 cert-manager
  4. 安装 Longhorn 或云 CSI。
  5. 安装 observability 基础栈。

Phase 2数据层

  1. 安装 CloudNativePG
  2. 初始化 PostgreSQL 与 PGVector。
  3. 部署 PgBouncer。
  4. 部署 Redis。
  5. 配置对象存储与备份桶。

Phase 3Aurask 应用层

  1. 构建并推送 aurask-api 镜像。
  2. 构建并推送 aurask-web 镜像。
  3. 构建并推送 aurask-manager 镜像。
  4. 部署 aurask-api
  5. 部署 aurask-worker
  6. 部署 aurask-webaurask-manager
  7. 配置 Ingress、TLS、NetworkPolicy。

Phase 4Runtime 层

  1. 部署 Langflow Runtime。
  2. 部署 AnythingLLM。
  3. 配置 AURASK_LANGFLOW_*AURASK_ANYTHINGLLM_* secret。
  4. 使用 GET /admin/bridge-status 验证桥接配置。
  5. 跑通模板工作流与文档入库。

Phase 5生产化验收

  1. 开启 HPA / KEDA。
  2. 跑并发工作流压测。
  3. 演练支付匹配。
  4. 演练 PostgreSQL 备份恢复。
  5. 演练节点故障与 Pod 重调度。
  6. 检查 Langflow / AnythingLLM 未暴露公网。

16. 验收标准

项目 目标
API P95 < 500ms,不含外部模型调用
峰值并发工作流 10-20
工作流成功率 95%+
支付匹配成功率 99%+
工作流排队 P95 < 10s
PostgreSQL RPO <= 15 分钟
PostgreSQL RTO <= 2 小时
月可用性 99%+
外部暴露面 仅 API、用户面板、管理面板

17. 当前代码差距

当前已经具备:

  • 根目录划分:apiprotalmanagerdeploy
  • PostgreSQL / PGVector / Redis / AnythingLLM / Langflow 桥接契约。
  • /admin/bridge-status 桥接状态接口。
  • 静态用户面板和管理面板。
  • 请求样例:api/requests/aurask-api.http

仍需补齐:

  • deploy/k3s/base manifests。
  • 真实 PostgreSQL repository。
  • Redis 队列消费者。
  • aurask-worker 独立启动命令。
  • 真实 Langflow / AnythingLLM API 适配细节校验。
  • 前端构建流程与容器镜像。
  • Secret / NetworkPolicy / HPA / KEDA manifests。

18. 官方参考