Skip to main content
Glama

agentctl

Operador de cargas de trabajo de agente/modelo nativo de K8s con registro de malla SAM y plano de operaciones MCP.

Reemplaza los orquestadores que generan procesos (vllm-orchestrator) con recursos declarativos de K8s. Cada operación se expone como una herramienta MCP para la composición de flujos de trabajo LangGraph/LangChain.

Architecture

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

Install

pip install agentctl
# or
uv pip install agentctl

Install (cluster)

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

Esto instala el CRD, el operador y el plano de operaciones MCP en agentctl-system. El plano de operaciones es accesible dentro del clúster en http://agentctl-mcp.agentctl-system.svc.cluster.local:8091/mcp (HTTP Streamable sin estado).

Usage

Desplegar las cargas de trabajo de ejemplo

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

Desde el código fuente (desarrollo)

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)

Desplegar una carga de trabajo de modelo

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

La puerta de enlace LiteLLM enruta solicitudes compatibles con OpenAI a los backends vLLM. Apunte sus agentes a http://litellm-gateway:4000/v1 y use nombres de modelo como qwen3.8-27b o qwen3.8-27b-fp8.

Herramientas MCP (para composición de agentes / LangGraph)

Las 20 herramientas son sin estado, devuelven JSON estructurado y protegen las acciones destructivas detrás de indicadores de aprobación.

Consultas de flota

Tool

Description

fleet_status

Vista agregada: cargas de trabajo por fase, totales de GPU

fleet_gpus

Capacidad de GPU por nodo / asignada / libre + consumidores

fleet_pods

Detalle por pod: nodo, fase de arranque, GPUs, reinicios

footprint_check

Simulación: qué nodos pueden alojar N GPUs — llame antes del arranque

health_check

Disponibilidad de endpoint por servicio

sam_services

Descubrir servicios de malla SAM

Ciclo de vida de la carga de trabajo

Tool

Description

workload_list

Listar cargas de trabajo con fase, GPUs, estado de fijación

workload_status

Detalle completo incl. fases de arranque por pod

workload_logs

Registros de contenedor recientes por pod

workload_scale

Escalar réplicas (0 = estacionar; rechaza reducir escala en fijadas a menos que force=true)

workload_delete

Eliminar carga de trabajo — requiere approved=true

deploy_model

Crear carga de trabajo de modelo (idempotente)

undeploy_model

Eliminar carga de trabajo de modelo

kill_pod

Forzar eliminación de pod colgado — requiere approved=true; Deployment lo recrea

model_pin / model_unpin

Fijar evita la reducción de escala (mantener modelo residente)

model_sleep / model_wake

Suspender/despertar. Cargas de trabajo FMA (sleepWake.enabled): suspensión a nivel de segundos mediante llm-d fast-model-actuation, GPU liberada para otros modelos — ver docs/fma.md. Cargas de trabajo nativas: detención completa / arranque en frío

Orquestación de arranque

Tool

Description

boot_model

Desplegar + espera opcional en el servidor (wait_seconds); devuelve outcome: ready/failed/timeout

boot_status

Consultar progreso de arranque: fases de pod + marcadores de registro vLLM (LoadingWeights → SizingKVCache → CapturingGraphs → Serving) + porcentaje

Patrón de espera de arranque de agente (bucle LangGraph):

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

Development

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

License

MIT

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers