最近把一个 AI Agent 工具链往 K8s 测试环境里迁移。它本身不是一个单服务,而是一组工具:MCP Server、浏览器自动化、代码执行 runner、日志查询工具和少量内部 API 适配器。
本地 docker compose 能跑,不代表 K8s 里能顺利起来。第一次部署时,Pod 卡在了镜像拉取阶段。
kubectl get pod -n agent-tools
kubectl describe pod <pod-name> -n agent-tools
事件里看到:
ImagePullBackOff
context deadline exceeded
下面是这次预检记录。
环境目标
| 项目 | 内容 |
|---|---|
| 集群 | K8s 测试集群 |
| namespace | agent-tools |
| 运行方式 | Deployment |
| 工具类型 | MCP Server、浏览器工具、runner |
| 主要问题 | 镜像来源和运行时配置不一致 |
第一步:先列出工具镜像
我先从 YAML 里找镜像:
grep -n "image:" deploy/*.yaml
工具链镜像大致分成:
| 类型 | 用途 |
|---|---|
| 基础运行时 | Node/Python 工具执行 |
| 浏览器工具 | 页面复现、截图、E2E |
| MCP Server | 暴露工具能力 |
| K8s 工具 | 查询事件、日志和状态 |
这一步的目标是确认到底有哪些镜像要进入节点,不要等 Pod 卡住后才逐个找。
第二步:节点侧预拉
在发布前,我会先在节点或同网络环境里预检:
docker pull <team-registry>/node-runtime:20
docker pull <team-registry>/browser-tool:latest
docker pull <team-registry>/mcp-server:latest
如果使用 containerd,可以用:
crictl pull <team-registry>/node-runtime:20
crictl pull <team-registry>/browser-tool:latest
这里没有写具体第三方入口。生产或测试环境里,建议使用团队已验证的镜像仓库、缓存仓库或云上镜像服务,避免每次都临时依赖外部地址。
第三步:看 Pod 事件
部署后先看事件:
kubectl get events -n agent-tools --sort-by=.lastTimestamp
如果是镜像拉取问题,通常还没到应用日志阶段。常见判断:
| 事件 | 方向 |
|---|---|
ErrImagePull |
镜像地址、tag、权限 |
ImagePullBackOff |
拉取失败后的退避 |
unauthorized |
registry 凭证问题 |
context deadline exceeded |
网络或镜像层超时 |
Back-off restarting failed container |
已启动,问题在应用配置 |
不要把 ImagePullBackOff 和应用启动失败混在一起处理。
第四步:Deployment 最小示例
先跑一个最小工具服务:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mcp-tool
namespace: agent-tools
spec:
replicas: 1
selector:
matchLabels:
app: mcp-tool
template:
metadata:
labels:
app: mcp-tool
spec:
containers:
- name: mcp-tool
image: <team-registry>/mcp-server:latest
ports:
- containerPort: 8931
先确认最小服务能启动,再逐步加浏览器、数据库只读账号、K8s 只读权限和内部 API。
第五步:运行时边界
AI Agent 工具链进入 K8s 后,我会特别看这些配置:
- namespace 是否独立。
- ServiceAccount 是否最小权限。
- Secret 是否只挂载到需要的工具。
- 网络策略是否限制到测试环境。
- 日志是否能记录工具调用。
- 工具镜像是否固定 tag。
Agent 工具链越强,越不能把权限写得太宽。
第六步:回滚和版本
工具链建议固定版本:
image: <team-registry>/browser-tool:v1.0.3
不要所有工具都用 latest。如果某次 Agent 调用失败,至少能知道是模型输出问题、工具版本问题,还是镜像拉取问题。
回滚命令:
kubectl -n agent-tools rollout history deploy/mcp-tool
kubectl -n agent-tools rollout undo deploy/mcp-tool
小结
AI Agent 工具链上 K8s 前,我会先做三类预检:
- 镜像能不能进入节点。
- 工具容器能不能独立启动。
- 权限、网络、日志和回滚是否可控。
本地能跑只说明 compose 环境没问题。真正放到 K8s 里,还要看节点镜像拉取、containerd、ServiceAccount、Secret、网络策略和事件日志。
这些基础工作做完,Agent 再去调工具,才不容易把环境问题误判成模型问题。