Skip to main content
Glama

쿠버네티스 MCP 서버

표준화된 인터페이스를 통해 Kubernetes 클러스터와 상호 작용하기 위한 도구를 제공하는 Kubernetes 모델 컨텍스트 프로토콜(MCP) 서버입니다.

특징

  • API 리소스 검색 : Kubernetes 클러스터에서 사용 가능한 모든 API 리소스를 가져옵니다.

  • 리소스 목록 : 선택적 네임스페이스 및 레이블 필터링을 사용하여 모든 유형의 리소스를 나열합니다.

  • 리소스 세부 정보 : 특정 Kubernetes 리소스에 대한 자세한 정보를 얻으세요

  • 리소스 설명 : Kubernetes 리소스에 대한 포괄적인 설명을 얻으세요

  • Pod 로그 : 특정 Pod에서 로그 검색

  • 노드 메트릭 : 특정 노드에 대한 리소스 사용 메트릭 가져오기

  • Pod 메트릭 : 특정 Pod에 대한 CPU 및 메모리 메트릭 가져오기

  • 이벤트 목록 : 네임스페이스 내의 이벤트나 특정 리소스에 대한 이벤트를 나열합니다.

  • 리소스 생성 : 매니페스트에서 새로운 Kubernetes 리소스를 생성합니다.

  • 표준화된 인터페이스 : 일관된 도구 상호 작용을 위해 MCP 프로토콜을 사용합니다.

  • 유연한 구성 : 다양한 Kubernetes 컨텍스트 및 리소스 범위 지원

Related MCP server: MCP Server

필수 조건

  • 1.20 이상으로 가세요

  • Kubernetes 클러스터에 대한 액세스

  • 적절한 클러스터 액세스로 구성된 kubectl

설치

  1. 저장소를 복제합니다.

지엑스피1

  1. 종속성 설치:

go mod download
  1. 서버를 빌드하세요:

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

용법

서버 시작

서버를 실행합니다:

./k8s-mcp-server

서버가 시작되어 stdin/stdout에서 MCP 프로토콜 메시지를 수신합니다.

사용 가능한 도구

1. getAPIResources

Kubernetes 클러스터에서 사용 가능한 모든 API 리소스를 검색합니다.

매개변수:

  • 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

kubectl describe 와 유사하게, 주어진 종류와 이름을 기반으로 Kubernetes 클러스터의 리소스를 설명합니다.

매개변수:

  • Kind (문자열, 필수): 설명할 리소스 종류(예: "Pod", "Deployment")

  • name (문자열, 필수): 설명할 리소스의 이름

  • namespace (문자열): 리소스의 네임스페이스(네임스페이스가 지정된 리소스인 경우)

예:

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

5. getPodsLogs

Kubernetes 클러스터의 특정 Pod 로그를 검색합니다.

매개변수:

  • Name (문자열, 필수): 로그를 가져올 Pod의 이름입니다.

  • 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 클러스터의 특정 Pod에 대한 CPU 및 메모리 메트릭을 검색합니다.

매개변수:

  • namespace (문자열, 필수): Pod의 네임스페이스입니다.

  • podName (문자열, 필수): Pod의 이름입니다.

예:

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

8. getEvents

Kubernetes 클러스터의 특정 네임스페이스 또는 리소스에 대한 이벤트를 검색합니다.

매개변수:

  • namespace (문자열): 이벤트를 가져올 네임스페이스입니다. 생략하면 모든 네임스페이스의 이벤트가 고려됩니다(RBAC에서 허용하는 경우).

  • resourceName (문자열): 이벤트를 필터링할 특정 리소스의 이름(예: Pod 이름)입니다.

  • resourceKind (문자열): resourceName 제공된 경우 특정 리소스의 종류(예: "Pod")입니다.

예(네임스페이스 이벤트):

{ "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

YAML 또는 JSON 매니페스트에서 Kubernetes 클러스터에 새 리소스를 만듭니다.

매개변수:

  • manifest (문자열, 필수): 생성할 리소스의 YAML 또는 JSON 매니페스트입니다.

  • namespace (문자열, 선택 사항): 리소스를 생성할 네임스페이스입니다. 매니페스트에 네임스페이스가 포함된 경우, 이 매개변수를 생략하거나 이를 재정의하는 데 사용할 수 있습니다(서버 구현에 따라 동작이 달라질 수 있음).

예:

{ "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. handlers/handlers.go 에 새 도구 정의 함수(예: MyNewTool() mcp.Tool )를 만듭니다.

  2. handlers/handlers.go 에 도구 핸들러 함수(예: MyNewHandler(client *k8s.Client) func(...) )를 구현합니다.

  3. s.AddTool() 사용하여 main.go 에 도구와 해당 핸들러를 등록합니다.

기여하다

참여를 환영합니다! 이 프로젝트에 기여하는 방법에 대한 자세한 내용은 CONTRIBUTING.md를 참조하세요.

특허

gholizade.net@gmail.com

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여되었습니다. 자세한 내용은 라이선스 파일을 참조하세요.

-
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