Purvii15/k8s-ai-incident-response
GitHub: Purvii15/k8s-ai-incident-response
一个基于AI的Kubernetes事件响应代理,自动化监控Pod故障并生成修复建议。
Stars: 0 | Forks: 0
# chnical jargon in English, I should output "API" as is.
一个 Kubernetes 事件响应代理,能够监控 Pod 故障、收集日志,并利用本地部署的 LLM(通过 Ollama)生成根本原因分析和修复建议。实时将警报发送到 Discord 或 Slack。可选地,在人工审批后自动修复事件。
## 功能介绍
- 每 30 秒轮询一次 Kubernetes API(可配置)
- 检测 CrashLoopBackOff、ImagePullBackOff、OOMKilled 和 Failed 状态的 Pod
- 收集故障 Pod 中所有容器的日志
- 将日志和上下文发送给 DeepSeek-Coder(或任意 Ollama 模型)进行分析
- 将严重性分类为低、中、高
- 将格式化警报发送到 Discord 和/或 Slack
- 将所有事件存储在 SQLite(或 PostgreSQL)中
- 暴露 REST API 用于查询事件和事后分析报告
- 包含 Streamlit 仪表盘,用于实时可视化
- 可自动修复:重启部署、删除 Pod、回滚或扩容
## 技术栈
- Python 3.11、FastAPI、asyncio
- Kubernetes Python 客户端
- Ollama(deepseek-coder)
- SQLAlchemy 2.0 异步 + SQLite/PostgreSQL
- Streamlit 仪表盘
- Docker + Kubernetes 清单文件
## 快速开始
**要求:** Python 3.11+、运行中的 Ollama、启用了 Kubernetes 的 Docker Desktop
```
pip install -r requirements.txt
ollama pull deepseek-coder
cp .env.example .env
python -m agent.main
```
API 文档:http://localhost:8000/docs
启动仪表盘:
```
streamlit run dashboard/app.py
```
## 测试方法
部署一个有问题的应用以触发 ImagePullBackOff:
```
kubectl apply -f kubernetes/broken-app.yaml
```
30 秒内,代理将检测到故障,使用 LLM 进行分析,并存储事件。查看方法:
```
curl http://localhost:8000/incidents
```
清理:
```
kubectl delete -f kubernetes/broken-app.yaml
```
## 配置说明
所有设置从环境变量或 `.env` 文件读取。完整列表请参阅 `.env.example`。
| 变量 | 默认值 | 描述 |
|---|---|---|
| K8S_NAMESPACES | ["default"] | 要监控的命名空间 |
| K8S_POLL_INTERVAL_SECONDS | 30 | 轮询频率 |
| OLLAMA_BASE_URL | http://localhost:11434 | Ollama 端点 |
| OLLAMA_MODEL | deepseek-coder | 使用的模型 |
| DISCORD_WEBHOOK_URL | - | Discord 警报 |
| SLACK_WEBHOOK_URL | - | Slack 警报 |
| AUTO_REMEDIATION_ENABLED | false | 启用自动修复 |
| APPROVAL_REQUIRED | true | 修复前需要审批 |
| DATABASE_URL | sqlite+aiosqlite:///./incidents.db | 存储位置 |
## - Looking back at the example: 'API Reference' -> 'API 参考', so "API" is kept in English, and "Reference" is translated. So for "API" alone, I should keep it as "API" in the translation.
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /health | 代理健康检查 |
| GET | /incidents | 列出事件(可过滤、分页) |
| GET | /incidents/{id} | 事件详情 |
| GET | /incidents/{id}/postmortem | 事后分析报告 |
| POST | /incidents/{id}/approve | 批准或拒绝修复 |
| GET | /docs | Swagger UI |
## 在 Kubernetes 内部部署
该代理可以作为 Pod 运行在集群内部,通过一个拥有集群级读权限的 ServiceAccount 监控所有其他 Pod。
```
docker build -t ai-incident-response-agent:latest .
kubectl apply -k kubernetes/agent/
kubectl logs -f deployment/incident-agent -n incident-agent
```
通过 NodePort 在 http://localhost:30800/docs 访问 API,或使用端口转发:
```
kubectl port-forward svc/incident-agent 8000:8000 -n incident-agent
```
`kubernetes/agent/` 目录包含所有清单文件:命名空间、RBAC、ConfigMap、Secret、PVC、Deployment、Service,以及一个 Ollama 部署。
## 运行测试
```
pytest tests/ -v
```
77 个测试——包括 Watcher、Analyzer、Remediator 和 Alerter 的单元测试;存储和 REST API 的集成测试。
## 项目结构
```
agent/
main.py entry point
config.py settings via pydantic-settings
models.py enums and domain models
store.py async SQLAlchemy store
watcher.py Kubernetes pod watcher
log_collector.py log collection
analyzer.py Ollama LLM integration
alerter.py Discord and Slack alerts
remediator.py auto-remediation
pipeline.py incident lifecycle orchestrator
api/
app.py FastAPI routes
dependencies.py shared state
dashboard/
app.py Streamlit dashboard
kubernetes/
agent/ in-cluster deployment manifests
broken-app.yaml test deployment for triggering incidents
prompts/
incident_prompt.txt LLM prompt template
tests/
unit/
integration/
```
标签:AI辅助运维, AI风险缓解, FastAPI框架, Kubernetes, Kubernetes事件响应, Kubernetes客户端, Ollama模型, Python开发, REST API, Streamlit仪表盘, 严重度分类, 人机协作, 告警系统, 子域名突变, 数据库存储, 智能监控, 根因分析, 网络测绘, 自动修复, 请求拦截, 运维自动化, 逆向工具