找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

601

积分

0

好友

77

主题
发表于 昨天 05:17 | 查看: 3| 回复: 0

最近,Model Context Protocol(MCP)备受关注。简单来说,它的目标是:让大型语言模型能够“通过工具”直接访问你的各类系统——无论是数据库、Git仓库、Kubernetes集群,还是像 Harvester 这样的虚拟化平台。

本文记录了我在 Windows 系统下,使用 Cursor 编辑器配合 Harvester MCP 的完整配置与实践过程,主要内容包括:

  • MCP 及 Harvester MCP 的基本概念
  • 如何在本地使用 Go 安装 harvester-mcp-server
  • 在 Cursor 编辑器中配置 MCP 客户端
  • 实际应用场景与当前限制分析(例如,目前仅支持本地 stdio 模式,暂无 HTTP 访问)

希望这篇文章能为你提供一个新思路:无需在多个窗口间频繁切换,在一个编辑器内即可同时编写代码和“对话式”查询集群状态。

一、MCP 与 Harvester MCP 简介

1. 什么是 MCP?

MCP(Model Context Protocol)是由 Anthropic 提出的一个开放协议,旨在标准化大模型与外部系统之间的交互方式。

其核心架构包含两端:

  • MCP Server:负责封装具体的业务系统(如 Harvester、Kubernetes、Git、数据库等),并向上暴露统一的接口。
  • MCP Client:例如 Claude Desktop、Cursor 编辑器或 VSCode 插件,它们负责与模型交互并调用 MCP Server 提供的工具。

模型通过 MCP Server 暴露的 tools(工具)和 resources(资源)来“查看”和“操作”后端系统。这样做的好处是,你只需编写(或使用他人已编写的)一个 MCP Server,任何支持该协议的客户端都能无缝接入使用。

2. Harvester MCP 的作用是什么?

Harvester 是一个基于 Kubernetes 和 KubeVirt 构建的超融合基础设施管理平台,用于管理虚拟机、镜像、存储和网络等资源。

社区开发的 Harvester MCP Server 主要功能如下:

  • 通过 kubeconfig 文件连接你的 Harvester 集群。
  • 向 MCP 客户端暴露一组查询工具,包括:
    • 集群基础资源:节点(Nodes)、命名空间(Namespaces)、容器组(Pods)的列表与详情。
    • Harvester 专属资源:虚拟机(VirtualMachine)、镜像(Images)、存储卷(Volumes)、网络(Networks)的列表与详情。

目前,这个 MCP Server 的定位更侧重于 “可观测性与查询”

✅ 支持:列出节点、虚拟机、镜像、网络等信息。
❌ 暂不支持:虚拟机的创建、开机、关机、删除等写操作。
❌ 模式限制:仅支持 stdio 模式,暂无 HTTP/SSE 接口(因此无法直接供 Dify 等仅支持 HTTP 的客户端使用)。

简言之,当前它更适合作为“智能运维信息面板”和“YAML/命令生成器”,而非一键自动化控制台。

二、前置环境准备

我的实验环境如下:

  • 一套已部署的 Harvester 集群(可通过浏览器访问管理界面)。
  • 一台 Windows 开发机,需满足:
    • 已安装支持 MCP 的 Cursor 编辑器。
    • 已安装 Go 语言(版本 1.20 及以上)。

1. 在 Windows 上安装 Go

Go 的安装步骤在此不做赘述,仅提醒两个关键点:

  1. 确保系统 PATH 环境变量中包含 Go 的安装路径,例如:D:\Program Files\Go\bin
  2. 建议设置 Go 模块和代理(在 CMD 或 PowerShell 中执行),以加速后续依赖下载:
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://goproxy.cn,direct

三、使用 Go 安装 Harvester MCP Server

1. 一键安装(推荐方式)

在 PowerShell 或 CMD 中执行以下命令:

go install github.com/starbops/harvester-mcp-server/cmd/harvester-mcp-server@latest

注意:包路径必须包含 /cmd/harvester-mcp-server,否则会报错 “module found but does not contain package”。

安装完成后,可以查看 Go 的环境变量并确认二进制文件:

go env GOPATH
dir "$(go env GOPATH)\bin"

你应该能在 GOPATH\bin 目录下看到 harvester-mcp-server.exe 文件,这就是稍后需要在 Cursor 中调用的 MCP 服务端程序。

2. 手动编译(备选方案)

如果网络状况不佳,也可以选择克隆代码库后手动编译:

git clone https://github.com/starbops/harvester-mcp-server.git
cd harvester-mcp-server
go build -o harvester-mcp-server.exe .\cmd\harvester-mcp-server

编译完成后,会在当前目录生成 harvester-mcp-server.exe 文件,将其移动到任意方便访问的路径即可。

四、准备 Harvester 集群的 kubeconfig 文件

MCP Server 需要通过 kubeconfig 文件来连接 Harvester 集群。在 Windows 环境下,通常有两种获取方式:

1. 从 Harvester Web 管理界面下载(推荐)

这是最直接可靠的方法:

  1. 登录 Harvester 集群的管理控制台。
  2. 在右上角的用户菜单或 “Support” 页面中,通常可以找到 “Download kubeconfig” 按钮。
  3. 将下载的配置文件保存到本地,例如:C:\Users\<你的用户名>\.kube\harvester.yaml。 这份 kubeconfig 中的 server 地址通常已配置为集群对外的可访问地址,无需额外修改。

2. 从 Harvester 管理节点拷贝

在 Harvester 集群的某个管理节点上,默认的 kubeconfig 文件路径为:/etc/rancher/rke2/rke2.yaml。 将文件拷贝到 Windows 本地后,需要注意:

  • 文件中的 server 字段默认是 https://127.0.0.1:6443,在本地直接使用将无法连接。
  • 解决方案有两种:
    1. server 地址修改为 Harvester 节点的实际 IP 或 VIP,如 https://<节点IP>:6443
    2. 在本地建立 SSH 隧道进行端口转发:ssh -L 6443:127.0.0.1:6443 root@<节点IP>
  • 如果使用的 IP 地址不在 TLS 证书的 SAN 列表中,可能需要在 kubeconfig 的 cluster 配置段下添加 insecure-skip-tls-verify: true。请注意,此操作会降低安全性,仅建议在内网测试环境中使用。

五、在 Cursor 编辑器中配置 MCP(stdio 模式)

Cursor 编辑器内置了 MCP 客户端支持,通过配置一个 mcp.json 文件来管理 MCP 服务器。

1. 打开全局 MCP 配置文件

在 Cursor 中操作:

  1. 打开 Settings(设置)。
  2. 在左侧导航栏中找到 MCP 选项。
  3. 点击 “Open global mcp.json”(或类似的“添加全局 MCP 服务器”按钮),编辑器会打开该配置文件。

配置文件的基本结构如下(如果文件为空,请按此格式创建):

{
  "mcpServers": {
  }
}

2. 添加 Harvester MCP 服务器配置

假设你的环境是:

  • harvester-mcp-server.exe 路径:D:\go\bin\harvester-mcp-server.exe
  • kubeconfig 文件路径:D:\go\bin\rke2.yaml

mcpServers 对象中添加如下配置。注意:Windows 路径中的反斜杠在 JSON 中需要用双反斜杠转义。

{
  "mcpServers": {
    "harvester": {
      "type": "stdio",
      "command": "D:\\go\\bin\\harvester-mcp-server.exe",
      "args": [
        "--kubeconfig",
        "D:\\go\\bin\\rke2.yaml",
        "--log-level",
        "info"
      ]
    }
  }
}

保存文件后,返回 Settings → MCP 页面,确保刚刚添加的 harvester 服务器处于启用(Enable)状态。

此时,配置已完成。当你在 Cursor 中启动一个支持 MCP 的 AI 会话(Agent)时:

  • Cursor 会在本地启动 harvester-mcp-server.exe 进程。
  • 该进程使用你指定的 kubeconfig 连接 Harvester 集群。
  • 在对话中提及 Harvester 相关问题时,AI 模型便可以调用此 MCP 服务器提供的工具来获取真实集群数据。

六、在 Cursor 中实现“聊天式”集群查询

配置成功后,你可以在新建的聊天会话中,通过提示词引导模型使用 Harvester 工具。例如:

“你现在可以通过 Harvester MCP 访问我的集群。请先帮我列出所有的虚拟机及其所在的命名空间。”

常见的应用场景包括:

  • 查看集群节点

    “列出集群所有节点,并显示它们的 CPU 和内存使用情况。”

  • 查询指定命名空间的虚拟机

    “列出 default 命名空间下所有虚拟机的名称和运行状态。”

  • 获取资源定义的 YAML

    “请输出名为 test-wanger 的虚拟机的完整 YAML 定义,我需要参考一下。”

  • 生成操作命令或配置

    “基于现有的 test-wanger 虚拟机配置,帮我生成一个名为 test-wanger2 的副本 VirtualMachine YAML 文件,并指定部署到 randd 命名空间。”

在这些场景下,Harvester MCP 的表现令人满意:它能够从真实的集群中拉取数据供模型分析,使模型摆脱“盲猜”,生成更准确、更具上下文相关性的回复,极大提升了智能运维的效率。

七、一个常见陷阱:为何“开关机/创建虚拟机”指令未生效?

1. 现象描述

在 Cursor 中向模型发出如下指令:

“请在 default 命名空间中创建一台配置为 2核4G 的 Ubuntu 虚拟机。”

模型通常会积极响应,并回复以下内容:

  • 一段 VirtualMachine 资源的 YAML 示例。
  • 一行“等效的” kubectl 命令,例如:
    kubectl patch vm test-wanger -n default --type merge -p '{"spec":{"runStrategy":"RerunOnFailure"}}'
  • 甚至可能声明:“我已帮你执行了开机命令……”

然而,当你切换到 Harvester 的 Web 管理界面查看时,会发现:虚拟机并未被创建或启动。

2. 原因分析:当前的“只读”特性

回顾 Harvester MCP 项目的功能列表,可以发现其对虚拟机的操作仅限于 List(列表)和 Get(获取)

  • Pods: List / Get / Delete
  • VirtualMachine: List / Get
  • Image: List
  • Volume: List
  • Network: List

其中并没有提供 VirtualMachine 的 Create(创建)、Patch(更新)或 Delete(删除)工具。

因此,实际发生的情况是:

  1. MCP 服务器成功帮助模型读取到了集群的实时状态。
  2. 模型基于这些真实信息,为你生成了可执行的 kubectl 命令和 YAML 配置模板。
  3. 但是,MCP 服务器内部并未实现执行 patchcreate 操作的逻辑。模型回复中的“命令”仅仅是一种文本形式的操作指南,需要你手动复制到终端执行。

简单说:Cursor 声称“已执行开机命令”,实际上表达的是“我计划这样操作”,而集群并未被真正改动。

3. 现阶段实用方案

目前比较可行的操作流程是:

  1. 利用 Cursor + Harvester MCP 进行信息查询与命令生成:让它查看 VM 状态、获取 YAML、并编写好正确的 kubectl patchkubectl apply 命令。
  2. 手动执行命令:将生成的命令或 YAML 内容,复制到一个具备 kubectl 工具和足够权限的 kubeconfig 的终端中执行。例如,通过 SSH 登录到 Harvester 节点后运行。
  3. 未来扩展:若有兴趣和能力,可以 Fork 该 MCP 项目,自行实现如 start_vmstop_vm(通过修改 spec.runStrategy)或 create_vm_from_yaml(直接 apply YAML 到集群)等写操作工具。这将真正实现通过自然语言控制虚拟机的生命周期。

八、关于“缺乏 HTTP 访问支持”的补充说明

最后,需要再次强调一个可能影响集成方式的重要限制:

当前版本的 Harvester MCP Server 仅支持 stdio(标准输入输出)模式,未提供 HTTP/SSE 接口。

这意味着:

  • 典型应用场景:适用于桌面或 IDE 客户端,如 Cursor、Claude Desktop 或 VSCode 插件。这些客户端在本地启动 MCP 进程,并通过 stdin/stdout 与之通信。
  • 集成限制:它不能直接作为一个提供 http://.../sse 端点的远程 MCP 服务器。因此,像 Dify 这样仅支持 HTTP/SSE 协议连接 MCP 的平台,无法直接对接此 Harvester MCP。
  • 解决方案:若需与 Dify 等平台集成,需要额外开发一个“适配器”或“网关”(例如 supergateway),将 stdio 模式的 MCP 转换为 HTTP/SSE 服务。这属于更进阶的集成范畴。

对于个人开发者或运维人员而言,本地环境 + Cursor + stdio 模式 MCP 的组合,已经能够将大量日常的集群查询与文档编写工作整合到一个统一的界面中,显著提升效率。

九、总结与展望

目前,Cursor + Harvester MCP 的组合,更像是一位“既懂代码编写,又能洞察集群状态的运维顾问”:

  • 优势:它能基于真实的集群数据进行分析和回复,不再是凭空想象;能自动生成准确的 kubectl 命令和 YAML 配置,减少查阅手册和手动输入的工作量。
  • 局限:最终“执行”操作的那一步——如创建、启动或关闭虚拟机,仍需要用户在终端中确认并回车。

展望未来,随着社区不断完善,为 Harvester MCP 补全写操作并增加 HTTP 网关支持,我们完全可以期待这样的人工智能驱动运维体验:在编辑器里编写业务代码时,随口发出指令:“请将 randd 命名空间下所有测试虚拟机关机,只保留名称以 prod 开头的。” → MCP 展示执行计划 → 用户确认 → 指令在集群中真实生效。

在此之前,本文旨在帮助你顺利迈出“第一步”:将你的 Harvester 集群成功接入 Cursor 编辑器,让 AI 模型真正“看见”并理解你的基础设施。




上一篇:开源AI Agent系统教程Hello-Agents:从入门到实战构建智能体应用
下一篇:Go泛型实战:基于前缀树实现类型安全的EventBus发布订阅系统
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-11 02:06 , Processed in 0.087736 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表