Kubernetes故障排查演示

一个演示Kubernetes中配置路径不匹配导致服务故障的场景,用于展示跨层故障排查技术。

  • by VelmiraPetkova
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 VelmiraPetkova/mcp-k8s-demo

使用说明

MCP+Kubernetes故障排除演示

场景

基于Go的订单服务部署到Kubernetes。一切 外表 健康:

  • Pod状态: Running
  • 活体探针: passing
  • 准备就绪探针: passing

但每一个请求 /api/orders 回报 500内部服务器错误.

臭虫

应用程序希望其数据库配置文件位于:

/app/config/db-credentials.json

Kubernetes清单将秘密挂载在:

/etc/secrets/db-credentials.json

这种路径不匹配对Kubernetes是不可见的——pod启动,健康检查 通过(它们不接触配置),pod保持不变 Running 国家。

只有当实际流量到达业务端点时,才会出现故障。

为什么这是一个好的演示Bug

  1. 这很现实 --应用程序期望与K8s清单之间的路径不匹配 这种情况经常发生,尤其是当不同的团队拥有应用程序和infra时。

  2. 它是跨层的 --你无法通过查看来找到根本原因 仅 这 日志, 仅 K8s事件,或 仅 部署规范。你需要这三个。

  3. 这很微妙 — 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.sh

MCP揭示了什么

当MCP上下文聚合器从该场景中收集数据时,它提供:

信号 它显示了什么
Pod状态 正在运行,准备就绪——具有误导性
日志 CONFIG ERROR: failed to read config from /app/config/...
部署规范 volumeMounts.mountPath: /etc/secrets
事件 没有警告——K8s没有发现任何问题

AI代理交叉引用这些信号:

  • 日志显示:预期路径为 /app/config/
  • 规范说:安装在 /etc/secrets/
  • 结论:路径不匹配→ 修复volumeMount

这是一种跨层推理,没有一种工具可以开箱即用。