Come già detto nel precedente articolo, OpenNebula include il comando onevm per gestire le istanza delle VM.
Sinceramente la documentazione ufficiale e il manuale del comando mi hanno un po’ tratto in inganno per cui inquesto articolo cercherò di fare un po’ di chiarezza.
Ovviamente i comandi lanciabili attraverso onevm possono tranquillamente essere lanciati anche attraverso l’interfaccia web sunstone.
create
Abbiamo già visto l’utilizzo di “create”: con questo comando si crea l’istanza di una nuova VM partendo da un file template oppure dai dati inseriti attraverso l’interfaccia web sunstone. Una volta lanciato il comando, l’immagine viene posta in stato “pending”, in attesa quindi che lo schedulatore interno di opennebula si faccia carico di eseguire tutte le operazioni necessarie per avviare l’istanza su un hypervisor.
Dopo qualche istante, quindi, l’immagine entrerà nello stato “boot” per poi passare in stato “running”.
shutdown
Qui arriva il mio primo misunderstanding: siamo in un cloud e non in un semplice hypervisor, quindi le istanze delle VM non sono altro che dei servizi. Ciò vuol dire che con shutdown non chiedo semplicemente lo spegnimento della VM, ma ne chiedo, sostanzialmente, la disattivazione!
Quindi, lanciando lo shutdown, la VM viene spenta e cancellata senza alcuna possibilità di essere riavviata a meno di non creare una nuova istanza! Tenetelo ben presente…
La voce relativa all’istanza rimane comunque memorizzata per motivi storici fintantochè non viene cancellata.
delete
Serve per cancellare una VM. Nel caso in cui la VM sia accessa, prima viene operato uno shutdown.
suspend e resume
Il comando suspend mette in pausa la macchina virtuale. Lo stato viene salvato in un’area temporanea all’interno del nodo di clacolo locale, pronto per essere riutilizzato quando si lancia il resume.
stop e resume
Il comando stop è simile al suspend ma la macchina virtuale viene salvata in un’area temporanea all’interno del controlle per essere riutilizzata quando si lancia il resume e funziona solo se l’immagine ha il flag “SAVE” attivo. La differenza tra stop e suspend sta proprio nella posizione ove viene salvato lo stato della VM: averla nel nodo locale (suspend) permette di rendere il resume più rapido, però è necessario che tutte le risorse necessarie per far funzionare la VM siano disponibili. Al contrario, con lo stop, i dati della VM vengono spostati all’interno del controller, per cui in fase di resume viene scelto l’host più adatto per ospitare la VM.
migrate e livemigrate
I comandi migrate e livemigrate permettono di spostare l’immagine della VM da un server Hypervisor all’altro. Nel caso di migrate, viene fermata la VM, salvato lo stato sul cloud controller e poi viene eseguito il resume sul secondo host; nel caso di livemigrate, si sfruttano le potenzialità offerte dall’hypervisor per migrare la VM senza soluzione di continuità.
restart
Altro comando che crea imbarazzo: non serve per riavviare una istanza attiva, ma per far ripartire una istanza in stato sconosciuto. Se una VM si blocca (o se spegnamo una VM attraverso il comando “halt” di linux) è possibile farla riprtire attraverso il comando reboot.
Riassumendo, quindi:
- una macchina virtuale può essere messa in pausa con stop o suspend, ma non può essere spenta “alla VMWare” tramite hypervisor, ma solo attraverso shell locale
- se una macchina virtuale si blocca, oppure se il controller viene riavviato, lo stato della VM diventa “UNKNOWN”: in questo caso è possibile riavviare l’istanza della VM attraverso “restart”
- il “reboot” da linux è ininfluente per lo stato della VM in OpenNebula
- per riavviare una VM che appare in “RUNNING” ma che in realtà è bloccata (ad es. se riempite il disco della VM
) l’unica possibilità è quella di cancellare l’istanza e ricrearla