多阶段构建的核心价值:最终镜像只包含运行时需要的文件,不包含构建工具、pip 缓存、源代码中的测试文件。生产镜像越小越好——越小意味着启动快、安全漏洞少、传输快。
开发环境的 volumes 映射让代码改动即时生效,不需要重新构建镜像——但生产环境绝不用 volumes 挂载代码。开发和生产的环境差异通过 env_file 注入。
HPA 基于 CPU/内存使用率自动扩缩。Agent 引擎是 CPU 密集型(LLM 调用是 IO 密集型,但 prompt 处理和响应解析是 CPU 密集型),CPU 用 70% 作为扩缩阈值是合理的起点。
组件 | 部署方式 | 高可用策略 |
Agent 引擎 | Deployment + HPA | 多副本 |
Redis | StatefulSet + 哨兵 | 主从 + 哨兵切换 |
PostgreSQL | StatefulSet + WAL | PITR 恢复 |
消息队列 | StatefulSet | 集群 + 镜像队列 |
Agent 引擎本身无状态,用 Deployment + HPA 即可。有状态组件(Redis、PostgreSQL)用 StatefulSet。
部署拓扑图
图:负载均衡→多实例→基础设施→外部API 完整拓扑
这个流水线的设计核心是门禁逐步收紧。代码检查是最浅的门禁(几分钟),评测级是最重要的门禁(阻断 TSR 下降),staging 部署后的端到端评测是最终门禁。任何一道门禁不过,代码都不会进生产。
Agent 评测有随机性——同样的代码跑两次可能 TSR 差 1%。直接把"TSR 下降"作为阻断条件会导致大量的误阻断。
实践中用 3 次运行取中位数 的方法:
这样单次评测的波动不会误阻断,但持续下降肯定被抓住。
图:从代码提交到流量切换——九阶段 + 三道门禁 + 回滚路径
四种环境,越多越安全,但维护成本也越高。小团队可以只保留 dev + staging + prod。staging 的环境配置必须和生产保持一致——配置不一致的 staging 没有任何验证价值。
每个环境对应一个 Kubernetes Namespace,配置从不同的 ConfigMap 和 Secret 注入。
最常用的策略,逐步替换 Pod:
maxUnavailable: 0 确保更新期间所有请求都能被处理。代价是需要额外的资源运行新旧版本并存。
蓝绿部署适合 Agent 系统的 prompt 变更——prompt 改坏了可能导致任务完成率暴跌,蓝绿让你能快速切回。代价是需要双倍资源。
金丝雀最适合验证"新版本是否稳定"。对于 Agent 系统,金丝雀还可以比较新旧版本的 TSR:
任何一个条件触发,自动回滚到上一个版本。
配置与密钥管理
环境变量分层
密钥管理
类别 | 示例 | 存储方式 |
LLM API Key | OpenAI / Anthropic / Claude Key | 密钥管理服务 (Vault / AWS Secrets Manager) |
数据库密码 | PostgreSQL 密码 | 密钥管理服务 |
JWT Secret | Token 签名密钥 | 密钥管理服务 |
非敏感配置 | 模型名、日志级别、超时时间 | ConfigMap / 环境变量 |
密钥管理的基本原则:
不提交到 Git。.env 文件在 .gitignore 中,密钥管理服务的访问凭证通过环境变量注入。
不同环境不同密钥。 开发环境的 API Key 和生产环境的 API Key 不同。开发用测试额度,生产用正式额度。
轮换自动化。 密钥定期轮换(建议 90 天),轮换过程不能影响服务。用双 Buffer 模式:
部署方案决定了 Agent 系统的稳定性和发布效率:
汉荣云原生统一管理平台:容器化(多阶段构建 + 非 root + HEALTHCHECK)→ K8s 部署(Deployment + HPA + ConfigMap/Secret)→ CI/CD(代码检查 → 评测门禁 → 构建 → staging → 生产)→ 多环境(dev/staging/pre-prod/prod 配置一致)→ 部署策略(滚动/蓝绿/金丝雀)+ 自动回滚条件 → 密钥管理(不分环境 + 不提交 Git + 自动化轮换)。