将 OCAI 接入 Kubernetes MCP Server 的实践

发布时间:2026/10/30 4:51:23

将 OCAI 接入 Kubernetes MCP Server 的实践 在之前的 OCManager 系列文章中我们已经逐步构建了完整的 AI 运维体系第一阶段OCManager 控制台提供基础的运维操作界面命令助手、任务编排第二阶引入 OCAI让 AI 能够咨询——回答运维问题、提供诊断建议第三阶段启用 ops-mate让 AI 能够动手——通过 SSH 到节点执行诊断命令但是我们发现ops-mate 的 SSH 通道只能操作资源无法直接访问 Kubernetes 集群。比如运维人员问“帮我查看 default 命名空间里所有 Pod 的状态”“哪个节点资源使用率最高”“获取 nginx-deployment 最近的事件”AI 只能说请执行 kubectl get pods而不能直接调用 Kubernetes API。本文的目的是在 OCAI 中集成 Kubernetes MCP Server来实现这个需求。OCManager 中的 RAG 与 MCP在 OCManager 架构中实际上已经使用了 RAG 和 MCP。在RAG方面OCManager 在 ops-mate 的 diaglite 组件中内置了一个轻量级 RAG 系统具体的工作流如下用户提问 → 问题向量化 → 检索历史诊断记录 → 增强上下文 → LLM 生成回答RAG 在 OCManager 中是通过diaglite 内置向量检索来实现的作用主要是检索历史诊断信息匹配已知问题的解决方案从而避免重复询问相同信息在MCP方面OCManager 已经预留了MCP配置。我们可以通过 MCP 让 AI 获得直接操作能力。综合目前OCManager 已知的功能实现和应用场景总结如下能力类型在 OCManager 中的实现典型场景RAG 知识diaglite 内置向量检索“历史上类似故障是怎么处理的”MCP 工具Kubernetes MCP Server“帮我查看所有 Pod 的状态”SSH 执行ops-mate 通道“在节点上执行 df -h”Kubernetes MCP Server 集成kubernetes-mcp-server是一个实现了 MCP 协议的服务器它封装了 Kubernetes 的 API 调用暴露为标准化的 MCP 工具。本质上它是kubectl 的 MCP 封装让 AI 能够通过标准协议操作集群而不需要直接在容器内安装 kubectl。由于我们访问EKS集群的时候需要使用awscli生成临时的token因此便捷起见将MCP Server 作为独立进程运行在宿主机由systemd 托管这样就无需在容器中单独再安装awscli。我们通过streamable http的模式启动mcp服务此后OCAI 通过 HTTP SSE 协议远程连接 MCP Server。为什么选择 Streamable HTTP 模式stdio 模式把 MCP Server 作为子进程跑在 OCAI 容器内这意味着每次重启容器都要重新启动 MCP Server还要处理 AWS CLI 安装、AgentContext 序列化等问题。Streamable HTTP 模式则把 MCP Server 独立运行在宿主机OCAI 通过 HTTP SSE 协议远程调用。这样做的好处显而易见MCP Server 和 OCAI 解耦可以独立升级直接复用宿主机的 AWS CLI无需在容器内折腾认证配置也简单只需一个 URL 即可如果有多套 OCAI 环境还能共享同一个 MCP Server。部署和配置首先编译 MCP Server。由于网络限制我们从源码编译而不是下载二进制gitclone--depth1--branchv0.0.63\https://github.com/containers/kubernetes-mcp-server.gitcdkubernetes-mcp-serverexportGOPROXYhttps://goproxy.cn,https://proxy.golang.org,direct go build-ok8s-mcp-server ./cmd/kubernetes-mcp-servermvk8s-mcp-server /home/ec2-user/opencloudos/然后创建 systemd 服务文件/etc/systemd/system/k8s-mcp-server.service让 MCP Server 随系统启动这里--port 8789会启动 SSE (Server-Sent Events) 服务器不是普通 HTTP。启动后用curl http://127.0.0.1:8789/sse测试应该能看到 SSE 事件流。[Unit] DescriptionKubernetes MCP Server Afternetwork.target [Service] Typesimple Userec2-user EnvironmentKUBECONFIG/home/ec2-user/.kube/config ExecStart/home/ec2-user/opencloudos/k8s-mcp-server \ --port 8789 --read-only Restartalways [Install] WantedBymulti-user.target接下来配置 OCAI修改config/mcp.yaml。由于OCAI服务运行在docker容器中因此需要通过172.17.0.1Docker 网桥 IP来访问宿主机。# ocai-service/ocai-service/config/mcp.yamlmcp_servers:kubernetes:url:http://172.17.0.1:8789/sse修改docker-compose.yml只需挂载日志和 MCP 配置文件无需 kubeconfig 或 AWS 凭证volumes:-${LOG_DIR:-./logs}/ocai-service:/app/logs-./config/mcp.yaml:/app/config/mcp.yaml:ro在docker-compose中设置了OCAI_MCP_CONFIG_FILE/app/config/mcp.yaml在启动服务后会发现OCAI 启动时显示MCP: MCPManager(servers0, connected0, tools0)因为我们需要OCAI 通过/app/ocai/utils/config_loader.py的build_application_from_environ()方法从环境变量读取配置但这个函数漏掉了OCAI_MCP_CONFIG_FILE的处理导致配置了环境变量也不会加载 MCP这似乎是一个隐藏的issue因为build_application_from_environ()读取配置是合理的。我们在函数中添加读取OCAI_MCP_CONFIG_FILE的代码# 在 config_loader.py 中找到 mcp_servers: {}, 的下一行添加mcp_config_file_env_str(OCAI_MCP_CONFIG_FILE)ifmcp_config_file:data[application][mcp_config_file]mcp_config_file重启 OCAI查看日志看到MCP server configured: kubernetes (sse)和tools14就说明成功了。docker-composerestartsleep30dockerlogs ocai-service|grep-EMCP|kubernetes# 正常输出应该包含# INFO: MCP config: 0 inline file /app/config/mcp.yaml - 1 total# INFO: MCP server configured: kubernetes (sse)# INFO: MCP client connected: kubernetes (sse)# INFO: MCP tools registered: 14 from 1 servers聊天效果验证集成成功后OCAI 具备以下 13 个 Kubernetes 管理工具。这里我们启动MCP的时候加上了–read-only参数因此所有工具都在只读模式下运行确保不会误操作集群。配置管理 ├── mcp__kubernetes__configuration_view - 查看集群配置 ├── mcp__kubernetes__namespaces_list - 列出命名空间 节点管理 ├── mcp__kubernetes__nodes_log - 查看节点日志 ├── mcp__kubernetes__nodes_stats_summary - 节点统计摘要 ├── mcp__kubernetes__nodes_top - 节点资源使用 Top Pod 管理 ├── mcp__kubernetes__pods_get - 获取 Pod 详情 ├── mcp__kubernetes__pods_list - 列出所有 Pods ├── mcp__kubernetes__pods_list_in_namespace - 按命名空间列出 Pods ├── mcp__kubernetes__pods_log - 查看 Pod 日志 ├── mcp__kubernetes__pods_top - Pod 资源使用 Top 通用资源 ├── mcp__kubernetes__resources_get - 获取任意资源详情 ├── mcp__kubernetes__resources_list - 列出任意资源 ├── mcp__kubernetes__events_list - 列出集群事件我们在OCAI的UI界面尝试询问和集群相关的内容如下可以发现通过工具调用/mcp_kubernetes_pods list等方法给出了我们想要的信息。结语本文实现了 Kubernetes MCP Server 的集成让 OCAI 具备了直接访问 EKS 集群的能力。整个过程涉及理解 MCP 协议和 RAG 的分工采用 Streamable HTTP 模式部署MCP服务配置OCAI集成Kubernetes MCP Server并测试功能如果你也在做 AI Kubernetes 的集成希望这篇文章有所帮助。
延伸阅读

更多相关文章

2026/10/25 20:02:08

GLM-4-9B-Chat-1M 模型在 openEuler 系统上的完整部署文档

🧑 博主简介:CSDN博客专家,「历代文学网」(PC端可以访问:https://lidaiwenxue.com/#/?__c1000)总架构师,首席架构师,也是联合创始人!16年工作经验,精通Java编…

2026/10/30 4:50:31

AI创意生成技术解析:提示词工程与人类主导的创作流程

这次我们来探讨一个在AI领域持续引发讨论的话题:AI的创造力本质。很多人认为AI能够独立产生创意,但实际上,当前的AI系统更多是高效执行指令的工具。这篇文章将从技术角度分析AI创意生成的原理,并通过实际案例展示AI如何依赖人类输…

2026/10/30 4:51:07

如何用密码保护PPS文件?看这篇就够了

PPS文件最方便的地方,就是双击直接全屏播放,不需要手动点“幻灯片放映”。正因为这个特性,很多人会把定稿的演示文稿存成PPS发给客户或领导。如果你的PPS文件比较重要,也可以通过它的密码功能来保护文件。PPS的密码分为“打开密码…

2026/10/30 4:51:06

Scrapy-Redis分布式集群全改造:从单机脚本到10节点生产环境,踩完所有坑的实战总结

去年接手一个工业数据采集项目,百万级页面的采集任务,单机Scrapy跑满并发也要七天才能跑完一轮,中间但凡机器宕机、进程崩溃,进度直接清零重来。一开始想的是加配置、提并发,结果单机能压榨的性能到顶了,速度还是上不去,稳定性也差。 后来花了一周时间把整套架构改成Sc…

2026/10/30 4:51:06

烟火检测落地实战:YOLO处理监控视频流的小目标难题与全链路优化方案

去年给工业园区做智慧消防改造,要把园区200多路监控全部接入AI烟火智能检测,替代传统的烟感温感传感器。传统方案的痛点很明显:室内还好,室外开阔区、仓储堆场、林区根本覆盖不到,等传感器报警的时候火已经烧起来了,完全失去了早期预警的意义。 一开始团队图省事,直接拿…

2026/10/30 4:51:06

代理池搭建踩坑实录:从免费IP到住宅代理四层全实测,稳定性最大差12倍,别再乱花钱了

刚做工业数据采集那两年,在代理IP上踩的坑比代码bug还多。最开始图省钱,写了十几个爬虫天天扒免费代理网站,攒了几万条IP存进数据库,结果真跑任务的时候,一百个IP里能连上的不到十个,跑半小时就全军覆没,一天下来没抓到多少有效数据,服务器带宽倒浪费了不少。 后来咬咬…

2026/10/30 4:51:06

【电网杆塔】中国高精电网杆塔SHP矢量数据集(杆塔SHP)

全网最新!中国高精电网杆塔SHP矢量数据集(杆塔SHP) 本次于2026.10月整理的数据集基于OpenStreetMap开源地理数据提取,包含全国全部电力杆塔(铁塔tower+电线杆pole)SHP矢量,WGS84坐标系,可结合上周发布的电网线路数据做,直接在QGIS、ArcGIS中配套加载使用。 📦 数据…

2026/10/30 4:46:06

第九章 结构体、枚举类型和链表

第九章 结构体、枚举类型和链表1. 结构体1.1 项目引入-成绩系统第二次改版先把出事那版摊开。三个数组并排&#xff0c;加个班级字段之后长这样。#include <iostream> #include <string> using namespace std;int main() {string names[5] { "张三", &q…

2026/10/29 17:05:52

全国计算机二级C语言真题PDF高效刷题指南

简介&#xff1a;这份PDF是全国计算机二级C语言考试的试题与答案解析&#xff0c;专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/29 17:06:02

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介&#xff1a;一份以实战为导向的Python爬虫入门资源&#xff0c;面向具备基本编程基础、希望快速掌握网络数据抓取的初学者&#xff0c;可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档&#xff0c;完整演示从网页中提取 标题…

2026/10/29 17:06:13

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介&#xff1a;这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档&#xff0c;压缩包大小七十八KB&#xff0c;内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开&#xff1a;先构造一个极点位于单位圆内…

2026/10/30 0:00:46

NCP1342高频准谐振反激控制器:从设计约束到验收的完整方案

简介&#xff1a;NCP1342 高频准谐振反激控制器应用介绍译文文档&#xff0c;面向电源设计工程师、硬件研发人员及开关电源学习者&#xff0c;帮助读者跨越英文原版资料的语言门槛&#xff0c;系统理解这款高集成度 QR Flyback 控制器的设计要点。文档围绕芯片核心特性展开&…

2026/10/30 0:00:46

NCP1342准谐振反激电源设计:从选型到验收的全流程解析

简介&#xff1a;这份文档面向电源设计工程师与开关电源学习者&#xff0c;系统梳理NCP1342高频准谐振反激控制器的应用要点&#xff0c;帮助读者快速理解这款高集成度离线电源变换器控制芯片的工作机制与设计方法。内容涵盖芯片核心特性、引脚功能定义、电气特性参数表、最大额…

2026/10/30 0:00:46

Web系统自动登出机制设计与实现全解析

1. 系统自动登出机制的设计初衷在各类Web应用和后台管理系统中&#xff0c;自动登出功能早已成为标配。这个看似简单的功能背后&#xff0c;实际上涉及用户安全、资源管理和体验优化的多重考量。作为从业十多年的老开发&#xff0c;我见过太多因为登出逻辑设计不当导致的安全事…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑