Sto cercando di costruire un sistema che eseguirà componenti software di breve durata (CI e test build), è obbligatorio in base alle mie esigenze che ognuno viva su un host privato. Sto prendendo quella definizione per includere anche le opzioni di paravirtualsation , in quanto sembra che mi farà risparmiare un sacco di mal di testa.
Sto lavorando su un Mac, quindi praticamente tutte le tecnologie non sono disponibili, libvirt e quemu , ecc. Non funzionano per me. Sto tuttavia pianificando di implementare Debian; quindi tutto ciò che gira su Debian è tornato sul tavolo, a condizione che io possa eseguire lo scripting del provisioning della macchina host e dei suoi domini guest.
La mia configurazione prevista era che posso usare per avviare un programma di installazione Debian, che qualcosa dovrebbe significare che all'avvio, il provisioning automatico della macchina (Chef, Puppet, Babushka, non importa, davvero) - e parte di quel provisioning dovrebbe creare un rootfs modello che possono essere utilizzati per l'avvio di un contenitore. È necessario inoltre eseguire il provisioning del contenitore stesso, in modo che quando viene visualizzato il contenitore sia a conoscenza del lavoro da eseguire, possa eseguire il lavoro e quindi uscire.
In breve, ecco il flusso di lavoro di cui ho bisogno:
- Avviare una macchina (virtuale o di altro tipo) e averlo pronto per il lavoro.
- Il lavoro dovrebbe essere eseguito da uno script installato da chef / burattino / babushka / ecc
- Quando arriva il lavoro, una macchina virtuale dovrebbe essere avviata per fare il lavoro.
- La VM dovrebbe fare il lavoro, uscire e rilasciare le sue risorse sul computer principale / host. (è importante che sia ridimensionato ad almeno centinaia di VM guest su hardware ragionevole)
Sono arrivato al punto in cui ho provato quanto segue e li ho abbandonati per i motivi indicati di seguito:
Per la macchina host
- Pre-seed delle immagini micro ISO Debian con Instalinux (con supporto LinuxCOE) ( Bad: non ha funzionato affatto ("Nessun modulo kernel trovato" (poiché le immagini Instalinux non sono sincronizzate con i repository FTP, apparentemente questa soluzione è notoriamente fragile, inoltre non consente molto spazio per il post-installazione e rilasciare chiavi SSH, chiavi host, ecc. note sulla macchina, sembra fuoco e dimentica, alla fine avrei una macchina in esecuzione, ma nessun accesso ad essa .)
- Pre-seed Debian netinst ISO ( Bad : stessi problemi, come sopra, tranne che l'installazione si completa in genere poiché non vi sono disparità del kernel tra ISO e repository FTP. Ancora limitato per post-installazione. Buono : assolutamente affidabile e ripetibile, facile da lanciare su qualsiasi stack di tecnologia VM su Mac o su una macchina bare metal, funzionerebbe ovunque, tuttavia non riesco a post-installarlo abbastanza )
- Vari metodi per creare un rootfs e compilarlo come immagine di un disco rigido avviabile ( Bad : quel poco che potrei far funzionare era fragile da morire, sarebbe difficile da installare su una macchina reale, ed è un processo di compilazione complesso. Buono: Se Potrei farlo funzionare, questo sembrerebbe fornire la maggior possibilità di preconfigurare la macchina per una determinata specifica con chiavi ssh, chiavi host, nome host, software installato da Git e quant'altro, ma poi la domanda sarebbe come impacchettare per la distribuzione o come copiarlo è ricreazione. )
Onestamente non sono sicuro di quale tecnologia ci si aspetta che la gente usi per far emergere una VM dal nulla a un sistema funzionante, funzionante e utile. Mi sembrano tre passaggi a) sistema operativo, b) configurazione del sistema (utenti, ecc.) E quindi c) modifiche al filesystem.
Per le macchine guest (virtuali):
- Molte cose, principalmente penso che la risposta qui sia un rootfs di sola lettura creato con
debootstrap
, e una partizione speciale sul contenitore LXC che contiene il lavoro da fare per questa specifica istanza (un manifest di lavoro). Inserisci tutti i soliti avvertimenti sulla costruzione del sistema operativo, l'avvio, la creazione di utenti, il controllo del software da Git e il lavoro.
Sinceramente non sono sicuro di quali strumenti prendere, sembra che il problema dovrebbe essere ben risolto. Ma non riesco proprio a scoprire da dove cominciare davvero.
La maggior parte delle persone sembra suggerire per la macchina host che dovrei scegliere una tecnologia di virtualizzazione, avviare una macchina in uno stato funzionante e quindi istantaneamente (libvirt sembra il favorito logico per questo). Utilizzo dell'istantanea per visualizzare eventuali installazioni successive per i test o in produzione.
Per le macchine guest, lxc sembra fornire l'opzione più semplice, tranne per il fatto che il backgrounding di un contenitore e la connessione successiva in seguito tramite la console sono interrotti in tutti i kernel attuali, e la versione più recente di lxc disponibile per Debian stabile ha più di 18 mesi e manca di molte funzionalità ampiamente utilizzate.
In genere sono uno sviluppatore di applicazioni e spesso non lavoro con la tecnologia a livello di server (e sono certo che SF indicherà questa domanda come "troppo soggettiva") ma sono sinceramente incerto su quali strumenti raggiungere.
L'ultima parola è che conosco un progetto impilato in modo simile (travis-ci.org) che sta usando scatole Vagrant per questo. Sembra uno strumento piuttosto schietto, strumenti grandi, lenti e orientati al rubino, progettati per il provisioning desktop su piccola scala dei VM di test utilizzati per l'infrastruttura di servizi critici, ma conosco anche alcuni di quei ragazzi, e sono più intelligenti di me, quindi forse hanno appena rinunciato.
Qualsiasi aiuto apprezzato.