MCP ile çoklu Kubernetes kümelerini yönetmek ve işletmek için kapsamlı bir çözüm sunar. SDK olarak kendi projenize entegre edebileceğiniz ve yaygın DevOps ile geliştirme senaryolarını kapsayan yaklaşık 50 built-in tool içerir. Hem standart hem de CRD kaynakları destekler.
Claude Desktop config.json'a ekle
{
"mcpServers": {
"weibaohui-kom": {
"command": "node",
"args": [
"~/.mcp/kom/index.js"
]
}
}
} Kaynak kodu al ve yerel olarak çalıştır
git clone https://github.com/weibaohui/kom.git ~/.mcp/kom
cd ~/.mcp/kom kom Kubernetes işlemleri için bir araçtır; SDK seviyesinde kubectl ve client-go kullanım kapsüllemesidir.
Kubernetes kaynaklarını yönetmek için bir dizi işlev sağlar; kaynak oluşturma, güncelleme, silme ve alma işlemleri dahildir. Bu proje, Kubernetes kaynak türlerinin çeşitli işlemlerini destekler ve özel kaynak tanımlarını (CRD) işleyebilir.
kom kullanarak, kaynaklarda CRUD işlemleri, günlük alma ve POD içi dosya işlemleri gibi işlemleri kolayca gerçekleştirebilir, hatta SQL sorguları kullanarak k8s kaynaklarını sorgulayabilir ve yönetebilirsiniz.
k8m kom ve amis tabanlı hafif bir Kubernetes yönetim aracıdır; tek dosya, çoklu platform mimarisi desteği.
./k8m komutu kullanarak başlatın, http://127.0.0.1:3618 adresine erişin.import (
"github.com/weibaohui/kom"
"github.com/weibaohui/kom/callbacks"
)
func main() {
// Callback'i kaydet, mutlaka önce kaydedin
callbacks.RegisterInit()
// Kümeleri kaydet
defaultKubeConfig := os.Getenv("KUBECONFIG")
if defaultKubeConfig == "" {
defaultKubeConfig = filepath.Join(homedir.HomeDir(), ".kube", "config")
}
_, _ = kom.Clusters().RegisterInCluster()
_, _ = kom.Clusters().RegisterByPathWithID(defaultKubeConfig, "default")
kom.Clusters().Show()
// Diğer mantık
}
Stdio ve sse iki modunu destekler Çoklu tools desteği. Herhangi bir kaynağın sorgulama listesi silme tanımlaması işlemleri ve POD günlük okuma işlemleri dahildir.
// Bir satırlık kod MCP Server başlatır
mcp.RunMCPServer("kom mcp server", "0.0.1", 9096)
# Kaynak kodu başlat
go build main.go
//kom olarak derle
Başlatıldıktan sonra iki modu destekler; biri stdio, diğeri sse. k8s yönetimi varsayılan olarak KUBECONFIG env ortam değişkenini kullanır.
# KUBECONFIG ortam değişkenini ayarla
export KUBECONFIG = /Users/xxx/.kube/config
# Çalıştır
./kom
# MCP Server erişim adresi
http://IP:9096/sse
Bu noktada, derlenen ikili dosya stdio modu olarak kullanılabilir. http://IP:9096/sse modu, sse modu olarak kullanılabilir.
Stdio\sse iki tür entegrasyon yolunu destekler. MCP araç entegrasyonuna uygun; Cursor, Claude Desktop (yalnızca stdio modunu destekler), Windsurf vb., ayrıca bu yazılımların UI işlem arayüzü kullanarak ekleyebilirsiniz.
{
"mcpServers": {
"kom": {
"type": "sse",
"url": "http://IP:9096/sse"
}
}
}
{
"mcpServers": {
"k8m": {
"command": "path/to/kom",
"args": []
}
}
}
| Kategori | Metot | Açıklama |
|---|---|---|
| Küme Yönetimi (1) | list_k8s_clusters |
Tüm kayıtlı Kubernetes kümelerini listele |
| DaemonSet Yönetimi (1) | restart_k8s_daemonset |
Küme, namespace ve ad ile DaemonSet yeniden başlat |
| Deployment Yönetimi (12) | scale_k8s_deployment |
Küme, namespace, ad ile Deployment genişlet/daralt, replica sayısını ayarla |
restart_k8s_deployment |
Küme, namespace ve ad ile Deployment yeniden başlat | |
stop_k8s_deployment |
Deployment'ı durdur | |
restore_k8s_deployment |
Deployment replica sayısını geri yükle | |
update_k8s_deployment_image_tag |
Deployment içindeki container görüntü Tag'ını güncelle | |
get_k8s_deployment_rollout_history |
Güncelleme geçmişini sorgula | |
undo_k8s_deployment_rollout |
Geri al | |
pause_k8s_deployment_rollout |
Güncellemeyi duraklatır | |
resume_k8s_deployment_rollout |
Güncellemeyi devam ettir | |
get_k8s_deployment_rollout_status |
Güncelleme durumunu sorgula | |
get_k8s_deployment_hpa_list |
Deployment'ın HPA listesini sorgula | |
list_k8s_deploy_event |
Deployment ile ilgili olayları listele | |
| Dinamik Kaynak Yönetimi (CRD, 8) | get_k8s_resource |
Küme, namespace ve ad ile Kubernetes kaynak ayrıntılarını al |
describe_k8s_resource |
Küme, namespace ve ad ile Kubernetes kaynak ayrıntılarını al | |
delete_k8s_resource |
Küme, namespace ve ad ile Kubernetes kaynağını sil | |
list_k8s_resource |
Küme ve kaynak türüne göre Kubernetes kaynaklarını listele | |
annotate_k8s_resource |
Kubernetes kaynağına açıklama ekle veya sil | |
label_k8s_resource |
Kubernetes kaynağına etiket ekle veya sil | |
patch_k8s_resource |
Küme, namespace ve ad ile Kubernetes kaynağını güncelle | |
GetDynamicResource |
Dinamik kaynağı al | |
| Node Yönetimi (11) | taint_k8s_node |
Node'a leke ekle |
untaint_k8s_node |
Node'dan lekeyi kaldır | |
cordon_k8s_node |
Node'u planlanabilir olmayan durumuna ayarla | |
uncordon_k8s_node |
Node'u planlanabilir durumuna ayarla | |
drain_k8s_node |
Node'daki Pod'ları boşalt ve yeni Pod planlama engelle | |
get_k8s_node_ip_usage |
Node IP kaynak kullanımını sorgula | |
list_k8s_node |
Node listesini al | |
get_k8s_top_node |
Node CPU ve bellek kaynak kullanım ranking listesini al | |
get_k8s_pod_count_running_on_node |
Belirli Node'da çalışan Pod sayısı istatistiklerini sorgula | |
get_k8s_node_resource_usage |
Node kaynak kullanımı istatistiklerini sorgula | |
TaintNodeTool |
Node'a leke ekle | |
| Olay Yönetimi (1) | list_k8s_event |
Küme ve namespace'ye göre Kubernetes olaylarını listele |
| Ingress Yönetimi (1) | set_default_k8s_ingressclass |
IngressClass'ı varsayılan olarak ayarla |
| Pod Yönetimi (18) | run_command_in_k8s_pod |
Pod içinde komut çalıştır |
list_k8s_pod_event |
Pod ile ilgili olayları listele | |
list_files_in_k8s_pod |
Pod'da belirtilen yoldaki dosya listesini al | |
list_pod_all_files |
Pod'da belirtilen yoldaki tüm dosya listesini al; alt dizin dahil | |
delete_k8s_pod |
Pod'u sil | |
delete_pod_file |
Pod'da belirtilen dosyayı sil | |
get_k8s_pod_linked_env |
Pod çalışma zamanı ortam değişken bilgilerini al | |
get_pod_linked_env_from_yaml |
Pod yaml tanımı aracılığıyla Pod tanımında ortam değişken bilgilerini al | |
get_k8s_pod_linked_services |
Pod ile ilişkili Service'i al | |
get_pod_linked_ingresses |
Pod ile ilişkili Ingress'i al | |
get_pod_linked_endpoints |
Pod ile ilişkili Endpoints'i al | |
list_k8s_pod |
Pod listesini al | |
get_k8s_top_pod |
Pod CPU bellek kaynak kullanım ranking listesini al | |
ListPodFilesTool |
Pod dosyalarını listele | |
ListAllPodFilesTool |
Pod'un tüm dosyalarını listele | |
DeletePodFileTool |
Pod dosyasını sil | |
UploadPodFileTool |
Pod dosyası yükle | |
GetPodLogsTool |
Pod günlüğünü al | |
describe_k8s_pod |
Pod container grubunu tanımla | |
| Depolama Yönetimi (3) | set_k8s_default_storageclass |
StorageClass'ı varsayılan olarak ayarla |
get_k8s_storageclass_pvc_count |
StorageClass altındaki PVC sayısını al | |
get_k8s_storageclass_pv_count |
StorageClass altındaki PV sayısını al | |
| YAML Yönetimi (2) | apply_k8s_yaml |
YAML ile Kubernetes kaynağı oluştur veya güncelle |
delete_k8s_yaml |
YAML ile Kubernetes kaynağını sil |
mcp.RunMCPServer("kom mcp server", "0.0.1", 3619)
{
"mcpServers": {
"k8m": {
"command": "path/to/kom",
"args": []
}
}
}
// InCluster kümesini kaydet, adı InCluster
kom.Clusters().RegisterInCluster()
// Ad ile iki küme kaydet, sırasıyla orb ve docker-desktop adlandırıldı
kom.Clusters().RegisterByPathWithID("/Users/kom/.kube/orb", "orb")
kom.Clusters().RegisterByPathWithID("/Users/kom/.kube/config", "docker-desktop")
// Default adında bir küme kaydet, sonra kom.DefaultCluster() bu kümeyi döndürecektir.
kom.Clusters().RegisterByPathWithID("/Users/kom/.kube/config", "default")
// EKS küme bilgisini yapılandır
config := aws.EKSAuthConfig{
AccessKey: "XXX", // AWS Access Key ID
SecretAccessKey: "yyy", // AWS Secret Access Key
Region: "us-east-1", // AWS bölgesi
ClusterName: "k8m", // EKS küme adı
}
// AWS EKS kümesini kaydet
_, err := kom.Clusters().RegisterAWSCluster(config)
if err != nil {
fmt.Printf("EKS kümesi kayıt başarısız: %v", err)
return
}
// Kayıtlı EKS kümesini kullan
var pods []corev1.Pod
clusterID := fmt.Sprintf("%s-%s", config.Region, config.ClusterName) // Küme ID formatı: {Region}-{ClusterName}
err = kom.Cluster(clusterID).Resource(&corev1.Pod{}).Namespace("kube-system").List(&pods).Error
AWS EKS Küme Kayıt Açıklaması:
AccessKey: AWS erişim anahtarı IDSecretAccessKey: AWS gizli erişim anahtarıRegion: AWS bölgesi; us-east-1, ap-southeast-1 vb.ClusterName: EKS küme adıRoleARN: (isteğe bağlı) Üstlenilecek IAM rol ARN'i, çapraz hesap erişimi için{Region}-{ClusterName}kom.Clusters().Show()
// Varsayılan kümeyi kullan, küme içi kube-system namespace'indeki pod'u sorgula
// Önce ID "InCluster" olan örneğini döndürmeye çalışır;
// yoksa, ID "default" olan örneğini döndürmeye çalışır.
// Yukarıdaki adların ikisi de yoksa, clusters listesindeki herhangi bir örneği döndür.
var pods []corev1.Pod
err = kom.DefaultCluster().Resource(&corev1.Pod{}).Namespace("kube-system").List(&pods).Error
// orb kümesini seç, küme içi kube-system namespace'indeki pod'u sorgula
var pods []corev1.Pod
err = kom.Cluster("orb").Resource(&corev1.Pod{}).Namespace("kube-system").List(&pods).Error
Bir Deployment nesnesi tanımlayın ve kom aracılığıyla kaynak işlemleri gerçekleştirin.
var item v1.Deployment
var items []v1.Deployment
item = v1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: "nginx",
Namespace: "default",
},
Spec: v1.DeploymentSpec{
Template: corev1.PodTemplateSpec{
Spec: corev1.PodSpec{
Containers: []corev1.Container{
{Name: "test", Image: "nginx:1.14.2"},
},
},
},
},
}
err := kom.DefaultCluster().Resource(&item).Create(&item).Error
// default namespace'indeki nginx adlı Deployment'ı sorgula
err := kom.DefaultCluster().Resource(&item).Namespace("default").Name("nginx").Get(&item).Error
// default namespace'indeki nginx adlı Deployment'ı sorgula ve 5 saniye cache kullan
// 5 saniye içinde tekrar sorgulanmaz; toplu işlem, yüksek frekans işlem altında cache etkinleştirmeyi önerilir
err := kom.DefaultCluster().Resource(&item).Namespace("default").Name("nginx").WithCache(5 * time.Second).Get(&item).Error
// default namespace'indeki Deployment listesini sorgula
err := kom.DefaultCluster().Resource(&item).Namespace("default").List(&items).Error
// default, kube-system namespace'indeki Deployment listesini sorgula
err := kom.DefaultCluster().Resource(&item).Namespace("default","kube-system").List(&items).Error
// Tüm namespace'lerdeki Deployment listesini sorgula
err := kom.DefaultCluster().Resource(&item).Namespace("*").List(&items).Error
err := kom.DefaultCluster().Resource(&item).AllNamespace().List(&items).Error
// 5 saniye cache ayarla; liste için geçerlidir
err := kom.DefaultCluster().Resource(&item).WithCache(5 * time.Second).List(&nodeList).Error
// default namespace'indeki app:nginx etiketi olan Deployment listesini sorgula
err := kom.DefaultCluster().Resource(&item).Namespace("default").WithLabelSelector("app=nginx").List(&items).Error
// default namespace'indeki app:nginx m:n etiketi olan Deployment listesini sorgula
err := kom.DefaultCluster().Resource(&item).Namespace("default").WithLabelSelector("app=nginx").WithLabelSelector("m=n").List(&items).Error
// default namespace'indeki metadata.name=test-deploy etiketi olan Deployment listesini sorgula
// filedSelector genellikle yerleşik alan tanımını destekler. metadata.name,metadata.namespace,metadata.labels,metadata.annotations,metadata.creationTimestamp,spec.nodeName,spec.serviceAccountName,spec.schedulerName,status.phase,status.hostIP,status.podIP,status.qosClass,spec.containers.name vb. alanlar gibi
err := kom.DefaultCluster().Resource(&item).Namespace("default").WithFieldSelector("metadata.name=test-deploy").List(&items).Error
var list []corev1.Pod
var total int64
sql := "select * from pod where metadata.namespace=? or metadata.namespace=? order by metadata.creationTimestamp desc "
err := kom.DefaultCluster().Sql(sql, "kube-system", "default").
FillTotalCount(&total).
Limit(5).
Offset(10).
List(&list).Error
fmt.Printf("total %d\n", total) //Toplam döndür 480
fmt.Printf("Count %d\n", len(list)) //Döndürülen öğe sayısı=limit=5
// nginx adlı Deployment'ı güncelle; açıklama ekle
err := kom.DefaultCluster().Resource(&item).Namespace("default").Name("nginx").Get(&item).Error
if item.Spec.Template.Annotations == nil {
item.Spec.Template.Annotations = map[string]string{}
}
item.Spec.Template.Annotations["kom.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
err = kom.DefaultCluster().Resource(&item).Update(&item).Error
// Patch kullanarak kaynağı güncelle; nginx adlı Deployment'a etiket ekle ve replica sayısını 5 olarak ayarla
patchData := `{
"spec": {
"replicas": 5
},
"metadata": {
"labels": {
"new-label": "new-value"
}
}
}`
err := kom.DefaultCluster().Resource(&item).Patch(&item, types.StrategicMergePatchType, patchData).Error
// nginx adlı Deployment'ı sil
err := kom.DefaultCluster().Resource(&item).Namespace("default").Name("nginx").Delete().Error
// nginx adlı Deployment'ı sil
err := kom.DefaultCluster().Resource(&item).Namespace("default").Name("nginx").ForceDelete().Error
// GVK belirterek kaynağı al
var list []corev1.Event
err := kom.DefaultCluster().GVK("events.k8s.io", "v1", "Event").Namespace("default").List(&list).Error
// default namespace'indeki Pod kaynağının değişikliklerini izle
var watcher watch.Interface
var pod corev1.Pod
err := kom.DefaultCluster().Resource(&pod).Namespace("default").Watch(&watcher).Error
if err != nil {
fmt.Printf("Watcher Oluşturma Hatası %v", err)
return err
}
go func() {
defer watcher.Stop()
for event := range watcher.ResultChan() {
err := kom.DefaultCluster().Tools().ConvertRuntimeObjectToTypedObject(event.Object, &pod)
if err != nil {
fmt.Printf("Nesneyi *v1.Pod türüne dönüştürülemiyor: %v", err)
return
}
// Olayı işle
switch event.Type {
case watch.Added:
fmt.Printf("Eklenen Pod [ %s/%s ]\n", pod.Namespace, pod.Name)
case watch.Modified:
fmt.Printf("Değiştirilen Pod [ %s/%s ]\n", pod.Namespace, pod.Name)
case watch.Deleted:
fmt.Printf("Silinen Pod [ %s/%s ]\n", pod.Namespace, pod.Name)
}
}
}()
// default namespace'indeki nginx adlı Deployment'ı Describe et
var describeResult []byte
err := kom.DefaultCluster().Resource(&item).Namespace("default").Name("nginx").Describe(&item).Error
fmt.Printf("describeResult: %s", describeResult)
yaml := `apiVersion: v1
kind: ConfigMap
metadata:
name: example-config
namespace: default
data:
key: value
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-container
image: nginx
`
// İlk Apply çalıştırması oluşturmadır; her
AWS MCP sunucuları, AWS hizmetleri ve kaynaklarıyla sorunsuz entegrasyon için tasarlanmıştır.
Kubernetes toplu port yönlendirmesi, service discovery, /etc/hosts yönetimi, traffic izleme ve pod log akışını bir arada sunan araç.
Cloudflare Workers, KV, R2 ve D1 hizmetleriyle entegrasyon
Kubernetes MCP sunucusu OpenShift desteğiyle, **herhangi bir** Kubernetes kaynağına yönelik CRUD işlemleri sağlamasının yanı sıra kümenizle etkileşim kurmak için özel araçlar sunar.
Kubernetes kümesi işlemleri için pod, deployment ve service yönetimini sağlayan TypeScript uygulaması.
Resmi Terraform MCP Server, Terraform ekosistemiyle sorunsuz bir şekilde entegre olarak sağlayıcı keşfedilmesi, modül analizi ve Registry API entegrasyonu sağlayarak gelişmiş Infrastructure as Code iş akışlarını destekler.