tianhg468/ai-incident-response-demo
GitHub: tianhg468/ai-incident-response-demo
一个演示 AI 事件响应工程师工作模式的极简 Web 应用,包含 Kubernetes 部署和多种故障场景。
Stars: 0 | Forks: 0
# AI 事件响应演示应用
一个极简的 Web 应用程序,用于演示 AI 事件响应工程师的实时工作模式。
## 包含内容
- **Simple Node.js API** - 极简 Express 服务器
- **Kubernetes 清单** - Deployment、Service、ConfigMap
- **GitHub Actions** - 自动化部署流水线
- **事件场景** - 触发真实事件的脚本
- **本地 K8s 设置** - minikube 说明
## 快速开始
### 1. 前置条件
```
# 安装所需工具
brew install minikube kubectl docker
# 或者在 Linux 上:
# sudo apt-get install docker.io
# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
# sudo install minikube-linux-amd64 /usr/local/bin/minikube
```
### 2. 启动本地 Kubernetes 集群
```
# 启动 minikube
minikube start --memory=4096 --cpus=2
# 验证其运行状态
kubectl get nodes
# 启用 metrics server(用于资源监控)
minikube addons enable metrics-server
# 使用 minikube 的 Docker 守护进程(可选,用于本地构建)
eval $(minikube docker-env)
```
### 3. 部署应用程序
```
# 构建 Docker 镜像
docker build -t demo-app:v1 .
# 应用 Kubernetes 清单
kubectl apply -f k8s/
# 等待部署
kubectl wait --for=condition=available --timeout=60s deployment/demo-app
# 检查 pods 是否运行
kubectl get pods
# 访问应用
minikube service demo-app --url
# 或者:kubectl port-forward svc/demo-app 8080:80
# 然后访问 http://localhost:8080
```
### 4. 触发事件
```
# 场景 1:触发 OOM(内存限制过低)
./incidents/trigger-oom.sh
# 场景 2:触发崩溃循环
./incidents/trigger-crash.sh
# 场景 3:模拟高错误率
./incidents/trigger-errors.sh
```
### 5. 运行 AI 代理(实时模式)
```
# 返回主项目
cd ..
# 配置实时模式
export MODE=live
export KUBECONFIG=~/.kube/config
export K8S_NAMESPACE=default
export GITHUB_TOKEN=ghp_your_token_here
export GITHUB_ORG=your-github-username
# 运行事件响应代理
python -m agent.graph
```
## 应用程序端点
- `GET /` - 健康检查(返回 OK)
- `GET /health` - 详细健康状态
- `GET /metrics` - Prometheus 风格指标
- `POST /crash` - 故意导致 Pod 崩溃
- `POST /oom` - 触发内存溢出
- `POST /errors` - 生成 5xx 错误
## Kubernetes 资源
应用程序将部署:
- **Deployment**:3 个副本
- **Service**:LoadBalancer 类型(minikube tunnel)
- **ConfigMap**:应用程序配置
- **资源限制**:256Mi 内存,200m CPU
## 事件场景
### 场景 1:部署后内存溢出
1. 使用 512Mi 内存限制部署
2. 应用程序初始运行正常
3. 将 Deployment 更新为 128Mi(过低)
4. Pod 开始被 OOMKilled
5. 代理检测、诊断并提议回滚
### 场景 2:配置错误导致崩溃循环
1. 使用有效配置部署
2. 使用无效 JSON 更新 ConfigMap
3. Pod 重启时崩溃
4. 代理检测到配置问题并提议修复
### 场景 3:部署后错误率激增
1. 部署 v1(稳定版)
2. 部署有 bug 的 v2
3. 错误率飙升
4. 代理与部署关联并提议回滚
## GitHub Actions 工作流
仓库包含 CI/CD 流水线:
- **推送到 main**:构建并部署到"生产环境"
- **PR**:运行测试并构建镜像
- **手动触发**:可以部署特定版本
## 清理
```
# 删除所有资源
kubectl delete -f k8s/
# 停止 minikube
minikube stop
# 删除 minikube 集群(可选)
minikube delete
```
## GitHub 设置
1. 创建新的 GitHub 仓库:`ai-incident-response-demo`
2. 推送此代码:
git init
git add .
git commit -m "Initial demo app"
git remote add origin https://github.com/YOUR_USERNAME/ai-incident-response-demo.git
git push -u origin main
3. 设置 GitHub Actions(已在 `.github/workflows/` 中配置)
4. 添加部署所需的仓库密钥(如需要)
## 与 AI 代理集成
代理将:
1. **读取 Kubernetes**:检查 Pod 状态、事件、日志
2. **读取 GitHub**:分析提交、PR、部署历史
3. **关联数据**:将事件与部署匹配
4. **提议修复**:回滚、扩缩容、配置更改
5. **需要审批**:执行前需人工审核
6. **安全执行**:将修复应用到 Kubernetes
## 下一步
1. ✅ 部署到本地 Kubernetes
2. ✅ 触发事件
3. ✅ 运行 AI 代理
4. ✅ 观察调查过程
5. ✅ 批准/拒绝提议的修复
6. ✅ 在仪表板中查看结果
## 故障排除
**Minikube 无法启动:**
```
minikube delete
minikube start --driver=docker
```
**Pod 停留在 Pending 状态:**
```
kubectl describe pod
# 检查 events 部分是否有错误
```
**无法访问服务:**
```
# 使用 port-forward 代替
kubectl port-forward svc/demo-app 8080:80
```
**代理无法连接到 Kubernetes:**
```
# 验证 kubeconfig
kubectl config view
kubectl config current-context
# 应为 "minikube"
```
# 测试
标签:AI事件响应, Docker, Express, GitHub Actions, GNU通用公共许可证, minikube, MITM代理, NIDS, Node.js, 子域名突变, 安全防御评估, 容器化, 故障注入, 混沌工程, 演示应用, 特权提升, 自动化运维, 自动化部署, 自动笔记, 请求拦截, 逆向工具