Fai il run su Kubernetes? devin-outpost-k8s
è un operatore open source che implementa questo ciclo per te: monitora la
coda, rivendica le sessioni in attesa e fa il run di ciascuna come worker pod su
qualsiasi cluster certificato (GKE, EKS, …). Installalo con il suo chart
Helm invece di sviluppare il tuo orchestrator.
Il flusso principale
- Registra un outpost
Un outpost è una coda di sessioni con nome, gestita da più worker nella tua infrastruttura (ad esempio, rhel, gpu-h200 o my-outpost). Creane uno con devin worker outpost create:
Nell’API della flotta, gli outpost sono rappresentati come risorse
outposts, nell’ambito
del tuo account (condiviso tra tutte le sue organizzazioni). Consulta gli
endpoint degli outpost.
- Monitora l’API della flotta per le sessioni in attesa
L’orchestrator elenca le sessioni in attesa per gli outpost che gestisce:
metadata.session_id e tollera i duplicati. Consulta List queued sessions e Watch for changes per i parametri di query, i formati di risposta e la semantica completa della paginazione.
- Rivendica prima del provisioning
Prima di avviare una macchina per una sessione, rivendicala in modo atomico, così che nessun altro worker la prenda in carico. Specifica un acceptor_id — un’identità dichiarata dal worker stesso:
409. La rivendicazione garantisce che un worker sarà pronto entro la scadenza della rivendicazione assegnata dal server (status.claim_deadline); le rivendicazioni scadute tornano automaticamente nella coda. Se il provisioning non riesce, rilascia la rivendicazione in modo che la sessione torni immediatamente nella coda.
- Avvia una macchina ed esegui il run del worker
Per ogni sessione presa in carico, esegui il provisioning di una VM o di un container a partire dalla tua immagine. Al suo interno, esegui il run del worker dalla directory in cui vuoi che la sessione lavori: i suoi repository si trovano nella sottodirectory repos di tale directory, ovvero $(pwd)/repos/<repo-name>:
--acceptor-id che hai usato per la rivendicazione tramite API e fornisci il token tramite --token o DEVIN_OUTPOSTS_TOKEN (vedi l’elenco completo dei flag). Il worker si connette al cloud di Devin, segnala che la sessione è pronta e inizia a eseguire le chiamate agli strumenti.
- Arrestare la macchina quando il worker termina
Quando devin worker start termina, la session è conclusa (o è stata sospesa). Arresta la VM o il container. Se il tuo outpost supporta la ripresa, crea uno snapshot della macchina prima di arrestarla, così potrai ripristinarla se la session riprende.
Il tuo orchestrator può tenere traccia delle session rivendicate e dei rispettivi stati:
status.session_status impostato su pending, running, suspended o terminated.
Pianificazione decentralizzata
Hai in programma di eseguire più di ~16 coordinatori (worker o orchestrator
che osservano e rivendicano sessioni da un outpost)? Contatta prima il tuo account team: flotte più
grandi aumentano la contesa per le rivendicazioni e il carico di lettura della coda, e vogliamo
assicurarci che l’outpost sia dimensionato adeguatamente.
- Le rivendicazioni sono l’unico meccanismo di coordinamento. Ogni worker osserva la coda in modo indipendente e compete per rivendicare le sessioni in attesa. La rivendicazione è un’operazione atomica di compare-and-swap sul server: vince un solo worker, mentre tutti gli altri ricevono un
409e passano semplicemente alla sessione in attesa successiva. Perdere la corsa alla rivendicazione è un comportamento normale, non un errore. - Ogni worker ha una propria identità.
acceptor_idcircoscrive le rivendicazioni, i rinnovi e il recupero dopo il riavvio al solo worker a cui appartiene.devin worker startne genera e salva automaticamente uno per ogni macchina, quindi una flotta non richiede alcuna configurazione dell’identità. Non condividere mai un acceptor ID (o una directory dei dati del worker copiata) tra macchine: worker in conflitto si ruberanno a vicenda le rivendicazioni. - I problemi si risolvono automaticamente. Se un worker si arresta dopo aver rivendicato una sessione, la sua rivendicazione scade alla claim deadline e la sessione torna nella coda perché un altro worker possa prenderla. Non è necessario alcun monitoraggio dello stato a livello di flotta.
Creare un orchestrator personalizzato
Tutto ciò che fadevin worker start è disponibile direttamente tramite l’API della flotta, quindi puoi sostituire completamente la CLI: scarica il file binario devin-remote dalla distribuzione statica di Devin e avvialo tu stesso con l’ambiente descritto nella documentazione. Consulta Distribuzione del file binario remoto e il contratto di spawn nel riferimento.
