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仪表盘, 严重度分类, 人机协作, 告警系统, 子域名突变, 数据库存储, 智能监控, 根因分析, 网络测绘, 自动修复, 请求拦截, 运维自动化, 逆向工具