从本地开发到 Kubernetes 生产部署的 Agent 架构蓝图,涵盖配置管理、健康检查、日志监控、灰度更新、故障恢复等生产级要求。
在开发者的机器上构建 AI Agent 是令人兴奋的第一步。但在生产环境中可靠地运行同一个 Agent 是一个不同的挑战。
一旦真实用户和外部服务参与其中,应用需要的不仅仅是能正常工作的代码。它需要可重复的部署、安全的配置、健康检查、监控、受控的更新,以及清晰的恢复流程。
本文是我的 MCP 系列的一部分。如果你对这个话题还不熟悉,可以先阅读我的第一篇文章:Model Context Protocol (MCP) Servers Explained: A Complete Beginner's Guide。
在本文中,我将概述一个实用的架构,用于将基于 Model Context Protocol(MCP)的 AI Agent 从本地开发环境部署到 Kubernetes。
这是一个生产架构蓝图。具体的实现将取决于应用所使用的 AI 提供商、MCP 服务器、云平台和安全要求。
Model Context Protocol 为 AI 应用提供了一种标准化的方式来连接外部工具、服务和数据源。
一个基于 MCP 的 Agent 可能会与以下内容进行交互:
一个基础的实现在开发者的机器上可能运行得很好。但在生产环境中,每个依赖都引入了运维问题:
这些是熟悉的 DevOps 和 Site Reliability Engineering 问题,应用于一种新类型的工作负载。
一个实用的交付流程可能如下所示:
Developer
↓
GitHub Repository
↓
GitHub Actions
↓
Container Registry
↓
Kubernetes Cluster
↓
MCP Servers and External Services
↓
Logs, Metrics, Traces, and Alerts
每个组件都有明确的责任:
容器化为应用在开发、测试和生产环境中提供一致的运行时。
一个简单的基于 Python 的 Agent 可以使用以下 Dockerfile:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN useradd --create-home appuser
USER appuser
EXPOSE 8000
CMD ["python", "app.py"]
这个例子遵循了几个有用的实践:
容器镜像不应包含 API 密钥、访问令牌或特定于环境的凭据。
Kubernetes 提供了一致的方式来部署、重启、扩展和更新服务。
一个简化的部署可能如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mcp-agent
spec:
replicas: 2
selector:
matchLabels:
app: mcp-agent
template:
metadata:
labels:
app: mcp-agent
spec:
containers:
- name: mcp-agent
image: registry.example.com/mcp-agent:1.0.0
ports:
- containerPort: 8000
envFrom:
- secretRef:
name: mcp-agent-secrets
readinessProbe:
httpGet:
path: /ready
port: 8000
livenessProbe:
httpGet:
path: /health
port: 8000
resources:
requests:
cpu: "250m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
这个配置引入了几个生产控制:
这些值应该在观察应用实际资源使用情况后进行调整。
AI Agent 可能需要模型提供商、MCP 服务器、数据库或外部 API 的凭据。
这些值永远不应该被提交到 Git 或嵌入到容器镜像中。
Kubernetes Secrets 提供了应用代码和敏感配置之间的基本分离。为了获得更强的生产安全性,集群可以与专门的密钥平台集成,例如:
访问应该遵循最小权限原则。Agent 应该仅接收它所需的权限,凭据应该有明确的轮换流程。
可靠的 CI/CD 管道应在部署前验证应用。
一个典型的管道可能包括:
一个简化的 GitHub Actions 工作流可能如下所示:
name: Build and Deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Run tests
run: |
pip install -r requirements.txt
pytest
- name: Build container image
run: |
docker build -t mcp-agent:${{ github.sha }} .
生产管道应使用固定的 action 版本、受保护的环境、安全身份验证和不可变的镜像标签。
使用 Git 提交 SHA 作为镜像标签也使得更容易识别确切哪个代码版本正在运行。
传统的基础设施指标很重要,但对于 AI Agent 来说还不够。
一个有用的可观测性策略应该同时覆盖平台和应用:
结构化日志应包含以下字段:
敏感的提示、凭据、个人信息和完整的模型响应不应该在没有适当控制的情况下写入日志。
分布式追踪可以帮助跟踪请求跨越:
User Request → Agent → Model Provider → MCP Server → External Service
当总响应时间取决于多个外部系统时,这变得特别有价值。
MCP 服务器或外部 API 最终会变得缓慢、不可用或受到速率限制。Agent 应该在不引起更广泛服务故障的情况下处理这些情况。
有用的可靠性控制包括:
重试应该谨慎使用。重复不安全或非幂等的操作可能会创建重复记录或多次触发相同的操作。
Kubernetes 可以水平扩展副本,但 CPU 使用率可能并不总是反映 AI 应用的真实负载。
根据架构,扩展决策可以考虑:
扩展 Agent 并不会自动扩展其依赖。更多数量的 Agent 副本可能会给数据库、MCP 服务器和第三方 API 施加额外的压力。
因此,容量规划应该考虑完整的请求路径。
生产 AI 系统引入的风险超出了常规应用安全的范围。
重要的控制包括:
Agent 仅仅因为它能使用 MCP 工具就不应该获得广泛的基础设施或业务系统访问权限。每个操作仍然应该通过明确的身份验证和授权控制。
在发布基于 MCP 的 Agent 之前,请确认:
构建 AI Agent 演示了应用功能。将其投入生产演示了工程成熟度。
Docker 提供一致的运行时。Kubernetes 管理可用性和扩展性。CI/CD 启用受控的发布。可观测性展示系统如何表现。安全和可靠性控制确定服务是否可信任于真实环境。
MCP 可能引入了一个新的集成模型,但生产原则仍然是熟悉的:自动化交付、减少不必要的访问、观察每个依赖、预期故障,并使恢复成为设计的一部分。
你将如何在你的环境中方法扩展和监控基于 MCP 的 Agent?
如需进一步的行动,你可能会考虑屏蔽此人和/或报告滥用行为