Skip to main content
Glama

MCP-сервер Kubernetes

Сервер протокола контекста модели Kubernetes (MCP), предоставляющий инструменты для взаимодействия с кластерами Kubernetes через стандартизированный интерфейс.

Функции

  • Обнаружение ресурсов API : получите все доступные ресурсы API в вашем кластере Kubernetes.

  • Список ресурсов : список ресурсов любого типа с дополнительной фильтрацией пространств имен и меток.

  • Сведения о ресурсах : получите подробную информацию о конкретных ресурсах Kubernetes.

  • Описание ресурса : получите полное описание ресурсов Kubernetes.

  • Журналы модулей : извлечение журналов из определенных модулей.

  • Метрики узлов : получение метрик использования ресурсов для определенных узлов.

  • Метрики Pod : получение метрик ЦП и памяти для определенных модулей.

  • Список событий : список событий в пространстве имен или для определенного ресурса.

  • Создание ресурсов : создание новых ресурсов Kubernetes из манифеста.

  • Стандартизированный интерфейс : использует протокол MCP для согласованного взаимодействия инструментов.

  • Гибкая конфигурация : поддерживает различные контексты Kubernetes и области действия ресурсов.

Related MCP server: MCP Server

Предпосылки

  • Перейти к версии 1.20 или более поздней

  • Доступ к кластеру Kubernetes

  • kubectl настроен с соответствующим доступом к кластеру

Установка

  1. Клонируйте репозиторий:

git clone https://github.com/reza-gholizade/k8s-mcp-server.git cd k8s-mcp-server
  1. Установить зависимости:

go mod download
  1. Сборка сервера:

go build -o k8s-mcp-server main.go

Использование

Запуск сервера

Запустите сервер:

./k8s-mcp-server

Сервер запустится и будет прослушивать stdin/stdout на предмет сообщений протокола MCP.

Доступные инструменты

1. getAPIResources

Извлекает все доступные ресурсы API в кластере Kubernetes.

Параметры:

  • includeNamespaceScoped (логическое значение): включать ли ресурсы области пространства имен (по умолчанию true)

  • includeClusterScoped (логическое значение): включать ли ресурсы кластерной области (по умолчанию true)

Пример:

{ "jsonrpc": "2.0", "id": 1, "method": "getAPIResources", "params": { "arguments": { "includeNamespaceScoped": true, "includeClusterScoped": true } } }

2. listResources

Перечисляет все экземпляры определенного типа ресурса.

Параметры:

  • Kind (строка, обязательно): тип ресурса для списка (например, «Pod», «Deployment»).

  • namespace (строка): пространство имен, из которого нужно вывести список ресурсов (если не указано иное, выводятся списки по всем пространствам имен для ресурсов с пространством имен)

  • labelSelector (строка): Фильтрация ресурсов по селектору меток

Пример:

{ "jsonrpc": "2.0", "id": 1, "method": "listResources", "params": { "arguments": { "Kind": "Pod", "namespace": "default", "labelSelector": "app=nginx" } } }

3. getResource

Извлекает подробную информацию о конкретном ресурсе.

Параметры:

  • kind (строка, обязательно): тип ресурса, который необходимо получить (например, «Pod», «Deployment»).

  • name (строка, обязательно): имя ресурса, который нужно получить

  • namespace (строка): пространство имен ресурса (если это ресурс с пространством имен)

Пример:

{ "jsonrpc": "2.0", "id": 1, "method": "getResource", "params": { "arguments": { "kind": "Pod", "name": "nginx-pod", "namespace": "default" } } }

4. describeResource

Описывает ресурс в кластере Kubernetes на основе заданного типа и имени, аналогично kubectl describe .

Параметры:

  • Kind (строка, обязательно): тип описываемого ресурса (например, «Pod», «Deployment»).

  • name (строка, обязательно): имя ресурса для описания

  • namespace (строка): пространство имен ресурса (если это ресурс с пространством имен)

Пример:

{ "jsonrpc": "2.0", "id": 1, "method": "describeResource", "params": { "arguments": { "Kind": "Pod", "name": "nginx-pod", "namespace": "default" } } }

5. getPodsLogs

Извлекает журналы определенного модуля в кластере Kubernetes.

Параметры:

  • Name (строка, обязательно): Имя модуля, из которого необходимо получить журналы.

  • namespace (строка): пространство имен модуля (если это ресурс с пространством имен).

Пример:

{ "jsonrpc": "2.0", "id": 1, "method": "getPodsLogs", "params": { "arguments": { "Name": "my-app-pod-12345", "namespace": "production" } } }

6. getNodeMetrics

Извлекает метрики использования ресурсов для определенного узла в кластере Kubernetes.

Параметры:

  • Name (строка, обязательно): имя узла, из которого необходимо получить метрики.

Пример:

{ "jsonrpc": "2.0", "id": 1, "method": "getNodeMetrics", "params": { "arguments": { "Name": "worker-node-1" } } }

7. getPodMetrics

Извлекает показатели ЦП и памяти для определенного модуля в кластере Kubernetes.

Параметры:

  • namespace (строка, обязательно): пространство имен модуля.

  • podName (строка, обязательно): Имя модуля.

Пример:

{ "jsonrpc": "2.0", "id": 1, "method": "getPodMetrics", "params": { "arguments": { "namespace": "default", "podName": "my-app-pod-67890" } } }

8. getEvents

Извлекает события для определенного пространства имен или ресурса в кластере Kubernetes.

Параметры:

  • namespace (string): Пространство имен, из которого нужно получить события. Если не указано, рассматриваются события из всех пространств имен (если разрешено RBAC).

  • resourceName (строка): имя определенного ресурса (например, имя Pod), по которому необходимо фильтровать события.

  • resourceKind (строка): тип конкретного ресурса (например, «Pod»), если указано resourceName .

Пример (события пространства имен):

{ "jsonrpc": "2.0", "id": 1, "method": "getEvents", "params": { "arguments": { "namespace": "default" } } }

Пример (события ресурсов):

{ "jsonrpc": "2.0", "id": 1, "method": "getEvents", "params": { "arguments": { "namespace": "production", "resourceName": "my-app-pod-12345", "resourceKind": "Pod" } } }

9. createorUpdateResource

Создает новый ресурс в кластере Kubernetes из манифеста YAML или JSON.

Параметры:

  • manifest (строка, обязательно): манифест YAML или JSON ресурса, который необходимо создать.

  • namespace (string, необязательно): Пространство имен, в котором создается ресурс. Если манифест содержит пространство имен, этот параметр можно опустить или использовать для его переопределения (поведение может зависеть от реализации сервера).

Пример:

{ "jsonrpc": "2.0", "id": 1, "method": "createResource", "params": { "arguments": { "namespace": "default", "manifest": "apiVersion: v1\nkind: Pod\nmetadata:\n name: my-new-pod\nspec:\n containers:\n - name: nginx\n image: nginx:latest" } } }

Разработка

Структура проекта

. ├── handlers/ # Tool handlers │ └── handlers.go # Implementation of MCP tools ├── pkg/ # Internal packages │ └── k8s/ # Kubernetes client implementation ├── main.go # Server entry point ├── go.mod # Go module definition └── go.sum # Go module checksums

Добавление новых инструментов

Чтобы добавить новый инструмент:

  1. Создайте новую функцию определения инструмента (например, MyNewTool() mcp.Tool ) в handlers/handlers.go

  2. Реализуйте функцию обработчика инструмента (например, MyNewHandler(client *k8s.Client) func(...) ) в handlers/handlers.go

  3. Зарегистрируйте инструмент и его обработчик в main.go с помощью s.AddTool()

Внося вклад

Вклады приветствуются! Подробности о том, как внести вклад в этот проект, см. на сайте CONTRIBUTING.md.

Лицензия

gholizade.net@gmail.com

Данный проект лицензирован по лицензии MIT — подробности см. в файле LICENSE .

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/reza-gholizade/k8s-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server