
🧠 记忆锚点:开发可直跑,生产容器化;代码执行和多租户必须强隔离。
💡 答案要点
两种方案对比:
| 维度 | 容器化部署(Docker/K8s) | 宿主机部署 |
|---|---|---|
| 隔离性 | ✅ 每个 Agent 独立容器,互不影响 | ❌ 共享进程空间,有干扰 |
| 弹性伸缩 | ✅ K8s HPA 自动扩容 | ❌ 手动扩容,响应慢 |
| 资源开销 | ❌ 容器启动 100-300ms,内存多10% | ✅ 无额外开销 |
| 安全性 | ✅ 容器沙箱,代码执行隔离 | ❌ Agent 可操作宿主机 |
| 部署复杂度 | ❌ 需要容器知识 | ✅ 简单直接 |
| 适用场景 | 生产环境,多 Agent 并发 | 开发调试,资源紧张 |
推荐方案:容器化 + 容器池预热
yaml
# docker-compose.yml 示例
services:
agent-service:
image: my-agent:latest
deploy:
replicas: 3 # 3个实例
resources:
limits:
cpus: '0.5'
memory: 512M # 限制资源防止一个Agent耗尽
environment:
- MAX_CONCURRENT_TASKS=5
- TOOL_EXECUTION_TIMEOUT=30s
# 容器池:预热避免冷启动
agent-pool:
image: my-agent:latest
command: ["python", "pool_manager.py", "--size=5"]python
# 容器池管理(参考 OpenClaw/E2B 方案)
class AgentContainerPool:
def __init__(self, pool_size=5):
self.pool = []
self._pre_warm(pool_size) # 预启动5个容器
def _pre_warm(self, n: int):
for _ in range(n):
container = docker.run("agent:latest", detach=True)
self.pool.append(container)
def get_container(self):
"""从池中取容器,100ms内就绪(vs 冷启动300ms)"""
if self.pool:
container = self.pool.pop()
self._pre_warm(1) # 异步补充一个
return container
return docker.run("agent:latest") # 池空了才冷启动实际选择建议:
- 开发/测试:宿主机直接运行,快速迭代
- 生产单机:Docker Compose,简单隔离
- 生产集群:K8s + HPA 自动扩缩容
- 多租户/代码执行:容器沙箱强制隔离(安全红线)
面试话术:
"我们生产环境用容器化部署,原因是三个:1) 安全隔离,Agent 执行代码工具时在独立容器,rm -rf 也只删容器不影响宿主机;2) 弹性伸缩,K8s HPA 根据队列长度自动扩容;3) 故障隔离,一个 Agent 挂了不影响其他实例。优化点是容器池预热,保持5个热容器,避免冷启动延迟 300ms。"