Skip to main content
Glama

agentctl

K8s-nativer Agent-/Modell-Workload-Operator mit SAM-Mesh-Registrierung und MCP-Ops-Ebene.

Ersetzt prozessstartende Orchestratoren (vllm-orchestrator) durch deklarative K8s-Ressourcen. Jede Operation wird als MCP-Tool für die LangGraph/LangChain-Workflow-Komposition bereitgestellt.

Architektur

LangGraph agent ──MCP──▶ agentctl ops plane (:8091)
                              │
                    ┌─────────┼─────────┐
                    ▼         ▼         ▼
              workload_*   fleet_*   sam_*
              tools        tools     tools
                    │         │         │
                    ▼         ▼         ▼
              K8s API    K8s API   SAM node
              (CRDs)    (pods)    (discovery)

Related MCP server: k8s-aiops

Installation

pip install agentctl
# or
uv pip install agentctl

Installation (Cluster)

kubectl apply -f https://github.com/moreWax/agentctl/releases/latest/download/install.yaml

Dies installiert die CRD, den Operator und die MCP-Ops-Ebene in agentctl-system. Die Ops-Ebene ist im Cluster erreichbar unter http://agentctl-mcp.agentctl-system.svc.cluster.local:8091/mcp (zustandsloses Streamable HTTP).

Verwendung

Beispiel-Workloads bereitstellen

kubectl apply -f examples/qwen3.8-27b.yaml        # Qwen3.8-27B, TP2 on 2 GPUs
kubectl apply -f examples/qwen3.8-27b-fp8.yaml    # FP8 variant, single GPU
kubectl apply -f examples/litellm-gateway.yaml    # LiteLLM proxy gateway

Aus dem Quellcode (Entwicklung)

uv venv && uv pip install -e ".[dev]"
kubectl apply -f crd/agentctl-crd.yaml
agentctl serve          # operator (kopf controllers)
agentctl mcp --port 8091  # MCP ops-plane server (stateless Streamable HTTP)

Ein Modell-Workload bereitstellen

kubectl apply -f examples/qwen3.8-27b.yaml        # Qwen3.8-27B, TP2 on 2 GPUs
kubectl apply -f examples/qwen3.8-27b-fp8.yaml    # FP8 variant, single GPU
kubectl apply -f examples/litellm-gateway.yaml     # LiteLLM proxy gateway

Das LiteLLM-Gateway leitet OpenAI-kompatible Anfragen an die vLLM-Backends weiter. Richten Sie Ihre Agents auf http://litellm-gateway:4000/v1 und verwenden Sie Modellnamen wie qwen3.8-27b oder qwen3.8-27b-fp8.

MCP-Tools (für LangGraph / Agenten-Komposition)

Alle 20 Tools sind zustandslos, geben strukturiertes JSON zurück und schützen destruktive Aktionen hinter Genehmigungsflags.

Fleet-Abfragen

Tool

Beschreibung

fleet_status

Aggregierte Ansicht: Workloads nach Phase, GPU-Gesamtzahlen

fleet_gpus

GPU-Kapazität pro Knoten / zugewiesen / frei + Verbraucher

fleet_pods

Pod-Details: Knoten, Boot-Phase, GPUs, Neustarts

footprint_check

Trockenlauf: Welche Knoten können N GPUs aufnehmen – vor dem Boot aufrufen

health_check

Endpunkt-Bereitschaft pro Dienst

sam_services

SAM-Mesh-Dienste entdecken

Workload-Lebenszyklus

Tool

Beschreibung

workload_list

Workloads mit Phase, GPUs und Pin-Status auflisten

workload_status

Vollständige Details inkl. Boot-Phasen pro Pod

workload_logs

Aktuelle Container-Logs pro Pod

workload_scale

Replikate skalieren (0 = parken; verweigert Skalierung bei gepinnten, außer force=true)

workload_delete

Workload löschen – erfordert approved=true

deploy_model

Modell-Workload erstellen (idempotent)

undeploy_model

Modell-Workload entfernen

kill_pod

Hängenden Pod erzwungen löschen – erfordert approved=true; Deployment erstellt ihn neu

model_pin / model_unpin

Pin verhindert Skalierung (Modell resident halten)

model_sleep / model_wake

Suspendieren/Aufwecken. FMA-Workloads (sleepWake.enabled): Suspendierung auf Sekundenebene über llm-d fast-model-actuation, GPU für andere Modelle freigegeben – siehe docs/fma.md. Native Workloads: vollständiger Stopp / Kaltstart

Boot-Orchestrierung

Tool

Beschreibung

boot_model

Bereitstellen + optionales serverseitiges Warten (wait_seconds); gibt outcome: ready/failed/timeout zurück

boot_status

Boot-Fortschritt abfragen: Pod-Phasen + vLLM-Log-Marker (LoadingWeights → SizingKVCache → CapturingGraphs → Serving) + Prozent

Agent-Boot-Wait-Muster (LangGraph-Schleife):

boot_model(model_id="qwen38-27b", image="vllm/vllm-openai:v0.18.0", gpu_count=2)
while True:
    s = boot_status(model_id="qwen38-27b")
    if s["ready"]:  break          # proceed to inference
    if s["failed"]: ...            # inspect s["pods"], kill_pod + retry
    time.sleep(10)                 # poll again

Entwicklung

uv venv && uv pip install -e ".[dev]"
pytest tests/ -q

Lizenz

MIT

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers