mcpField
K
Kubernetes MCP Server

Kubernetes MCP Server

本地服务
github.com/manusa云与基础设施2.2k今天更新

关于 Kubernetes MCP Server

Kubernetes MCP Server 为 AI 工具提供 Kubernetes 和 OpenShift 管理能力。该 Go 服务直接调用 Kubernetes API,支持多个集群,无需依赖 kubectl 或 helm 命令行工具。

主要功能

  1. 01管理通用 Kubernetes 资源
  2. 02查看和操作 Pod
  3. 03管理 Helm 发布和 Chart
  4. 04操作 Tekton 流水线与任务
  5. 05支持多个集群
  6. 06配置工具集和访问限制

适用场景

  1. 01查看 Pod 日志和资源用量
  2. 02创建或更新 Kubernetes 资源
  3. 03安装或移除 Helm 发布
  4. 04排查 Tekton 流水线运行问题

MCP 相关

该 MCP 服务向客户端提供可配置的 Kubernetes 和 OpenShift 资源、Pod、Helm、Tekton 等工具与能力。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": [
"-y",
"kubernetes-mcp-server"
]
}
}
}
启动命令npx -y kubernetes-mcp-server

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmkubernetes-mcp-server

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Kubernetes MCP Server

GitHub License npm PyPI - Version GitHub release (latest SemVer) Build

✨ Features | 🚀 Getting Started | 🎥 Demos | ⚙️ Configuration | 🛠️ Tools | 💬 Community | 🧑‍💻 Development

https://github.com/user-attachments/assets/be2b67b3-fc1c-4d11-ae46-93deba8ed98e

✨ 功能

功能强大且灵活的 Kubernetes 模型上下文协议(MCP) 服务实现,支持 Kubernetes 和 OpenShift。

  • ✅ 配置:
    • 自动检测 Kubernetes 配置中的更改,并更新 MCP 服务。
    • 查看和管理当前的 Kubernetes .kube/config 或集群内配置。
  • ✅ 通用 Kubernetes 资源:对任何 Kubernetes 或 OpenShift 资源执行操作。
    • 执行任何 CRUD 操作(创建或更新、获取、列出、删除)。
  • ✅ Pod:执行 Pod 专属操作。
    • 列出所有命名空间或指定命名空间中的 Pod。
    • 按名称从指定命名空间中获取 Pod。
    • 按名称从指定命名空间中删除 Pod。
    • 显示指定命名空间中某个 Pod 的日志。
    • Top:获取所有 Pod 或指定命名空间中特定 Pod 的资源使用指标。
    • Exec:进入 Pod 并运行命令。
    • 运行容器映像并将其部署到 Pod 中,还可选择将其公开。
  • ✅ 命名空间:列出 Kubernetes 命名空间。
  • ✅ 事件:查看所有命名空间或指定命名空间中的 Kubernetes 事件。
  • ✅ 项目:列出 OpenShift 项目。
  • ☸️ Helm:
    • 在当前或指定的命名空间中安装 Helm chart。
    • 列出所有命名空间或指定命名空间中的 Helm release。
    • 在当前或指定的命名空间中卸载 Helm release。
  • 🔧 Tekton:Tekton 专属操作,补充通用 Kubernetes 资源管理功能。
    • Pipeline:创建 PipelineRun 以启动 Tekton Pipeline。
    • PipelineRun:重启、取消、排查问题并获取 PipelineRun 日志。
    • Task:创建 TaskRun 以启动 Tekton Task。
    • TaskRun:使用相同的 spec 重启 TaskRun,并通过解析 Pod 获取 TaskRun 日志。
  • 🔭 可观测性:可选的 OpenTelemetry 分布式追踪和指标,支持自定义采样率。包含用于实时统计的 /stats 端点。请参阅 OTEL.md。

与其他 Kubernetes MCP 服务实现不同,本项目并非只是对 kubectl 或 helm 命令行工具的封装。 它是一个基于 Go 的原生实现,可直接与 Kubernetes API 服务交互。

系统无需安装外部依赖或工具。 如果使用原生二进制文件,则无需在系统上安装 Node 或 Python。

  • ✅ 轻量:服务以单个原生二进制文件的形式分发,支持 Linux、macOS 和 Windows。
  • ✅ 高性能 / 低延迟:直接与 Kubernetes API 服务交互,无需调用外部命令并等待其完成。
  • ✅ 多集群:可同时与多个 Kubernetes 集群交互(由 kubeconfig 文件定义)。
  • ✅ 跨平台:提供适用于 Linux、macOS 和 Windows 的原生二进制文件,以及 npm 包、Python 包和容器 / Docker 镜像。
  • ✅ 可配置:支持命令行参数、TOML 配置文件和环境变量。
  • ✅ 经过充分测试:服务拥有全面的测试套件,可确保其在不同 Kubernetes 环境中的可靠性和正确性。
  • 📚 文档:全面的用户文档,包括设置指南、配置参考和可观测性。

🚀 快速开始

要求
  • 可访问 Kubernetes 集群。
Claude Code

请按照专用的 Claude Code 入门指南操作,该指南位于我们的用户文档中。

如需使用专用 ServiceAccount 和只读访问权限进行安全的生产环境配置,请同时参阅 Kubernetes 配置指南。

Claude Desktop
使用 npx

如果已安装 npm,这是在 Claude Desktop 上开始使用 kubernetes-mcp-server 最快的方法。

打开 claude_desktop_config.json,并将 MCP 服务添加到 mcpServers 列表中:

{
  "mcpServers": {
    "kubernetes": {
      "command": "npx",
      "args": ["-y", "kubernetes-mcp-server@latest"]
    }
  }
}
VS Code / VS Code Insiders

点击以下链接,在 VS Code Insiders 中安装 Kubernetes MCP 服务扩展:

在 VS Code 中安装 在 VS Code Insiders 中安装

或者,也可以运行以下命令手动安装扩展:

# For VS Code
code --add-mcp '{"name":"kubernetes","command":"npx","args":["kubernetes-mcp-server@latest"]}'
# For VS Code Insiders
code-insiders --add-mcp '{"name":"kubernetes","command":"npx","args":["kubernetes-mcp-server@latest"]}'
Cursor

点击以下链接,在 Cursor 中安装 Kubernetes MCP 服务扩展:

安装 MCP 服务

或者,也可以通过编辑 mcp.json 文件手动安装扩展:

{
  "mcpServers": {
    "kubernetes-mcp-server": {
      "command": "npx",
      "args": ["-y", "kubernetes-mcp-server@latest"]
    }
  }
}
Goose CLI

Goose CLI 是开始使用人工智能(AI)Agent 最简单(也最省钱)的方式。

使用 npm

如果已安装 npm,这是开始使用 kubernetes-mcp-server 最快的方法。

打开 goose 的 config.yaml,并将 MCP 服务添加到 mcpServers 列表中:

extensions:
  kubernetes:
    command: npx
    args:
      - -y
      - kubernetes-mcp-server@latest

🎥 演示

诊断并自动修复 OpenShift Deployment

本演示展示了 Claude Desktop 如何借助 Kubernetes MCP 服务,在无需用户协助的情况下自动诊断并修复 OpenShift 中的 Deployment。

https://github.com/user-attachments/assets/a576176d-a142-4c19-b9aa-a83dc4b8d941

用 Vibe Coding 编写简单游戏并将其部署到 OpenShift

在本演示中,我将带你了解如何使用 VS Code 通过 Vibe Coding 编写简单游戏,以及如何借助 Podman MCP 服务和 Kubernetes MCP 服务将其部署到 OpenShift。

Vibe Coding:在 Kubernetes 上构建并部署游戏
在 VS Code 中通过 Kubernetes MCP 服务增强 GitHub Copilot——一键设置!

在本演示中,我将展示如何只需点击链接,就能在 VS code 中设置 Kubernetes MCP 服务。

在 VS Code 中通过 Kubernetes MCP 服务增强 GitHub Copilot——一键设置! ## ⚙️ 配置

可以通过命令行(CLI)参数配置 Kubernetes MCP 服务。

你可以使用 npx、uvx,或下载最新发布的二进制文件来运行 CLI 可执行文件。

# Run the Kubernetes MCP server using npx (in case you have npm and node installed)
npx kubernetes-mcp-server@latest --help
# Run the Kubernetes MCP server using uvx (in case you have uv and python installed)
uvx kubernetes-mcp-server@latest --help
# Run the Kubernetes MCP server using the latest release binary
./kubernetes-mcp-server --help
配置选项
选项说明
--version输出版本信息并退出。
--config主 TOML 配置文件的路径。所有选项(端口、工具集、read_only、kubeconfig 等)请参阅配置参考。
--config-dir词典序排列的 .toml 文件所在目录。可以单独使用,也可以与 --config 搭配使用。省略时不加载补充配置文件。相对路径以工作目录为基准解析。

注意:运行时设置使用 TOML(或现有环境变量名称),而不是 CLI 标志。标志到 TOML 的映射请参阅配置变更。

TOML 配置文件

对于复杂或需要持久化的配置,请使用 TOML 配置文件,而不是 CLI 参数:

kubernetes-mcp-server --config /etc/kubernetes-mcp-server/config.toml

配置示例:

log_level = 2
read_only = true
toolsets = ["core", "config", "helm", "kubevirt"]

# Deny access to sensitive resources
[[denied_resources]]
group = ""
version = "v1"
kind = "Secret"

[telemetry]
endpoint = "http://localhost:4317"

TOML 配置文档内容全面,包括:

  • 所有配置选项及其默认值
  • 用于模块化设置的补充配置文件
  • 通过 SIGHUP 动态重新加载配置
  • 用于限制对敏感资源类型的访问的拒绝资源
  • MCP Tool Search 的服务端说明
  • 自定义 MCP 提示词
  • HTTP 模式下的 OAuth/OIDC 身份验证(Keycloak、Microsoft Entra ID)

请参阅**配置参考**。

📊 MCP 日志记录

该服务支持 MCP 日志记录功能,允许客户端通过结构化日志消息接收调试信息。 Kubernetes API 错误会自动分类,并以适当的严重级别记录并发送给客户端。 在发送给客户端之前,敏感数据(令牌、密钥、密码、云凭据)会自动脱敏。

请参阅**MCP 日志记录指南**。

🛠️ 工具和功能

Kubernetes MCP 服务支持通过 toolsets 配置选项启用或禁用特定的工具和功能组(工具、资源、提示词等)。 这样,你就可以控制 AI 工具可用的 Kubernetes 功能。 只启用所需的工具集,有助于缩小上下文大小并提高大模型选择工具的准确性。

已验证的 Kubernetes 生态项目

以下 CNCF 和 Kubernetes 生态项目已纳入 evals/tasks 中的自动化评估场景。大多数场景 只需使用 core 工具集即可。以下专用工具集为可选项, 仅在相应项目的特定场景中才需要使用。

项目可选工具集评估场景
Helmhelm3
Istiokiali5
Kialikiali16
Kubernetes-32
KubeVirtkubevirt、tekton27
NetObservnetobserv4
Tektontekton9
可用工具集

以下工具集可用(默认列中标有 ✓ 的工具集默认已启用):

工具集描述默认
config查看和管理当前本地 Kubernetes 配置(kubeconfig)✓
core最常用的 Kubernetes 管理工具(Pods、通用资源、事件等)✓
helm用于管理 Helm chart 和发行版的工具
kcp管理 kcp 工作区和多租户功能
kiali最常用的 Kiali 管理工具;如需了解详情,请查看 Kiali 文档。
kubevirtKubeVirt 虚拟机管理工具;如需了解详情,请查看 KubeVirt 文档。
netobserv由 NetObserv 控制台插件 API(流、指标、导出)提供支持的网络可观测性工具。如需了解详情,请查看 NetObserv 文档。
observability/logs用于查询 Loki 日志的工具集
observability/metrics用于高效查询 Prometheus 和 Alertmanager 端点的工具集
observability/otelcol用于 OpenTelemetry Collector 配置辅助的工具集,包括架构验证、组件文档和版本管理。
observability/traces用于发现 Tempo 实例、搜索和检索跟踪信息以及探索跟踪属性的分布式跟踪工具。
tekton用于管理 Pipelines、PipelineRuns、Tasks、TaskRuns 和故障排查的 Tekton 流水线管理工具。
工具

如果已启用多集群支持(默认启用),且你可以访问多个集群,则所有适用的工具都会包含一个额外的 context 参数,用于指定该操作要使用的 Kubernetes context(集群)。

配置
  • configuration_contexts_list - 列出 kubeconfig 文件中所有可用的 context 名称及关联的服务器 URL

  • targets_list - 列出所有可用目标

  • configuration_view - 获取当前 Kubernetes 配置内容,并以 kubeconfig YAML 格式返回

    • minified (boolean) - 返回精简版配置。若设为 true,则仅保留当前 context 及该 context 的相关配置部分。若设为 false,则在配置中返回所有 context、集群、身份验证信息和用户。(可选,默认值为 true)
核心
  • events_list - 列出当前集群所有命名空间中的 Kubernetes 事件(警告、错误、状态变更),用于调试和故障排查。使用 limit 和 continue 可逐页获取较大的列表。

    • continue (string) - 上一页的 continue 字段中的不透明令牌。使用相同的 limit、namespace 和选择器,不作修改地发送该令牌,以获取下一页。首次调用时省略。
    • fieldSelector (string) - 可选的 Kubernetes 字段选择器,用于按字段值筛选事件(例如 'type=Warning'、'involvedObject.name=my-pod')。支持的字段:involvedObject.kind、involvedObject.name、involvedObject.namespace、involvedObject.uid、involvedObject.apiVersion、involvedObject.resourceVersion、involvedObject.fieldPath、reason、reportingComponent、source、type。请参阅 https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/
    • limit (integer) - 要返回的最大条目数。省略或设为 0 表示列出所有条目;若响应超过 max_backend_response_bytes,则会失败。发生这种情况时,请缩小 limit 后重试。API 返回的条目数可能少于请求的数量。
    • namespace (string) - 可选的 Namespace,用于指定要从中检索事件的命名空间。若未提供,则列出所有命名空间中的事件。
  • namespaces_list - 列出当前集群中的所有 Kubernetes 命名空间。使用 limit 和 continue 可逐页获取较大的列表。

    • continue (string) - 上一页的 continue 字段中的不透明令牌。使用相同的 limit、namespace 和选择器,不作修改地发送该令牌,以获取下一页。首次调用时省略。
    • fieldSelector (string) - 可选的 Kubernetes 字段选择器,用于按字段值筛选命名空间(例如 'metadata.name=default'、'status.phase=Active')。支持的字段:metadata.name、status.phase。请参阅 https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/
    • limit (integer) - 要返回的最大条目数。省略或设为 0 表示列出所有条目;若响应超过 max_backend_response_bytes,则会失败。发生这种情况时,请缩小 limit 后重试。API 返回的条目数可能少于请求的数量。
  • projects_list - 列出当前集群中的所有 OpenShift 项目。使用 limit 和 continue 可逐页获取较大的列表。

    • continue (string) - 上一页的 continue 字段中的不透明令牌。使用相同的 limit、namespace 和选择器,不作修改地发送该令牌,以获取下一页。首次调用时省略。
    • limit (integer) - 要返回的最大条目数。省略或设为 0 表示列出所有条目;若响应超过 max_backend_response_bytes,则会失败。发生这种情况时,请缩小 limit 后重试。API 返回的条目数可能少于请求的数量。
- **nodes_log** - 获取 Kubernetes 节点的日志(kubelet、kube-proxy 或其他系统日志)。此工具通过 Kubernetes API 代理访问 kubelet 上的节点日志 - `name` (`string`) **(required)** - 要获取日志的节点名称 - `query` (`string`) **(required)** - query 指定要返回日志的服务或文件(必填)。示例:"kubelet" 用于获取 kubelet 日志,"/" 用于获取节点上的特定日志文件(例如,"/var/log/kubelet.log" 或 "/var/log/kube-proxy.log") - `tailLines` (`integer`) - 从日志末尾获取的行数(可选,0 表示获取所有日志)
  • nodes_stats_summary - 通过 kubelet 的 Summary API 获取 Kubernetes 节点的详细资源使用统计信息。提供全面的指标,包括节点、Pod 和容器级别的 CPU、内存、文件系统和网络使用情况。在使用 cgroup v2 和内核 4.20+ 的系统上,还会包含 PSI(压力停滞信息)指标,用于显示 CPU、内存和 I/O 的资源压力。有关 PSI 指标的详情,请参阅 https://kubernetes.io/docs/reference/instrumentation/understand-psi-metrics/

    • name (string) (required) - 要获取统计信息的节点名称
  • nodes_top - 列出 Kubernetes Metrics Server 记录的指定 Kubernetes 节点或集群中所有节点的资源消耗(CPU 和内存)。使用 limit 和 continue 分页获取大型列表。

    • continue (string) - 上一页 continue 字段中的不透明令牌。发送时须保持不变,并使用相同的 limit、namespace 和选择器来获取下一页。首次调用时省略。
    • label_selector (string) - Kubernetes 标签选择器(例如,'node-role.kubernetes.io/worker='),用于按标签筛选节点(可选,仅当未提供 name 时适用)
    • limit (integer) - 要返回的最大条目数。省略或设为 0 表示列出全部条目;如果响应超过 max_backend_response_bytes,则会失败。发生这种情况时,请使用更小的 limit 重试。API 返回的条目数可能少于请求数。
    • name (string) - 要获取资源消耗的节点名称(可选;未提供时获取所有节点)
  • pods_list - 列出当前集群所有命名空间中的全部 Kubernetes Pod。使用 limit 和 continue 分页获取大型列表。

    • continue (string) - 上一页 continue 字段中的不透明令牌。发送时须保持不变,并使用相同的 limit、namespace 和选择器来获取下一页。首次调用时省略。
    • fieldSelector (string) - 可选的 Kubernetes 字段选择器,用于按字段值筛选 Pod(例如,'status.phase=Running'、'spec.nodeName=node1')。支持的字段:metadata.name、metadata.namespace、spec.nodeName、spec.restartPolicy、spec.schedulerName、spec.serviceAccountName、status.phase(Pending/Running/Succeeded/Failed/Unknown)、status.podIP、status.nominatedNodeName。注意:CrashLoopBackOff 是容器状态,而非 Pod 阶段,因此无法直接筛选。请参阅 https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/
    • labelSelector (string) - 可选的 Kubernetes 标签选择器(例如,'app=myapp,env=prod' 或 'app in (myapp,yourapp)');需要按标签筛选 Pod 时使用此选项
    • limit (integer) - 要返回的最大条目数。省略或设为 0 表示列出全部条目;如果响应超过 max_backend_response_bytes,则会失败。发生这种情况时,请使用更小的 limit 重试。API 返回的条目数可能少于请求数。
  • pods_list_in_namespace - 列出当前集群中指定命名空间的所有 Kubernetes Pod。使用 limit 和 continue 分页获取大型列表。

    • continue (string) - 上一页 continue 字段中的不透明令牌。保持原样,并与相同的 limit、namespace 和选择器一起发送,以获取下一页。首次调用时省略。
    • fieldSelector (string) - 可选的 Kubernetes 字段选择器,用于按字段值筛选 Pod(例如 'status.phase=Running'、'spec.nodeName=node1')。支持的字段:metadata.name、metadata.namespace、spec.nodeName、spec.restartPolicy、spec.schedulerName、spec.serviceAccountName、status.phase(Pending/Running/Succeeded/Failed/Unknown)、status.podIP、status.nominatedNodeName。注意:CrashLoopBackOff 是容器状态,而不是 Pod 阶段,因此无法直接筛选。参见 https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/
    • labelSelector (string) - 可选的 Kubernetes 标签选择器(例如 'app=myapp,env=prod' 或 'app in (myapp,yourapp)'),需要按标签筛选 Pod 时使用此选项
    • limit (integer) - 返回的最大条目数。省略或设为 0 可列出所有条目;如果响应超过 max_backend_response_bytes,则会失败。发生这种情况时,请使用较小的 limit 重试。API 返回的条目数可能少于请求数。
    • namespace (string) (必填) - 要列出 Pod 的命名空间
  • pods_get - 在当前或指定的命名空间中,按提供的名称获取 Kubernetes Pod

    • name (string) (必填) - Pod 的名称
    • namespace (string) - 要获取 Pod 的命名空间
  • pods_delete - 在当前或指定的命名空间中,按提供的名称删除 Kubernetes Pod

    • name (string) (必填) - 要删除的 Pod 的名称
    • namespace (string) - 要删除 Pod 的命名空间
  • pods_top - 列出 Kubernetes Metrics Server 记录的指定 Kubernetes Pod 的资源消耗(CPU 和内存)。可指定所有命名空间、提供的命名空间或当前命名空间。使用 limit 和 continue 分页获取大型列表。

    • all_namespaces (boolean) - 如果为 true,则列出所有命名空间中所有 Pod 的资源消耗。如果为 false,则列出提供的命名空间或当前命名空间中 Pod 的资源消耗
    • continue (string) - 上一页 continue 字段中的不透明令牌。保持原样,并与相同的 limit、namespace 和选择器一起发送,以获取下一页。首次调用时省略。
    • label_selector (string) - Kubernetes 标签选择器(例如 'app=myapp,env=prod' 或 'app in (myapp,yourapp)'),需要按标签筛选 Pod 时使用此选项(可选,仅在未提供 name 时适用)
    • limit (integer) - 返回的最大条目数。省略或设为 0 可列出所有条目;如果响应超过 max_backend_response_bytes,则会失败。发生这种情况时,请使用较小的 limit 重试。API 返回的条目数可能少于请求数。
    • name (string) - 要获取资源消耗的 Pod 名称(可选;未提供时返回命名空间中的所有 Pod)
    • namespace (string) - 要获取资源消耗的 Pod 所属命名空间(可选;未提供且 all_namespaces 为 false 时,使用当前命名空间)
  • pods_exec - 使用提供的名称和命令,在当前或指定命名空间中的 Kubernetes Pod 内执行命令(访问 shell、在容器中运行命令)

    • command (array) (必填) - 要在 Pod 容器中执行的命令。第一项是要运行的命令,其余项是该命令的参数。示例:["ls", "-l", "/tmp"]
    • container (string) - 要执行命令的 Pod 容器名称(可选)
    • name (string) (必填) - 要执行命令的 Pod 名称
    • namespace (string) - 要执行命令的 Pod 所在的命名空间
  • pods_log - 使用提供的名称,获取当前或指定命名空间中 Kubernetes Pod 的日志

    • container (string) - 要获取日志的 Pod 容器名称(可选)
    • name (string) (必填) - 要获取日志的 Pod 名称
    • namespace (string) - 要获取 Pod 日志的命名空间
    • previous (boolean) - 返回之前已终止容器的日志(可选)
    • tail (integer) - 从日志末尾获取的行数(可选,默认值:100)
  • pods_run - 使用提供的容器镜像和可选名称,在当前或指定命名空间中运行 Kubernetes Pod

    • image (string) (必填) - 要在 Pod 中运行的容器镜像
    • name (string) - Pod 名称(可选;未提供时使用随机名称)
    • namespace (string) - 运行 Pod 的命名空间
    • port (number) - 要从 Pod 容器暴露的 TCP/IP 端口(可选;未提供时不暴露端口)
  • resources_list - 通过提供 apiVersion 和 kind,并可选择提供命名空间和标签选择器,列出当前集群中的 Kubernetes 资源和对象。使用 limit 和 continue 可逐页获取大型列表。 (常见的 apiVersion 和 kind 包括:v1 Pod、v1 Service、v1 Node、apps/v1 Deployment、networking.k8s.io/v1 Ingress、route.openshift.io/v1 Route)

    • apiVersion (string) (必填) - 资源的 apiVersion(有效 apiVersion 示例:v1、apps/v1、networking.k8s.io/v1)
    • continue (string) - 上一页 continue 字段中的不透明令牌。使用相同的 limit、namespace 和选择器,原样发送该令牌以获取下一页。首次调用时省略。
    • fieldSelector (string) - 可选的 Kubernetes 字段选择器,用于按字段值筛选资源(例如 'status.phase=Running'、'metadata.name=myresource')。支持的字段因资源类型而异。对于 Pod:metadata.name、metadata.namespace、spec.nodeName、spec.restartPolicy、spec.schedulerName、spec.serviceAccountName、status.phase(Pending/Running/Succeeded/Failed/Unknown)、status.podIP、status.nominatedNodeName。参见 https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/
    • kind (string) (必填) - 资源的 kind(有效 kind 示例:Pod、Service、Deployment、Ingress)
    • labelSelector (string) - 可选的 Kubernetes 标签选择器(例如 'app=myapp,env=prod' 或 'app in (myapp,yourapp)');需要按标签筛选资源时使用此选项
    • limit (integer) - 要返回的最大条目数。省略或设为 0 表示列出所有条目;如果响应超过 max_backend_response_bytes,则会失败。发生这种情况时,请使用较小的 limit 重试。API 返回的条目可能少于请求数量。
    • namespace (string) - 要获取命名空间级资源时使用的可选命名空间(对集群级资源无效)。未提供时,将列出所有命名空间中的资源
  • resources_get - 提供 apiVersion、kind、可选的命名空间及资源名称,获取当前集群中的 Kubernetes 资源 (常见的 apiVersion 和 kind 包括:v1 Pod、v1 Service、v1 Node、apps/v1 Deployment、networking.k8s.io/v1 Ingress、route.openshift.io/v1 Route)

    • apiVersion (string) (required) - 资源的 apiVersion(有效 apiVersion 示例:v1、apps/v1、networking.k8s.io/v1)
    • kind (string) (required) - 资源的 kind(有效 kind 示例:Pod、Service、Deployment、Ingress)
    • name (string) (required) - 资源名称
    • namespace (string) - 可选的命名空间,用于获取命名空间级资源(对于集群级资源会忽略此参数)。如果未提供,则从已配置的命名空间获取资源
  • resources_create_or_update - 通过 Server-Side Apply 创建或更新 Kubernetes 资源。清单表示完整的期望状态:此工具之前设置过但新清单中未包含的字段将被移除。要编辑现有资源,请使用 resources_get 获取该资源,修改后再重新应用完整资源。 (常见的 apiVersion 和 kind 包括:v1 Pod、v1 Service、v1 Node、apps/v1 Deployment、networking.k8s.io/v1 Ingress、route.openshift.io/v1 Route)

    • resource (string) (required) - Kubernetes 资源的完整 YAML 或 JSON 表示(完整的期望状态,而非部分补丁)。请包含 apiVersion、kind、metadata 和完整的 spec。
  • resources_delete - 提供 apiVersion、kind、可选的命名空间及资源名称,删除当前集群中的 Kubernetes 资源 (常见的 apiVersion 和 kind 包括:v1 Pod、v1 Service、v1 Node、apps/v1 Deployment、networking.k8s.io/v1 Ingress、route.openshift.io/v1 Route)

    • apiVersion (string) (required) - 资源的 apiVersion(有效 apiVersion 示例:v1、apps/v1、networking.k8s.io/v1)
    • gracePeriodSeconds (integer) - 删除对象前等待的可选时长,单位为秒。值必须是非负整数。值为零表示立即删除。如果此值为 nil,则使用指定类型的默认宽限期
    • kind (string) (required) - 资源的 kind(有效 kind 示例:Pod、Service、Deployment、Ingress)
    • name (string) (required) - 资源名称
    • namespace (string) - 可选的命名空间,用于删除命名空间级资源(对于集群级资源会忽略此参数)。如果未提供,则从已配置的命名空间删除资源
  • resources_scale - 提供 apiVersion、kind、名称及可选的命名空间,获取或更新当前集群中 Kubernetes 资源的副本数。如果在工具调用中设置了副本数,则会将其更新为该值。始终返回资源当前的副本数

    • apiVersion (string) (required) - 资源的 apiVersion(有效 apiVersion 示例:apps/v1)
    • kind (string) (required) - 资源的 kind(有效 kind 示例:StatefulSet、Deployment)
    • name (string) (required) - 资源名称
    • namespace (string) - 可选的命名空间,用于获取/更新命名空间级资源的副本数(对于集群级资源会忽略此参数)。如果未提供,则从已配置的命名空间获取/更新资源副本数
    • scale (integer) - 可选的副本数,用于更新资源的副本数。如果未提供,则返回资源当前的副本数,不作更新
helm - **helm_install** - 安装(部署)Helm chart,以在当前命名空间或指定命名空间中创建一个 release - `chart` (`string`) **(required)** - 要安装的 chart 引用(例如:stable/grafana、oci://ghcr.io/nginxinc/charts/nginx-ingress) - `name` (`string`) - Helm release 的名称(可选;如果未提供,则使用随机名称) - `namespace` (`string`) - 安装 Helm chart 的命名空间(可选;如果未提供,则使用当前命名空间) - `values` (`object`) - 要传递给 Helm chart 的值(可选)
  • helm_list - 列出当前命名空间或指定命名空间中的所有 Helm release(如果指定,也可以列出所有命名空间中的 release)。使用 limit 和 offset 对返回的 release 分页。Helm 会在应用分页之前加载 release 密钥,因此,即使密钥列表超出 max_backend_response_bytes,操作仍可能失败。

    • all_namespaces (boolean) - 如果为 true,则忽略 namespace 参数,列出所有命名空间中的所有 Helm release(可选)
    • limit (integer) - 要返回的 release 数量上限。省略或设为 0,则返回 Helm 加载的所有 release。完整的一页会告知下一个 offset。
    • namespace (string) - 要从中列出 Helm release 的命名空间(可选;如果未提供,则列出所有命名空间)
    • offset (integer) - 要跳过的 release 数量。若收到完整的一页,请使用相同的 limit 发送下一页的 offset。
  • helm_uninstall - 卸载当前命名空间或指定命名空间中的 Helm release

    • name (string) (required) - 要卸载的 Helm release 名称
    • namespace (string) - 要从中卸载 Helm release 的命名空间(可选;如果未提供,则使用当前命名空间)
kcp
  • kcp_workspaces_list - 列出当前集群中所有可用的 kcp 工作区

  • kcp_workspace_describe - 获取特定 kcp 工作区的详细信息

    • workspace (string) (required) - 要描述的工作区名称或路径
kiali
  • kiali_get_mesh_traffic_graph - 返回指定命名空间的服务间流量拓扑、依赖关系和网络指标(吞吐量、响应时间、mTLS)。使用此工具诊断路由问题、延迟,或查找上游/下游依赖项。

    • graphType (string) - 图的粒度。'app' 按应用名称聚合,'versionedApp' 按版本区分,'workload' 映射特定的 Pod/Deployment。默认值:versionedApp。
    • meshCluster (string) - 可选的 Istio 网格集群名称,来自 kiali_list_mesh_clusters(例如 west)。省略时,Kiali 默认使用其主集群。
    • namespaces (string)` (required) - 要映射的逗号分隔命名空间列表
  • kiali_get_mesh_status - 获取 Istio 服务网格的总体运行状况、拓扑和环境详情。返回多集群控制平面状态(istiod)、数据平面命名空间运行状况(包括 ambient mesh 状态)、可观测性技术栈运行状况(Prometheus、Grafana 等)以及组件连通性。将此工具作为诊断整个网格问题、验证 Istio/Kiali 版本,或在深入检查特定工作负载前检查整体运行状况的第一步。

- **kiali_manage_istio_config_read** - 读取 Istio、Gateway API 和 Inference API 配置。`'list'` 按命名空间→`'group/version/kind'`→{valid:[...],invalid:[...]} 分组,其中 valid/invalid 数组包含资源名称;省略 group/kind 可在单次调用中检索所有配置类型。支持 Istio(networking.istio.io、security.istio.io)、Gateway API(gateway.networking.k8s.io),以及已安装时的 Inference API(inference.networking.k8s.io)。`'get'` 返回完整 YAML。写入请使用 manage_istio_config。 - `action`(`string`)**(必需)** - 要执行的操作(只读) - `group`(`string`)- Istio 对象的 API 组。仅在执行 `'get'` 操作时必需。执行 `'list'` 时,省略 group 和 kind,即可在单次调用中检索所有配置类型。Gateway API 资源请使用 `'gateway.networking.k8s.io'`。Inference API 资源请使用 `'inference.networking.k8s.io'`。 - `kind`(`string`)- Istio 对象的类型。仅在执行 `'get'` 操作时必需。执行 `'list'` 时省略,即可一次返回所有类型;请勿针对每种类型分别调用。 - `meshCluster`(`string`)- 可选的 Istio 网格集群名称,取自 kiali_list_mesh_clusters(例如 west)。省略时,Kiali 默认使用其所在的集群。 - `namespace`(`string`)- 包含 Istio 对象的命名空间。执行 `'list'` 时,如果未提供,则返回所有命名空间中的对象。执行 `'get'` 时必需。 - `object`(`string`)- Istio 对象的名称。执行 `'get'` 操作时必需。 - `serviceName`(`string`)- 筛选会影响特定服务的 Istio 配置(VirtualServices、DestinationRules 及其引用的 Gateways)。仅适用于 `'list'` 操作 - `version`(`string`)- API 版本。所有资源类型均使用 `'v1'`。执行 `'get'` 操作时必需。
  • kiali_manage_istio_config - 创建、修补或删除 Istio、Gateway API 和 Inference API 配置。支持 Istio 资源(networking.istio.io、security.istio.io)、Gateway API 资源(gateway.networking.k8s.io),以及在集群上已安装时的 Inference API 资源(inference.networking.k8s.io)。读取列表和对象请使用 manage_istio_config_read。

    • action(string)(必需) - 要执行的操作(写入)
    • data(string)- 资源的 JSON 或 YAML 数据。执行 create 和 patch 操作时必需。执行 create 时,可提供部分内容(例如仅提供 spec),系统会将其与带默认值的有效模板合并。数组(如 servers、http 等)会被整体替换,因此请包含所需的所有元素。
    • group(string)(必需) - Istio 对象的 API 组。Gateway API 资源请使用 'gateway.networking.k8s.io'。Inference API 资源请使用 'inference.networking.k8s.io'。
    • kind(string)(必需) - Istio 对象的类型(例如,'VirtualService'、'DestinationRule')。
    • meshCluster(string)- 可选的 Istio 网格集群名称,取自 kiali_list_mesh_clusters(例如 west)。省略时,Kiali 默认使用其所在的集群。
    • namespace(string)(必需) - 包含 Istio 对象的命名空间。
    • object(string)(必需) - Istio 对象的名称。
    • version(string)(必需) - API 版本。所有资源类型均使用 'v1'。
  • kiali_list_mesh_clusters - 返回 Kiali 可访问的 Istio 网格集群列表。每个条目都包含集群名称,以及该集群是否为 home 集群(即部署 Kiali 的集群)。目标集群未知时,请在其他 Kiali 工具中使用 meshCluster 前调用此工具。

  • kiali_get_resource_details - 获取资源列表,或检索特定资源的详细数据。如果省略 'resourceName',则返回列表。如果提供了 'resourceName',则返回该特定资源的详细信息。

    • meshCluster (string) - 可选的 Istio 网格集群名称,来自 kiali_list_mesh_clusters(例如 west)。省略时,Kiali 默认使用其主集群。
    • namespaces (string) - 要查询的命名空间,以逗号分隔的列表(例如 'bookinfo' 或 'bookinfo,default')。如果未提供,则会查询所有可访问的命名空间。
    • resourceName (string) - 可选。资源的具体名称。如果留空,工具会返回指定类型的所有资源列表。如果提供,则会返回该特定资源的详细信息。
    • resourceType (string) (必填) - 要查询的资源类型。对于 Kiali 应用(按 Kubernetes 'app' 标签分组),使用 'app'。对于 ArgoCD Application CRD,使用 'argoapp'(需要安装 ArgoCD,且 Kiali 服务账号必须具有 applications.argoproj.io 的读取权限)。
  • kiali_list_traces - 列出某个命名空间中某项服务的分布式跟踪记录。返回摘要(namespace、service、total_found、avg_duration_ms)以及包含 id、duration_ms、spans_count、root_op、slowest_service、has_errors 的跟踪记录列表。使用带有跟踪 ID 的 get_trace_details 获取完整层级结构。

    • errorOnly (boolean) - 如果为 true,则只考虑包含错误的跟踪记录。默认为 false。
    • limit (integer) - 要返回的跟踪记录的最大数量。默认为 10。
    • lookbackSeconds (integer) - 向前回溯搜索的时长。默认为 600(10m)。
    • meshCluster (string) - 可选的 Istio 网格集群名称,来自 kiali_list_mesh_clusters(例如 west)。省略时,Kiali 默认使用其主集群。
    • namespace (string) (必填) - 服务所在的 Kubernetes 命名空间。
    • serviceName (string) (必填) - 要搜索跟踪记录的服务名称(必填)。最多返回 limit 条跟踪记录。
  • kiali_get_trace_details - 根据 trace_id 获取单条分布式跟踪记录,并返回其调用层级结构(包含持续时间、状态和嵌套调用的服务树)。使用此工具可在调用 list_traces 后深入查看特定跟踪记录。

    • traceId (string) (必填) - 要获取并汇总的跟踪 ID。如果提供,则忽略 namespace/service_name。
  • kiali_get_pod_performance - 返回易读的文本摘要,对比当前 Pod 的 CPU/内存用量(来自 Prometheus)与 Kubernetes 请求/限制(来自 Pod 规格)。可用于回答“此工作负载是否使用了过多内存?”等问题。

    • meshCluster (string) - 可选的 Istio 网格集群名称,来自 kiali_list_mesh_clusters(例如 west)。省略时,Kiali 默认使用其主集群。
    • namespace (string) (必填) - Pod 所在的 Kubernetes 命名空间。
    • podName (string) - Kubernetes Pod 名称。如果提供了 workloadName,工具会先尝试从该工作负载中解析一个 Pod。
    • queryTime (string) - 可选的查询结束时间戳(RFC3339)。默认为当前时间。
    • timeRange (string) - 用于计算 CPU 速率的时间窗口(Prometheus 时长格式,如 '5m'、'10m'、'1h'、'1d')。默认为 '10m'。
    • workloadName (string) - Kubernetes 工作负载名称(例如 Deployment/StatefulSet 等)。工具会查找该工作负载并选取其中一个 Pod。如果未找到,则会将此值作为 podName 处理。
  • kiali_get_logs - 获取 Kubernetes Pod(或可解析为 Pod 的工作负载名称)在某个命名空间中的日志。输出为纯文本,与 kubernetes-mcp-server 的 pods_log 格式一致。line_count 字段表示返回的日志总行数。请分析所有日志行,但除非用户明确要求原始输出,否则请总结结果。不要遗漏任何错误或警告行。

    • container (string) - 可选。要获取日志的 Pod 容器名称。
    • format (string) - 聊天输出格式。'codeblock' 会用 ~~~ 围住日志(推荐)。'plain' 返回类似 kubernetes-mcp-server pods_log 的原始文本。
    • meshCluster (string) - 可选。来自 kiali_list_mesh_clusters 的 Istio 网格集群名称(例如 west)。省略时,Kiali 默认使用其主集群。
    • name (string) (required) - 要获取日志的 Pod 名称。如果该 Pod 不存在,则会将其视为工作负载名称,并选择一个正在运行的 Pod。
    • namespace (string) (required) - 获取 Pod 日志的命名空间
    • previous (boolean) - 可选。返回先前已终止容器的日志
    • severity (string) - 可选。在客户端应用的严重性筛选条件。接受 'ERROR'、'WARN' 或 'ERROR,WARN' 这类组合。
    • tail (integer) - 从日志末尾获取的行数(可选,默认值为 50)。不得超过 200 行。
    • workload (string) - 可选。覆盖工作负载名称(在名称查找失败时使用)。
  • kiali_get_metrics - 返回给定资源的 Istio 指标精简 JSON 摘要(延迟分位数、流量趋势、吞吐量、有效载荷大小)。

    • byLabels (string) - 用于对指标分组的逗号分隔标签列表(例如 'source_workload,destination_service')。可选
    • direction (string) - 流量方向。可选,默认为 'outbound'
    • meshCluster (string) - 可选。来自 kiali_list_mesh_clusters 的 Istio 网格集群名称(例如 west)。省略时,Kiali 默认使用其主集群。
    • namespace (string) (required) - 获取指标的命名空间
    • quantiles (string) - 直方图指标分位数的逗号分隔列表(例如 '0.5,0.95,0.99')。可选
    • rateInterval (string) - 指标的速率间隔(例如 '1m'、'5m')。可选,默认为 '10m'
    • reporter (string) - 指标报告方。逗号分隔的列表,可选值为 'source'、'destination'、'waypoint',或特殊值 'both'(不筛选报告方)。可选,默认为 'source'。示例:'source,waypoint'
    • requestProtocol (string) - 按请求协议筛选(例如 'http'、'grpc'、'tcp')。可选
    • resourceName (string) (required) - 要获取指标的资源名称
    • resourceType (string) (required) - 资源类型
    • step (string) - 数据点之间的步长(秒)(例如 '15')。可选,默认为 15 秒
kubevirt
  • vm_clone - 在 KubeVirt 上通过创建 VirtualMachineClone 资源克隆 VirtualMachine。此操作会使用 KubeVirt Clone API,以新名称创建源 VM 的副本

    • name (string) (required) - 要克隆的源虚拟机名称
    • namespace (string) (required) - 源虚拟机所在的命名空间
    • targetName (string) (required) - 新克隆虚拟机的名称
  • vm_console_screenshot - 将 KubeVirt 上 VirtualMachine 的图形(VNC)控制台截取为 PNG 图像。可使用此工具查看 VM 屏幕上当前显示的内容(例如固件、引导加载程序或登录提示)。只读:绝不会向来宾发送输入。

    • name (string) (required) - 虚拟机名称
    • namespace (string) (required) - 虚拟机所在的命名空间
  • vm_create - 使用指定配置在 KubeVirt 上创建 VirtualMachine,并自动解析实例类型、偏好设置和容器磁盘镜像。默认情况下,VM 将以 Halted 状态创建;使用 autostart 参数可立即启动。

    • autostart (boolean) - 可选标志,用于在创建后自动启动 VM(将 runStrategy 设置为 Always,而非 Halted)。默认为 false。
    • instancetype (string) - VM 的可选实例类型名称(例如,'u1.small'、'u1.medium'、'u1.large')
    • name (string) (required) - 虚拟机名称
    • namespace (string) (required) - 虚拟机所在的命名空间
    • networks (array) - 要附加到 VM 的可选辅助网络接口。每个条目指定要附加的 Multus NetworkAttachmentDefinition。接受简单字符串(NetworkAttachmentDefinition 名称)或包含 'name'(VM 中的接口名称)和 'networkName'(NetworkAttachmentDefinition 名称)属性的对象。每个网络都会在 VM 上创建一个桥接接口。
    • performance (string) - VM 实例类型的可选性能系列提示(例如,'u1' 表示通用型,'o1' 表示超分配型,'c1' 表示计算优化型,'m1' 表示内存优化型)。如果未指定,则默认为 'u1'(通用型)。
    • preference (string) - VM 的可选偏好设置名称
    • size (string) - VM 的可选工作负载规模提示(例如,'small'、'medium'、'large'、'xlarge')。如果未明确指定实例类型,则用于自动选择合适的实例类型。
    • storage (string) - 使用 DataSources 时,VM 根磁盘的可选存储大小(例如,'30Gi'、'50Gi'、'100Gi')。默认为 30Gi。使用容器磁盘时将忽略此项。
    • workload (string) - VM 的工作负载。接受 OS 名称(例如,'fedora'(默认)、'ubuntu'、'centos'、'centos-stream'、'debian'、'rhel'、'opensuse'、'opensuse-tumbleweed'、'opensuse-leap')或完整的容器磁盘镜像 URL
  • vm_guest_info - 从 VirtualMachine 的 QEMU guest agent 获取来宾操作系统信息。要求在 VM 内安装并运行 guest agent。提供有关 OS、文件系统、网络接口和已登录用户的详细信息。

    • info_type (string) - 要获取的信息类型:'all'(默认值,所有可用信息)、'os'(操作系统详情)、'filesystem'(磁盘和文件系统信息)、'users'(已登录用户)、'network'(网络接口和 IP)
    • name (string) (required) - 虚拟机名称
    • namespace (string) (required) - 虚拟机所在的命名空间
  • vm_lifecycle - 管理 KubeVirt VirtualMachine 生命周期:启动、停止、重启、暂停或取消暂停 VM

    • action (string) (required) - 要执行的生命周期操作:'start'(将 runStrategy 改为 Always)、'stop'(将 runStrategy 改为 Halted)、'restart'(先停止再启动 VM)、'pause'(就地挂起正在运行的 VMI)或 'unpause'(恢复已暂停的 VMI)
    • name (string) (required) - 虚拟机名称
    • namespace (string) (required) - 虚拟机所在的命名空间
  • vm_create_from_template - 根据 KubeVirt 上的 VirtualMachineTemplate(virt-template)创建 VirtualMachine。在服务器端处理模板以替换参数(必填值、默认值和密码等自动生成的值),然后在同一命名空间中创建生成的 VirtualMachine。不支持跨命名空间使用模板。

    • namespace(string)(必填) - VirtualMachineTemplate 和生成的 VirtualMachine 所在的命名空间(必须相同)
    • parameters(object)- 要替换到模板中的参数值。键为参数名称(例如 VM_NAME),值为字符串。必须提供必填参数;如果省略可选参数,则使用其默认值;如果未提供带有 generate/from 的参数,则会自动生成。
    • template_name(string)(必填) - 用于创建 VM 的 VirtualMachineTemplate 名称
  • vm_troubleshoot - 通过自动根因检测诊断 KubeVirt VirtualMachine 问题。收集 VM 状态、VMI 状态、卷、DataVolume/PVC 状态、cloud-init 配置、Pod 状态、日志和事件,然后运行启发式检查,以识别具体问题并建议修复方法。返回包含 CRITICAL/WARNING 发现项和可执行修复步骤的“Detected Issues”部分,后面附上原始诊断数据。用户询问 VM 为何无法启动、卡在 Provisioning、陷入 crashloop、迁移失败或表现异常时,请始终先使用此工具。如果用户要求修复或处理问题,请使用报告中的 Suggested Fixes,并通过 vm_lifecycle(重启)或 resources_create_or_update 执行。

    • name(string)(必填) - 要排查的 VirtualMachine 名称
    • namespace(string)(必填) - 要排查的 VirtualMachine 所在命名空间
netobserv
  • netobserv_list_flows - 从 Loki 列出 NetObserv 网络流记录。用于调查某个命名空间或时间范围内工作负载、IP、端口或协议之间的流量。
    • endTime(integer)- 时间范围的结束时间,以 Unix 纪元秒数表示。默认为当前时间。
    • filters(string)- 传递给控制台插件的 NetObserv 过滤表达式(纯文本;客户端会对其进行 URL 编码)。

语法:

  • key=value — 精确匹配;key=a,b — 同一键的多个值取 OR
  • key~pattern — 正则表达式/包含匹配;key!~pattern — 非正则匹配
  • key!=value — 不等于;key>number — 数值大于或等于(例如 Bytes>1000)
  • 组内 AND:&(例如 SrcK8S_Namespace=default&Proto=6)
  • 组间 OR:|(例如 SrcK8S_Name=pod-a|SrcK8S_Name=pod-b)

可能时,优先使用专用的 "namespace" 参数指定命名空间范围。 使用 Kubernetes 列表工具(namespaces、pods、deployments 等)来查找过滤值。

常见 Kubernetes 字段(Src/Dst 前缀相互对应):

  • SrcK8S_Namespace、DstK8S_Namespace、SrcK8S_Name、DstK8S_Name
  • SrcK8S_Type、DstK8S_Type(例如 Pod、Service、Node)
  • SrcK8S_OwnerName、DstK8S_OwnerName、SrcK8S_OwnerType、DstK8S_OwnerType(用于 Deployment、StatefulSet 等)
  • SrcK8S_HostName、DstK8S_HostName、SrcK8S_Zone、DstK8S_Zone、K8S_ClusterName、UDN

网络与流量:

  • SrcAddr、DstAddr(IP)、SrcPort、DstPort、Proto(IANA 编号,例如 6=TCP、17=UDP)
  • FlowDirection(0=Ingress、1=Egress、2=Inner)、Bytes、Packets、Dscp、Flags

数据包丢弃(通常带有 recordType flowLog 和 packetLoss dropped/hasDrops):

  • PktDropPackets、PktDropBytes、PktDropLatestState、PktDropLatestDropCause

DNS:

  • DnsName、DnsId、DnsLatencyMs、DnsErrno、DnsFlagsResponseCode
示例: - SrcK8S_Namespace=openshift-netobserv&SrcK8S_Name~my-app - Proto=6&DstPort=443 - SrcK8S_Name=pod-a|SrcK8S_Name=pod-b - `limit` (`integer`) - 要返回的流记录的最大数量。默认值为 100。 - `namespace` (`string`) - 限定为源命名空间或目标命名空间匹配的流(限定于开发环境的 Loki 租户)。 - `packetLoss` (`string`) - 丢包筛选条件。 - `recordType` (`string`) - 流记录类型筛选条件。 - `startTime` (`integer`) - 时间范围的起始时间,以 Unix 纪元秒数表示。设置后会覆盖 timeRange。 - `timeRange` (`integer`) - 未指定 startTime 时的回溯时间窗口,以秒为单位。默认值为 300。
  • netobserv_export_flows - 将 NetObserv 流记录导出为 CSV,支持与 list_flows 相同的筛选条件。用户需要下载流数据以进行审计或离线分析时使用。
    • columns (string) - 可选的逗号分隔列名,指定要包含的列(例如 SrcK8S_Namespace,DstK8S_Namespace,Bytes)。省略时导出结果中包含的所有列。
    • endTime (integer) - 时间范围的结束时间,以 Unix 纪元秒数表示。默认为当前时间。
    • filters (string) - 传递给控制台插件的 NetObserv 筛选表达式(纯文本;客户端会对其进行 URL 编码)。

语法:

  • key=value — 精确匹配;key=a,b — 对同一 key 的多个值执行 OR 匹配
  • key~pattern — 正则表达式/包含匹配;key!~pattern — NOT 正则表达式
  • key!=value — 不等于;key>number — 数值大于或等于(例如 Bytes>1000)
  • 组内 AND:&(例如 SrcK8S_Namespace=default&Proto=6)
  • 组间 OR:|(例如 SrcK8S_Name=pod-a|SrcK8S_Name=pod-b)

条件允许时,优先使用专用的 "namespace" 参数限定命名空间范围。 使用 Kubernetes 列表工具(namespaces、pods、deployments 等)发现筛选值。

常见的 Kubernetes 字段(Src/Dst 前缀相互对应):

  • SrcK8S_Namespace、DstK8S_Namespace、SrcK8S_Name、DstK8S_Name
  • SrcK8S_Type、DstK8S_Type(例如 Pod、Service、Node)
  • SrcK8S_OwnerName、DstK8S_OwnerName、SrcK8S_OwnerType、DstK8S_OwnerType(适用于 Deployment、StatefulSet 等)
  • SrcK8S_HostName、DstK8S_HostName、SrcK8S_Zone、DstK8S_Zone、K8S_ClusterName、UDN

网络与流:

  • SrcAddr、DstAddr(IP)、SrcPort、DstPort、Proto(IANA 编号,例如 6=TCP、17=UDP)
  • FlowDirection(0=Ingress、1=Egress、2=Inner)、Bytes、Packets、Dscp、Flags

丢包(通常搭配 recordType flowLog 以及 packetLoss dropped/hasDrops):

  • PktDropPackets、PktDropBytes、PktDropLatestState、PktDropLatestDropCause

DNS:

  • DnsName、DnsId、DnsLatencyMs、DnsErrno、DnsFlagsResponseCode

示例:

  • SrcK8S_Namespace=openshift-netobserv&SrcK8S_Name~my-app

  • Proto=6&DstPort=443

  • SrcK8S_Name=pod-a|SrcK8S_Name=pod-b

    • format (string) - 导出格式。仅支持 csv。
    • limit (integer) - 要返回的流记录的最大数量。默认值为 100。
    • namespace (string) - 限定为源命名空间或目标命名空间匹配的流(限定于开发环境的 Loki 租户)。
    • packetLoss (string) - 丢包筛选条件。
    • recordType (string) - 流记录类型筛选条件。
    • startTime (integer) - 时间范围的起始时间,以 Unix 纪元秒数表示。设置后会覆盖 timeRange。
    • timeRange (integer) - 未指定 startTime 时的回溯时间窗口,以秒为单位。默认值为 300。
  • netobserv_get_flow_metrics - 返回聚合后的 NetObserv 流指标,形式为拓扑数据或时间序列数据。可用于分析吞吐量、TLS/DNS/丢包情况,以及命名空间或工作负载流量;分组方式请参见 aggregateBy 和 groups。

    • aggregateBy (string) (required) - netobserv_get_flow_metrics(控制台插件 /api/flow/metrics)的主要维度。

两种形式(请使用准确拼写):

  1. 拓扑范围 — 为图形/拓扑视图聚合端点:
  • app — 应用工作负载(Pod/Service),不包括基础设施流量
  • namespace — Kubernetes 命名空间(默认)
  • owner — 控制器所有者(Deployment、StatefulSet,……)
  • resource — Pod、Service 或 Node(工作负载的最细粒度)
  • host — 节点名称
  • zone — 可用区
  • cluster — 集群名称(多集群)
  • network — 用户定义的/辅助网络名称
  1. 流记录字段 — 按单个流属性分组(PascalCase 字段名称)。 用于细分图表(TLS、DNS、丢弃、协议)。字段名称与过滤器/流日志中的名称一致。

TLS(需要在 FlowCollector 上启用 TLS 跟踪):

  • TLSVersion、TLSCipherSuite、TLSGroup、TLSTypes

DNS:

  • DnsName、DnsFlagsResponseCode、DnsErrno

数据包丢弃:

  • PktDropLatestState、PktDropLatestDropCause

网络 / K8s(单侧细分;搭配 src/dst 过滤器使用):

  • Proto、SrcPort、DstPort、FlowDirection、Dscp
  • SrcK8S_Namespace、DstK8S_Namespace、SrcK8S_Name、DstK8S_Name
  • SrcK8S_Type、DstK8S_Type、SrcK8S_OwnerName、DstK8S_OwnerName
  • SrcK8S_HostName、DstK8S_HostName、SrcK8S_Zone、DstK8S_Zone
  • K8S_ClusterName、SrcK8S_NetworkName、DstK8S_NetworkName

将 aggregateBy 与 type 和 function 配对使用:

  • 吞吐量:type=Bytes 或 Packets,function=rate
  • 流数量:type=Flows,function=count 或 rate
  • DNS 流量:type=DnsFlows,function=count
  • DNS 延迟:type=DnsLatencyMs,function=avg、p90 或 max
  • RTT:type=TimeFlowRttNs,function=avg、min 或 p90
  • 丢弃:type=PktDropPackets 或 PktDropBytes,function=rate

示例:

  • aggregateBy=namespace, type=Bytes, function=rate
  • aggregateBy=TLSVersion, type=Bytes, function=rate, filters=TLSTypes!~""
  • aggregateBy=TLSGroup, type=Flows, function=count
  • aggregateBy=DnsFlagsResponseCode, type=DnsFlows, function=count
  • aggregateBy=PktDropLatestState, type=PktDropPackets, function=rate, packetLoss=dropped
  • aggregateBy=resource, type=Bytes, function=rate, namespace=netobserv
    • dataSource (string) - 指标后端:auto(优先使用 Prometheus,回退到 Loki)、prom 或 loki。
    • endTime (integer) - 时间范围的结束时间,以 Unix epoch 秒为单位。默认为当前时间。
    • filters (string) - 传递给控制台插件的 NetObserv 过滤表达式(纯文本;客户端会对其进行 URL 编码)。

语法:

  • key=value — 精确匹配;key=a,b — 同一 key 的多个值取 OR
  • key~pattern — 正则表达式/包含匹配;key!~pattern — 非正则匹配
  • key!=value — 不等于;key>number — 数值大于或等于(例如 Bytes>1000)
  • 组内 AND:&(例如 SrcK8S_Namespace=default&Proto=6)
  • 组间 OR:|(例如 SrcK8S_Name=pod-a|SrcK8S_Name=pod-b)

在可能的情况下,优先使用专用的 "namespace" 参数指定命名空间范围。 使用 Kubernetes 列表工具(namespaces、pods、deployments 等)发现过滤值。

常见 Kubernetes 字段(Src/Dst 前缀相互对应):

  • SrcK8S_Namespace、DstK8S_Namespace、SrcK8S_Name、DstK8S_Name
  • SrcK8S_Type、DstK8S_Type(例如 Pod、Service、Node)
  • SrcK8S_OwnerName、DstK8S_OwnerName、SrcK8S_OwnerType、DstK8S_OwnerType(适用于 Deployment、StatefulSet 等)
  • SrcK8S_HostName、DstK8S_HostName、SrcK8S_Zone、DstK8S_Zone、K8S_ClusterName、UDN

网络与流量:

  • SrcAddr、DstAddr(IP)、SrcPort、DstPort、Proto(IANA 编号,例如 6=TCP、17=UDP)
  • FlowDirection(0=Ingress,1=Egress,2=Inner)、Bytes、Packets、Dscp、Flags

数据包丢弃(通常搭配 recordType flowLog 和 packetLoss dropped/hasDrops):

  • PktDropPackets、PktDropBytes、PktDropLatestState、PktDropLatestDropCause

DNS:

  • DnsName、DnsId、DnsLatencyMs、DnsErrno、DnsFlagsResponseCode 示例:
  • SrcK8S_Namespace=openshift-netobserv&SrcK8S_Name~my-app
  • Proto=6&DstPort=443
  • SrcK8S_Name=pod-a|SrcK8S_Name=pod-b
    • function (string) - 聚合函数。
    • groups (string) - 当 aggregateBy 为拓扑范围时,可选的逗号分隔父级范围。 添加额外的标签维度(例如,按集群或区域细分命名空间结果)。 当 aggregateBy 已经是原始流字段(例如 TLSVersion)时,此项会被忽略或作用有限;请改用过滤器。

单一范围:

  • clusters、networks、zones、hosts、namespaces、owners

组合范围(使用 +,不要加空格):

  • clusters+zones、clusters+hosts、clusters+namespaces、clusters+owners
  • zones+hosts、zones+namespaces、zones+owners
  • hosts+namespaces、hosts+owners
  • namespaces+owners
  • networks+zones、networks+hosts、networks+namespaces、networks+owners

示例:

  • aggregateBy=namespace, groups=clusters
  • aggregateBy=resource, groups=namespaces
  • aggregateBy=owner, groups=zones,hosts
    • limit (integer) - 返回的流记录最大数量。默认值为 100。
    • namespace (string) - 将结果限制为源或目标命名空间匹配的流(dev 范围的 Loki 租户)。
    • packetLoss (string) - 丢包过滤器。
    • rateInterval (string) - Prometheus 速率间隔(例如 1m、5m)。
    • recordType (string) - 流记录类型过滤器。
    • startTime (integer) - 时间范围的起始时间,以 Unix 纪元秒数表示。设置后会覆盖 timeRange。
    • step (string) - 查询分辨率步长(例如 30s、1m)。
    • timeRange (integer) - 未指定 startTime 时的回溯窗口,单位为秒。默认值为 300。
    • type (string) - 要聚合的指标类型。
可观测性/日志
  • loki_list_instances - 列出 Kubernetes 集群中可用的 LokiStack 实例。 使用由 Loki Operator 管理的堆栈时,请先调用此工具,以便向其他 Loki 工具传入 lokiNamespace 和 lokiName。

  • loki_label_names - 列出指定时间范围内可用的 Loki 标签名称。在编写 LogQL 查询前使用此工具。

    • end (string) - 结束时间,格式为 RFC3339、Unix 时间戳、NOW 或相对于 NOW 的表达式(可选)。
    • lokiName (string) - LokiStack 的名称。使用 loki_list_instances 查找有效值。
    • lokiNamespace (string) - LokiStack 所在的 Kubernetes 命名空间。使用 loki_list_instances 查找有效值。
    • start (string) - 开始时间,格式为 RFC3339、Unix 时间戳、NOW 或相对于 NOW 的表达式(可选)。
    • tenant (string) - Loki 租户 ID(X-Scope-OrgID)。对于 LokiStack 网关模式(例如 openshift-network),此参数会选择 /api/logs/v1/<tenant> 路径;对于 openshift-network,请使用 network。
  • loki_label_values - 列出 Loki 标签键的可能取值。使用此工具在 LogQL 中构造精确的标签匹配器。

    • end (string) - 结束时间,格式为 RFC3339、Unix 时间戳、NOW 或相对于 NOW 的表达式(可选)。
    • label (string) (必填) - 要检查的标签键(例如 namespace、pod、container)。
    • lokiName (string) - LokiStack 的名称。使用 loki_list_instances 查找有效值。
    • lokiNamespace (string) - LokiStack 所在的 Kubernetes 命名空间。使用 loki_list_instances 查找有效值。
    • start (string) - 开始时间,格式为 RFC3339、Unix 时间戳、NOW 或相对于 NOW 的表达式(可选)。
    • tenant (string) - Loki 租户 ID(X-Scope-OrgID)。对于 LokiStack 网关模式(例如 openshift-network),此参数会选择 /api/logs/v1/<tenant> 路径;对于 openshift-network,请使用 network。
  • loki_query_range - 执行 Loki LogQL 范围查询,并返回匹配的日志流和日志行。

请先使用精确的标签匹配器和较短的时间窗口。 - `direction` (`string`) - 搜索方向:backward(默认)或 forward。 - `duration` (`string`) - 未指定 start/end 时从现在开始回溯的时长(例如 5m、1h)。默认为 15m。 - `end` (`string`) - 结束时间,格式为 RFC3339、Unix 时间戳、NOW 或相对于 NOW 的表达式(可选)。 - `limit` (`integer`) - 要返回的最大日志行数。默认为 100,最大为 1000。 - `lokiName` (`string`) - LokiStack 的名称。使用 loki_list_instances 查找有效值。 - `lokiNamespace` (`string`) - LokiStack 所在的 Kubernetes 命名空间。使用 loki_list_instances 查找有效值。 - `query` (`string`) **(必填)** - LogQL 查询字符串。 - `start` (`string`) - 开始时间,格式为 RFC3339、Unix 时间戳、NOW 或相对于 NOW 的表达式(可选)。 - `tenant` (`string`) - Loki 租户 ID(X-Scope-OrgID)。对于 LokiStack 网关模式(例如 openshift-network),此参数用于选择 `/api/logs/v1/` 路径;openshift-network 请使用 `network`。
可观测性/指标
  • list_metrics - 必须首先执行:列出 Prometheus 中所有可用的指标名称。

在使用任何其他查询工具之前,必须调用此工具。

对于每个可观测性问题,都必须首先调用此工具,以便:

  1. 发现此环境中实际存在的指标
  2. 找到查询中要使用的确切指标名称
  3. 避免查询不存在的指标
  4. 始终应提供 name_regex 参数,并尽可能猜测指标名称的形式。
  5. 不要在 name_regex 参数中使用 .* 或 .+ 之类的通用正则表达式。请使用 kube.*、node.* 等具体模式。

正则表达式模式指南:

  • Prometheus 指标通常带有前缀(例如,prometheus_tsdb_head_series、kube_pod_status_phase)
  • 若要匹配包含某个子字符串的指标,请使用通配符:.*tsdb.* 可匹配 prometheus_tsdb_head_series
  • 不使用通配符时,模式将进行精确匹配:tsdb 只匹配名称恰好为 tsdb 的指标(这种情况很少见)
  • 常见模式:kube_pod.*(Pod)、.*memory.*(内存相关)、node_.*(节点指标)
  • 如果没有结果,请尝试在搜索词前后添加 .*

绝不要跳过此步骤。绝不要猜测指标名称。不同环境中的指标名称各不相同。

调用此工具后:

  1. 在返回的列表中搜索相关指标
  2. 在后续查询中使用找到的确切指标名称
  3. 如果没有相关指标,请告知用户
  • name_regex (string) (必填) - 用于筛选指标名称的正则表达式模式。重要:指标名称通常带有前缀(例如,prometheus_tsdb_head_series)。使用通配符匹配子字符串:.*tsdb.* 可匹配任何包含 tsdb 的指标,而 tsdb 只匹配名称恰好为 tsdb 的指标。示例:http_.*(以 http_ 开头)、.*memory.*(包含 memory)、node_.*(以 node_ 开头)。此参数为必填项。不要传入 .* 或 .+ 之类的通用正则表达式。

  • execute_instant_query - 执行 PromQL 即时查询,以获取当前值或某个时间点的值。

前提条件:必须先调用 list_metrics,以确认指标存在。

使用场景:

  • 查询当前状态:“当前错误率是多少?”
  • 查询某个时间点的快照:“有多少个 Pod 正在运行?”
  • 查询最新值:“哪些 Pod 处于 Pending 状态?”

query 参数必须使用 list_metrics 返回的指标名称。

  • query (string) (必填) - PromQL 查询字符串,使用经 list_metrics 验证的指标名称

  • time (string) - 评估时间,格式为 RFC3339 或 Unix 时间戳。省略或使用 'NOW' 表示当前时间。

  • execute_range_query - 执行 PromQL 范围查询,以获取一段时间内的时间序列数据。

前提条件:必须先调用 list_metrics,以确认指标存在。 适用场景:

  • 随时间变化的趋势:“过去 1 小时的 CPU 使用率是多少?”
  • 速率计算:“每秒有多少个请求?”
  • 历史分析:“过去 5 分钟内是否发生过重启?”

时间参数:

  • 'duration':从现在往回查询的时长(例如,“5m”、“1h”、“24h”)
  • 'step':数据点的分辨率(例如,时长为 1 小时时使用“1m”,时长为 24 小时时使用“5m”)

'query' 参数必须使用 list_metrics 返回的指标名称。

  • duration (string) - 从现在往回查询的时长(例如,'1h'、'30m'、'1d'、'2w')(可选)

  • end (string) - 结束时间,格式为 RFC3339 或 Unix 时间戳(可选)。当前时间请使用 NOW。

  • query (string) (必填) - PromQL 查询字符串,使用通过 list_metrics 验证的指标名称

  • start (string) - 开始时间,格式为 RFC3339 或 Unix 时间戳(可选)

  • step (string) (必填) - 查询分辨率步长(例如,'15s'、'1m'、'1h')。请根据时间范围选择:较短的范围使用较小的步长。

  • show_timeseries - 将结果显示为交互式时间序列图表。

此工具的工作方式与 execute_range_query 类似,但会在 UI 客户端中将结果渲染为可视化图表。 当用户希望查看时间序列数据的图表或可视化内容,并通过图表提供答案时,请使用此工具。 在所有其他 Prometheus 工具调用完成并确定结果后,将 show_timeseries 作为最后一个工具调用。

时间参数:

  • 'duration':从现在往回查询的时长(例如,“5m”、“1h”、“24h”)
  • 'step':数据点的分辨率(例如,时长为 1 小时时使用“1m”,时长为 24 小时时使用“5m”)
  • 'title':描述性图表标题(例如,“过去 1 小时的 API 错误率”)
  • 'description':对图表含义或上下文的说明(例如,“显示按 Pod 拆分的每秒 HTTP 5xx 错误率”)

'query' 参数必须是范围查询,并且必须使用 list_metrics 返回的指标名称。

  • description (string) - 对图表含义或上下文的说明(例如,'显示按 Pod 拆分的每秒 HTTP 5xx 错误率')。提供后会显示在标题下方。

  • duration (string) - 从现在往回查询的时长(例如,'1h'、'30m'、'1d'、'2w')(可选)

  • end (string) - 结束时间,格式为 RFC3339 或 Unix 时间戳(可选)。当前时间请使用 NOW。

  • query (string) (必填) - PromQL 查询字符串,使用通过 list_metrics 验证的指标名称

  • start (string) - 开始时间,格式为 RFC3339 或 Unix 时间戳(可选)

  • step (string) (必填) - 查询分辨率步长(例如,'15s'、'1m'、'1h')。请根据时间范围选择:较短的范围使用较小的步长。

  • title (string) - 描述查询内容的易读图表标题(例如,'过去 1 小时的 API 错误率')。提供后会显示在图表上方。

  • get_label_names - 获取可用于筛选指标的所有标签名称(维度)。

适用场景(调用 list_metrics 后):

  • 了解如何筛选指标(按命名空间、Pod、服务等)
  • 在 PromQL 查询中构造标签匹配器之前

'metric' 参数应使用 list_metrics 输出中的指标名称。

  • end (string) - 标签发现的结束时间,格式为 RFC3339 或 Unix 时间戳(可选,默认为现在)

  • metric (string) - 要获取标签名称的指标名称(来自 list_metrics)。留空则获取所有指标。

  • start (string) - 标签发现的开始时间,格式为 RFC3339 或 Unix 时间戳(可选,默认为 1 小时前)

  • get_label_values - 获取特定标签的所有唯一值。

适用场景(调用 list_metrics 和 get_label_names 后):

  • 查找用于筛选的确切标签值(命名空间名称、Pod 名称等)

  • 在构造查询之前查看有哪些值 应使用 list_metrics 输出中的指标名称作为 metric 参数。

    • end(string)- 标签值发现的结束时间,格式为 RFC3339 或 Unix 时间戳(可选,默认为当前时间)
    • label(string)(必填)- 要获取其值的标签名称(来自 get_label_names)
    • metric(string)- 指标名称(来自 list_metrics),用于限定标签值的范围。留空表示所有指标。
    • start(string)- 标签值发现的开始时间,格式为 RFC3339 或 Unix 时间戳(可选,默认为 1 小时前)
  • get_series - 获取与选择器匹配的时间序列并预览基数。

何时使用(可选,在调用 list_metrics 后):

  • 查询前验证标签筛选条件是否匹配预期的时间序列
  • 检查基数,避免查询缓慢

基数指南:

  • 少于 100 个时间序列:安全
  • 100–1000 个:通常没问题
  • 超过 1000 个:添加更多标签筛选条件

选择器应使用 list_metrics 输出中的指标名称。

  • end(string)- 时间序列发现的结束时间,格式为 RFC3339 或 Unix 时间戳(可选,默认为当前时间)

  • matches(string)(必填)- 使用 list_metrics 中指标名称的 PromQL 时间序列选择器

  • start(string)- 时间序列发现的开始时间,格式为 RFC3339 或 Unix 时间戳(可选,默认为 1 小时前)

  • get_alerts - 从 Alertmanager 获取告警。

何时使用:

  • 调查问题时从此处开始:如果用户询问故障、错误、失败、服务中断、服务宕机,或集群中出现的任何异常情况
  • 用户提到特定告警名称时,使用此工具获取该告警的完整标签(namespace、pod、service 等),这些信息对于使用其他工具进一步调查至关重要
  • 查看集群中当前正在触发的告警
  • 检查哪些告警处于活动、已静默或已抑制状态
  • 在深入查看指标或日志之前了解当前情况

调查提示:告警标签通常包含使用 Prometheus 工具执行定向查询所需的确切标识符(pod 名称、namespace、job 名称)。

筛选:

  • 使用 'active' 仅筛选活动告警(未解决)
  • 使用 'silenced' 筛选已静默的告警
  • 使用 'inhibited' 筛选已抑制的告警
  • 使用 'filter' 应用标签匹配器(例如:"alertname=HighCPU")
  • 使用 'receiver' 按接收器名称筛选告警

所有筛选参数均为可选。不使用筛选条件时,将返回所有告警。

  • active(boolean)- 仅筛选活动告警(true/false,可选)

  • filter(string)- 用于筛选告警的标签匹配器(例如:'alertname=HighCPU',可选)

  • inhibited(boolean)- 仅筛选已抑制的告警(true/false,可选)

  • receiver(string)- 用于筛选告警的接收器名称(可选)

  • silenced(boolean)- 仅筛选已静默的告警(true/false,可选)

  • unprocessed(boolean)- 仅筛选尚未处理的告警(true/false,可选)

  • get_silences - 从 Alertmanager 获取静默规则。

何时使用:

  • 查看当前处于静默状态的告警
  • 检查活动、待处理或已过期的静默规则
  • 调查特定告警未触发通知的原因

筛选:

  • 使用 'filter' 应用标签匹配器,以查找特定的静默规则

静默规则根据标签匹配器临时静默告警。此工具可帮助你了解环境中当前处于静默状态的内容。

  • filter(string)- 用于筛选静默规则的标签匹配器(例如:'alertname=HighCPU',可选)
observability/otelcol
  • otelcol_list_components - 列出指定版本的可用 OpenTelemetry Collector 组件(接收器、处理器、导出器、扩展和连接器)。

    • version(string)- Collector 版本(例如:'v0.100.0')。默认为最新可用版本。
  • otelcol_get_component_schema - 获取 OpenTelemetry Collector 组件配置选项的 JSON 架构。

    • component_name (string) (必填) - 来自 otelcol_list_components 的组件名称(例如:'otlp'、'batch'、'debug')
    • component_type (string) (必填) - 组件类型:receiver、processor、exporter、extension、connector
    • version (string) - Collector 版本(例如:'v0.100.0')。默认为最新可用版本。
  • otelcol_validate_config - 根据 JSON 架构验证 OpenTelemetry Collector 组件配置。

    • component_name (string) (必填) - 来自 otelcol_list_components 的组件名称(例如:'otlp'、'batch'、'debug')
    • component_type (string) (必填) - 组件类型:receiver、processor、exporter、extension、connector
    • config (string) (必填) - 要验证的配置,以 YAML 或 JSON 字符串形式提供
    • format (string) - 配置格式:'yaml'(默认)或 'json'
    • version (string) - Collector 版本(例如:'v0.100.0')。默认为最新可用版本。
  • otelcol_get_versions - 列出可用的 OpenTelemetry Collector 版本并确定最新版本。

可观测性/追踪
  • tempo_list_instances - 列出 Kubernetes 集群中所有可用的 Tempo 实例。 在使用其他 Tempo 工具之前,请先调用此工具以发现可用的 Tempo 实例, 因为返回的 namespace、name 和 tenant 值是所有其他 Tempo 工具的必需参数。 请始终以表格形式打印此工具的输出。

  • tempo_get_trace_by_id - 根据 trace ID 从 Tempo 检索单条分布式追踪。 返回包含所有 span 的完整追踪,包括服务名称、操作名称、持续时间和属性。 如果已有特定的 trace ID(例如来自搜索结果或日志),请使用此工具。

    • end (string) - 时间范围的可选结束时间,采用 RFC 3339 格式,例如 "2025-01-02T00:00:00Z"。 缩小时间范围以提升查询性能。
    • start (string) - 时间范围的可选开始时间,采用 RFC 3339 格式,例如 "2025-01-01T00:00:00Z"。 缩小时间范围以提升查询性能。
    • tempoName (string) (必填) - 要查询的 Tempo 实例名称。使用 tempo_list_instances 发现可用的实例名称。
    • tempoNamespace (string) (必填) - 部署 Tempo 实例的 Kubernetes 命名空间。使用 tempo_list_instances 发现可用的命名空间。
    • tenant (string) - 要查询的租户。对于多租户实例,此参数为必填项。使用 tempo_list_instances 发现每个实例可用的租户。
    • traceid (string) (必填) - 要检索的 trace ID,例如 "26dad4a0e2b0dd9a440dd5ff203a24a4"。
  • tempo_search_traces - 使用 TraceQL 搜索 Tempo 中的分布式追踪。 使用此工具查找符合特定条件的追踪,例如服务名称、HTTP 状态码、持续时间或其他 span 或资源属性。

重要——“慢”或“长”追踪请求:不要猜测持续时间阈值。 首先调用此工具,不添加持续时间筛选条件,以确定延迟基线;然后使用该基线设置合理的阈值。 这两个步骤都必须执行——不要跳过第二次带持续时间筛选条件的搜索。 仅当用户提供了明确的持续时间(例如“查找耗时超过 2s 的追踪”)时,才跳过此两步流程。

  • end (string) - 时间范围的结束时间,采用 RFC 3339 格式,例如 "2025-01-01T00:00:00Z"。 当前时间请使用 "NOW"。 要搜索完整时间范围,必须同时提供 start 和 end;如果省略,则只搜索最近一小段时间的数据。
  • limit (integer) - 返回的追踪数量上限。如果未指定,则默认为服务端限制。
  • query (string) (必填) - TraceQL 查询表达式。格式: query: "{ <filters joined by &&> }"
筛选条件: - 服务名称: resource.service.name=""(字符串,使用引号) - HTTP 状态码:span.http.response.status_code=<code>(数字,不加引号) - 时长: duration>(不加引号) - 错误状态: status=error(关键字,不加引号——不要写成 status="error")

重要:status 的值(error、ok、unset)是关键字,不是字符串。请写 status=error,绝不要写 status="error"。

运算符:=、!=、>、<、>=、<=

常见属性:

  • resource.service.name(服务名称)
  • resource.k8s.namespace.name(Kubernetes 命名空间)
  • resource.k8s.deployment.name(Kubernetes 部署)
  • resource.k8s.statefulset.name(Kubernetes StatefulSet)
  • resource.k8s.daemonset.name(Kubernetes DaemonSet)
  • resource.k8s.replicaset.name(Kubernetes ReplicaSet)
  • resource.k8s.pod.name(Kubernetes Pod)
  • resource.k8s.container.name(Kubernetes 容器)
  • resource.k8s.job.name(Kubernetes Job)
  • resource.k8s.cronjob.name(Kubernetes CronJob)
  • resource.k8s.node.name(Kubernetes 节点)
  • resource.k8s.cluster.name(Kubernetes 集群)
  • span.http.response.status_code(HTTP 响应码)
  • span.http.request.method(HTTP 方法,例如 GET、POST)
  • span.url.full(请求 URL)
  • name(span 名称/操作名称,例如 "GET /api/users")
  • duration(跟踪时长,例如 100ms、2s)
  • status(跟踪状态:ok、error、unset)

注意:较旧的插桩可能使用旧版 HTTP 属性名称(例如使用 span.http.status_code 代替 span.http.response.status_code)。 如果查询没有返回结果,请尝试使用 tempo_search_tags 检查存在哪些属性。

重要:

  • 始终将筛选条件括在花括号 { } 中。
  • 不要使用 SQL、PromQL 或 Lucene 语法。
  • 不要省略属性名称中的 "resource." 或 "span." 前缀。
  • 当用户提到 Kubernetes 资源类型(deployment、pod、namespace 等)时,请使用相应的 resource.k8s.* 属性,而不是 resource.service.name。

示例:

  • { resource.service.name="frontend" }
  • { resource.k8s.deployment.name="checkout" && span.http.response.status_code>=500 }
  • { status=error && duration>2s }

如果不确定要按哪些属性筛选,请先使用 tempo_search_tags 查找可用属性,再构建查询。

  • spss (integer) - 每条 trace 最多返回的匹配 span 数量。

  • start (string) - 时间范围的起始时间,采用 RFC 3339 格式,例如 "2025-01-01T00:00:00Z"。 使用 "NOW" 表示当前时间。 应同时提供 start 和 end,才能搜索完整时间范围;如果省略,则只搜索近期数据中的一个较小时间窗口。

  • tempoName (string) (必填) - 要查询的 Tempo 实例名称。使用 tempo_list_instances 查找可用的实例名称。

  • tempoNamespace (string) (必填) - 部署 Tempo 实例的 Kubernetes 命名空间。使用 tempo_list_instances 查找可用的命名空间。

  • tenant (string) - 要查询的租户。对于多租户实例,此参数为必填项。使用 tempo_list_instances 查找每个实例的可用租户。

  • tempo_search_tags - 列出 Tempo 中按作用域分组的可用标签名称(属性键)。 使用此工具可发现可用于通过 tempo_search_traces 构建 TraceQL 查询的属性。 例如,此工具可能会显示诸如“service.name”(位于“resource”作用域)或“http.response.status_code”(位于“span”作用域)之类的标签名称。 若要在 TraceQL 查询中使用这些标签,请在前面加上作用域,例如“resource.service.name”或“span.http.response.status_code”。

    • end (string) - 时间范围的可选结束时间(采用 RFC 3339 格式,例如“2025-01-01T00:00:00Z”),用于筛选列出标签时纳入考虑的追踪。
    • limit (integer) - 每个作用域最多返回的标签名称数量。
    • maxStaleValues (integer) - 搜索提前停止前,连续未发现新标签名称的数据块数量上限。值越大,搜索越全面,但速度越慢。
    • query (string) - 可选的 TraceQL 查询,用于筛选列出标签时纳入考虑的追踪, 例如,{ resource.service.name="payment-service" },只显示来自“payment-service”服务的追踪中存在的标签。
    • scope (string) - 将标签筛选到特定作用域。可选值: “resource”(服务级属性,例如 service.name), “span”(单个 span 的属性,例如 http.response.status_code), “intrinsic”(内置字段,例如 duration、status、name)。 若省略,则返回所有作用域中的标签。
    • start (string) - 时间范围的可选起始时间(采用 RFC 3339 格式,例如“2025-01-01T00:00:00Z”),用于筛选列出标签时纳入考虑的追踪。
    • tempoName (string) (required) - 要查询的 Tempo 实例名称。使用 tempo_list_instances 可发现可用的实例名称。
    • tempoNamespace (string) (required) - 部署 Tempo 实例的 Kubernetes 命名空间。使用 tempo_list_instances 可发现可用的命名空间。
    • tenant (string) - 要查询的租户。对于多租户实例,此参数为必填项。使用 tempo_list_instances 可发现每个实例的可用租户。
  • tempo_search_tag_values - 列出 Tempo 中某个特定标签(属性键)的已知值。 使用此工具可发现某个标签对应的值,例如查找所有服务名称(“resource.service.name”的值)或所有 HTTP 方法(“span.http.request.method”的值)。 这有助于通过 tempo_search_traces 构建准确的 TraceQL 查询。

    • end (string) - 时间范围的可选结束时间(采用 RFC 3339 格式,例如“2025-01-01T00:00:00Z”),用于筛选列出值时纳入考虑的追踪。
    • limit (integer) - 最多返回的标签值数量。
    • maxStaleValues (integer) - 搜索提前停止前,连续未发现新值的数据块数量上限。值越大,搜索越全面,但速度越慢。
    • query (string) - 可选的 TraceQL 查询,用于筛选列出值时纳入考虑的追踪, 例如,{ resource.service.name="payment-service" },只显示来自“payment-service”服务的追踪中的标签值。
    • start (string) - 时间范围的可选起始时间(采用 RFC 3339 格式,例如“2025-01-01T00:00:00Z”),用于筛选列出值时纳入考虑的追踪。
    • tag (string) (required) - 要获取值的完整限定标签名称,包含作用域前缀,例如“resource.service.name”或“span.http.response.status_code”。 使用 tempo_search_tags 可发现可用的标签名称。
    • tempoName (string) (required) - 要查询的 Tempo 实例名称。使用 tempo_list_instances 可发现可用的实例名称。
    • tempoNamespace (string) (required) - 部署 Tempo 实例的 Kubernetes 命名空间。使用 tempo_list_instances 可发现可用的命名空间。
    • tenant (string) - 要查询的租户。对于多租户实例,此参数为必填项。使用 tempo_list_instances 可发现每个实例的可用租户。
tekton - **tekton_pipeline_start** - 通过创建引用 Tekton Pipeline 的 PipelineRun 来启动 Tekton Pipeline - `name` (`string`) **(required)** - 要启动的 Pipeline 名称 - `namespace` (`string`) - Pipeline 所属的命名空间 - `params` (`object`) - 传递给 Pipeline 的参数值。键为参数名称;值可以是字符串、字符串数组或对象(字符串到字符串的映射),具体取决于 Pipeline 规范中定义的参数类型
  • tekton_pipelinerun_lifecycle - 管理 Tekton PipelineRun 的生命周期:使用相同的规范重新启动它,或将 spec.status 设为 Cancelled 来取消它。

    • action (string) (required) - 要执行的生命周期操作:'restart' 使用相同的规范创建新的 PipelineRun;'cancel' 将 spec.status 设为 Cancelled。
    • name (string) (required) - 要管理的 PipelineRun 名称
    • namespace (string) - PipelineRun 所属的命名空间
  • tekton_pipelinerun_logs - 获取 Tekton PipelineRun 所拥有的所有 TaskRun 的日志。无需手动查找 Pod,即可使用此工具检查 PipelineRun 的执行输出。

    • name (string) (required) - 要获取日志的 PipelineRun 名称
    • namespace (string) - PipelineRun 所属的命名空间
    • step (string) - 要包含在匹配的 TaskRun 中的步骤名称
    • tail (integer) - 从每个容器日志末尾获取的行数(默认值:100)
    • task (string) - 用于筛选的 Pipeline 任务名称(tekton.dev/pipelineTask 标签)
  • tekton_task_start - 通过创建引用 Tekton Task 的 TaskRun 来启动 Tekton Task

    • name (string) (required) - 要启动的 Task 名称
    • namespace (string) - Task 所属的命名空间
    • params (object) - 传递给 Task 的参数值。键为参数名称;值可以是字符串、字符串数组或对象(字符串到字符串的映射),具体取决于 Task 规范中定义的参数类型
  • tekton_taskrun_restart - 使用相同的规范创建新的 TaskRun,以重新启动 Tekton TaskRun

    • name (string) (required) - 要重新启动的 TaskRun 名称
    • namespace (string) - TaskRun 所属的命名空间
  • tekton_taskrun_logs - 通过解析 Tekton TaskRun 底层的 Pod,获取其日志

    • name (string) (required) - 要获取日志的 TaskRun 名称
    • namespace (string) - TaskRun 所属的命名空间
    • step (string) - 要包含的步骤名称。若省略,则返回所有步骤和 sidecar 的日志
    • tail (integer) - 从日志末尾获取的行数(可选,默认值:100)

某些工具需要额外的集群 API、资源实例或权限。请参阅工具要求,了解可用性前提条件。

提示词
core
  • cluster-health-check - 对 Kubernetes/OpenShift 集群进行全面的健康状况评估
    • namespace (string) - 可选,用于限定健康检查范围的命名空间(默认值:所有命名空间)
    • check_events (string) - 是否包含近期警告/错误事件(true/false,默认值:true)
kiali
  • mesh-list-applications - 列出网格命名空间中的应用

    • namespace (string) - 可选,用于筛选应用的命名空间(默认值:所有命名空间)
  • list-istio-config - 列出网格命名空间中的 Istio 配置资源

    • namespace (string) - 可选,用于筛选 Istio 配置的命名空间(默认值:所有命名空间)
  • mesh-list-namespaces - 列出所有命名空间及其 sidecar 注入状态和 Istio 标签

  • mesh-list-services - 列出网格命名空间中的服务

    • namespace (string) - 可选,用于筛选服务的命名空间(默认值:所有命名空间)
  • mesh-list-workloads - 列出网格命名空间中的工作负载

    • namespace (string) - 可选,用于筛选工作负载的命名空间(默认值:所有命名空间)
- **mesh-health-check** - 全面评估 Istio 服务网格的运行状况,包括控制平面和数据平面的状态 - `namespace` (`string`) - 可选,指定要重点检查的命名空间(默认:所有命名空间)
  • mesh-topology - 显示服务网格拓扑,包括控制平面组件和集群连接情况

  • traffic-topology - 分析服务网格流量拓扑,展示服务依赖关系、流量流向和通信模式

    • namespaces (string) (required) - 要纳入图表的命名空间列表,以逗号分隔;或填写 'all' 以纳入所有可访问的网格命名空间
  • service-troubleshoot - 使用日志、追踪和 Istio 配置排查服务错误,找出根本原因

    • namespace (string) (required) - 服务部署所在的命名空间
    • service (string) (required) - 要排查的服务名称
    • workload (string) - 可选,要获取日志的工作负载或 Pod 名称(如省略,则使用服务名称)
  • trace-analysis - 分析服务的分布式追踪,以找出延迟瓶颈、错误来源和耗时较长的 Span

    • namespace (string) (required) - 服务部署所在的命名空间
    • service (string) (required) - 要调查追踪信息的服务名称
  • istio-config-review - 检查并验证命名空间中的 Istio 配置,查找配置错误和违反最佳实践的情况

    • namespace (string) (required) - 要检查 Istio 配置的命名空间
kubevirt
  • vm-troubleshoot - 生成分步故障排查指南,用于诊断 KubeVirt VirtualMachine 问题

    • namespace (string) (required) - 要排查的 VirtualMachine 所在的命名空间
    • name (string) (required) - 要排查的 VirtualMachine 名称
  • windows-golden-image - 指导如何通过 KubeVirt windows-efi-installer Tekton 流水线创建 Windows 黄金镜像

    • winImageDownloadURL (string) (required) - Microsoft Windows ISO 下载 URL(必须以 https:// 开头)
    • namespace (string) - PipelineRun 的目标命名空间
    • windowsVersion (string) - Windows 版本:10、11、2k22(默认)或 2k25
    • pipelineVersion (string) - 流水线版本(默认:latest)。如有需要,可使用特定版本,例如 0.25.0
  • hco-status - 生成 HyperConverged Cluster Operator (HCO) 状态报告,该 Operator 管理 KubeVirt 及相关组件

tekton
  • pipeline-troubleshoot - 收集 PipelineRun 状态、其 Pipeline 定义、TaskRun、失败或出错步骤的日志、警告事件、Pipeline-as-Code Repository,以及 TektonConfig 上下文,用于排查 Tekton 问题
    • namespace (string) (required) - 要排查的 PipelineRun 所在的命名空间
    • name (string) (required) - 要排查的 PipelineRun 名称
资源
资源模板

Helm Chart

Helm Chart 可简化 Kubernetes MCP 服务的部署。

helm install kubernetes-mcp-server oci://ghcr.io/containers/charts/kubernetes-mcp-server

有关 OAuth、遥测和资源限制等配置选项,请参阅 chart README 和 values.yaml。

💬 社区

加入讨论,与其他用户和贡献者交流:

  • Slack - 在 CNCF Slack 工作区的 #kubernetes-mcp-server 频道中提问、分享反馈并讨论 Kubernetes MCP 服务。如果你还不是成员,可以申请邀请。

🧑‍💻 开发

使用 mcp-inspector 运行

编译项目,并使用 mcp-inspector 运行 Kubernetes MCP 服务,以检查 MCP 服务。

# Compile the project
make build
# Run the Kubernetes MCP server with mcp-inspector
npx @modelcontextprotocol/inspector@latest $(pwd)/kubernetes-mcp-server

mcp-name: io.github.containers/kubernetes-mcp-server

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。