MCP+Kubernetes故障排除演示
场景
基于Go的订单服务部署到Kubernetes。一切 外表 健康:
- Pod状态:
Running - 活体探针:
passing - 准备就绪探针:
passing
但每一个请求 /api/orders 回报 500内部服务器错误.
臭虫
应用程序希望其数据库配置文件位于:
/app/config/db-credentials.jsonKubernetes清单将秘密挂载在:
/etc/secrets/db-credentials.json这种路径不匹配对Kubernetes是不可见的——pod启动,健康检查 通过(它们不接触配置),pod保持不变 Running 国家。
只有当实际流量到达业务端点时,才会出现故障。
为什么这是一个好的演示Bug
- 这很现实 --应用程序期望与K8s清单之间的路径不匹配
这种情况经常发生,尤其是当不同的团队拥有应用程序和infra时。
- 它是跨层的 --你无法通过查看来找到根本原因 *仅* 这
日志, *仅* K8s事件,或 *仅* 部署规范。你需要这三个。
- 这很微妙 —
kubectl get pods显示Running 1/1 Ready问题是
在用户开始抱怨之前,标准监控是不可见的。
本地运行(无K8s)
# The service starts fine — no crash
cd app && go run main.go
# Health check passes
curl http://localhost:8080/healthz
# But orders fail (no config file at /app/config/)
curl http://localhost:8080/api/orders
# Run the traffic simulator
../scripts/simulate-traffic.sh在Kubernetes上运行
# Create namespace
kubectl create namespace demo
# Build image (if using local cluster like kind/minikube)
docker build -t order-service:latest ./app
# Deploy
kubectl apply -f k8s/deployment.yaml
# Watch — pods will show Running, Ready 1/1
kubectl get pods -n demo -w
# Port-forward and test
kubectl port-forward -n demo svc/order-service 8080:80
./scripts/simulate-traffic.shMCP揭示了什么
当MCP上下文聚合器从该场景中收集数据时,它提供:
| 信号 | 它显示了什么 |
|---|---|
| Pod状态 | 正在运行,准备就绪——具有误导性 |
| 日志 | CONFIG ERROR: failed to read config from /app/config/... |
| 部署规范 | volumeMounts.mountPath: /etc/secrets |
| 事件 | 没有警告——K8s没有发现任何问题 |
AI代理交叉引用这些信号:
- 日志显示:预期路径为
/app/config/ - 规范说:安装在
/etc/secrets/ - 结论:路径不匹配→ 修复volumeMount
这是一种跨层推理,没有一种工具可以开箱即用。
