我是韩先超,51CTO 学堂 K8s、Python 教学总监、AIOps 实战训练营讲师,云计算架构师,具有 8 年项目实战经验+5 年教学经验,线上学员已达 300w+。


K8s 运维的现实痛点
做过 K8s 生产运维的同学都深有体会:
Pod 异常、容器崩溃、资源打满、调度失败,故障现象五花八门 企业沉淀大量内部运维规范、故障 SOP、踩坑文档,分散在 wiki、word、知识库,故障发生时根本来不及翻阅检索 新手 SRE 面对报错日志、events 事件、describe 输出,很难快速定位根因;老工程师经验无法高效沉淀复用 普通大模型只靠通用训练知识,不了解企业内部集群规范,给出的方案经常不贴合本企业环境,无法直接落地
传统排障流程:登录节点 → 执行 kubectl describe/logs/top/events → 翻阅海量内部文档 → 人工分析 →整理修复方案,整个过程耗时久,对人员经验依赖性极强。
那能不能把企业历史运维文档做成私有知识库,故障发生时自动检索内部 SOP,结合集群实时采集的原始数据,交给大模型直接输出完整故障报告?
没问题!于是,我们实现了这套 K8s RAG 智能故障诊断工具,主程序文件:k8s_rag_ai_ops.py。
工具整体架构设计
SSH 远程采集层:通过 paramiko SSH 连接 K8s 控制节点,远程执行 kubectl 命令,自动采集 Pod describe、容器日志、集群事件、pod 资源负载、节点资源 top 数据 本地 RAG 私有知识库层:使用 bge‑small‑zh 向量化模型,完全离线运行,把企业内部运维文档、故障 SOP、集群调度规范构建向量库;故障发生时,根据故障上下文检索最匹配的内部运维文档片段 大模型推理层:调用 DeepSeek‑v4‑pro,把集群原始采集数据+RAG 检索出来的企业内部知识库片段一起送入 prompt,强制优先参考企业内部规范输出结果 GUI 可视化界面层:基于 tkinter 实现桌面可视化工具,无需敲复杂脚本,填写节点 SSH 信息、API 密钥,点按钮即可一键完成 Pod 故障诊断/集群节点资源扩缩容分析
重点:向量模型全程离线,不需要联网下载,企业内部文档不会外泄,满足内网运维安全要求。
工具核心能力演示
能力 1:一键 Pod 故障诊断
操作流程:
填写 K8s 控制节点 IP、账号密码,建立 SSH 连通 填入 DeepSeek API Key 下拉选择 Namespace、异常 Pod 点击【一键 Pod 故障诊断】
工具后台自动执行:
SSH 执行 kubectl 采集 pod describe、容器日志、集群事件、资源负载把故障上下文送入 RAG 私有知识库,检索匹配企业内部故障 SOP把集群原始数据 + 内部知识库片段,一并提交给 DeepSeek 大模型输出标准化 6 段式故障报告:故障概述、风险评估、根因分析、紧急恢复命令、验证标准、长期优化方案。
能力 2:集群节点资源 & 扩缩容智能分析
很多运维只关注 Pod,忽略节点层面资源水位,导致集群调度异常。
点击【集群节点资源 & 扩缩容建议】按钮:
自动执行kubectl top nodes抓取全节点 CPU 内存真实使用率RAG 检索集群调度、节点扩容下线相关内部运维规范大模型输出节点资源汇总、风险判定、垂直/水平扩容方案、节点驱逐下线可执行命令、集群长期优化策略。
核心代码逻辑节选
主程序 k8s_rag_ai_ops.py 的关键模块:
1. 离线 RAG 知识库加载
# ===================== 全局离线RAG强制配置 =====================PROJECT_ROOT = r"G:\2026年1月21号-AIOps训练营直播\代码\k8s-rag-ops"EMBEDDING_LOCAL_PATH = os.path.join(PROJECT_ROOT, "bge-small-zh")# 全离线阻断HF联网os.environ["TRANSFORMERS_OFFLINE"] = "1"os.environ["HF_HUB_OFFLINE"] = "1"os.environ["HF_DATASETS_OFFLINE"] = "1"os.environ["HUGGINGFACE_HUB_CACHE"] = PROJECT_ROOTTOP_K = 4# 预加载向量知识库def load_rag_kb():if not os.path.exists(EMBEDDING_LOCAL_PATH):raise Exception(f"模型文件夹不存在:{EMBEDDING_LOCAL_PATH}\n请先运行download_model.py下载模型")emb_path = os.path.join(PROJECT_ROOT, "embeddings.npy")chunk_path = os.path.join(PROJECT_ROOT, "chunks.pkl")if not os.path.exists(emb_path) or not os.path.exists(chunk_path):raise Exception("向量库文件缺失,请先运行embedding_build.py生成知识库")embeddings = np.load(emb_path)with open(chunk_path, "rb") as f:chunks = pickle.load(f)model = SentenceTransformer(model_name_or_path=EMBEDDING_LOCAL_PATH,local_files_only=True,cache_folder=PROJECT_ROOT,trust_remote_code=False)return model, chunks, embeddings
2. SSH 采集 K8s 集群数据
def run_kubectl_cmd(cmd):if ssh_client is None:return "SSH未连接"stdin, stdout, stderr = ssh_client.exec_command(cmd)out = stdout.read().decode("utf-8", errors="ignore")err = stderr.read().decode("utf-8", errors="ignore")return out + err
3. RAG 检索内部运维文档,交给大模型生成故障报告
# RAG检索def retrieve_internal_knowledge(fault_desc):query_vec = rag_model.encode([fault_desc], normalize_embeddings=True)scores = np.dot(rag_embeds, query_vec.T).squeeze()top_idx = np.argsort(scores)[-TOP_K:][::-1]ref_text = "\n=====内部运维知识库参考=====\n".join([rag_chunks[i] for i in top_idx])return ref_text
落地价值
经验沉淀:把企业多年积累的故障 SOP、运维规范变成私有向量知识库,实现老工程师经验固化,不会随人员流失带走 排障提速:故障发生不用翻阅几十份文档,工具自动检索内部资料,输出带可执行命令的完整报告 降低门槛:初级 SRE 也可以输出企业标准的故障处置方案,减少人为分析失误 内网安全:向量化模型本地离线运行,企业运维文档不会上传公网,适合政企、运营商、铁路行业云原生环境
后续迭代方向
对接 Prometheus 告警,收到告警自动触发故障诊断 接入 EFK 日志系统,采集更多维度日志输入 RAG 增加故障案例库,把历史真实故障存入知识库,同类问题直接复用过往处置经验
夜雨聆风