Macchina Virtuale
Cos’è una macchina virtuale (VM)?
Una macchina virtuale (VM) è un sistema operativo (SO) o un ambiente applicativo installato su un software che imita un hardware dedicato. L’esperienza dell’utente finale quando utilizza una VM è equivalente a quella dell’utilizzo di hardware dedicato.
Come funzionano le VM?
Una VM fornisce un ambiente isolato per l’esecuzione del proprio SO e delle proprie applicazioni, indipendentemente dal sistema host sottostante o da altre VM su quell’host. Il SO di una VM, comunemente denominato SO guest, può essere uguale o diverso dal SO host e dai SO di altre VM sull’host.
Un singolo computer può ospitare più VM che eseguono SO e applicazioni diversi senza influenzarsi o interferire tra loro. Sebbene la VM dipenda ancora dalle risorse fisiche dell’host, tali risorse sono virtualizzate e distribuite tra le VM e possono essere riassegnate se necessario. Ciò consente di eseguire contemporaneamente diversi ambienti e di adattarsi a carichi di lavoro variabili.
Dal punto di vista dell’utente, la VM funziona in modo molto simile a una macchina bare-metal. Nella maggior parte dei casi, gli utenti che si collegano a una VM non sono consapevoli di utilizzare un ambiente virtuale. Gli utenti possono configurare e aggiornare il sistema operativo guest e le sue applicazioni secondo necessità e installare o rimuovere nuove applicazioni senza influire sull’host o su altre VM. Risorse come CPU, memoria e storage appaiono molto simili a quelle di un computer fisico, sebbene gli utenti possano riscontrare occasionali problemi, come l’impossibilità di eseguire un’applicazione in un ambiente virtuale.
Il ruolo degli hypervisor nella virtualizzazione
L’hosting di VM su un computer richiede un tipo di software specializzato chiamato hypervisor, che gestisce le risorse e le assegna alle VM. L’hypervisor pianifica e regola anche il modo in cui le risorse vengono distribuite in base alla configurazione dell’hypervisor e delle VM, inclusa la riassegnazione delle risorse in base alle fluttuazioni delle richieste.
L’hypervisor emula la CPU, la memoria, il disco rigido, la rete e altre risorse hardware del computer, creando un pool di risorse da assegnare alle singole VM in base ai loro requisiti specifici. L’hypervisor può supportare più piattaforme hardware virtuali isolate tra loro, consentendo alle VM di eseguire i sistemi operativi Linux e Windows Server sullo stesso host fisico.
La maggior parte degli hypervisor non richiede componenti hardware speciali. Tuttavia, il computer che esegue l’hypervisor deve disporre delle risorse necessarie per supportare le VM, le operazioni dell’hypervisor e le operazioni dell’host stesso.
La maggior parte degli hypervisor rientra in una delle due categorie: tipo 1 o tipo 2.
Hypervisor di tipo 1
Noti anche come hypervisor bare-metal, gli hypervisor di tipo 1 vengono eseguiti direttamente sulla macchina host fisica e hanno accesso diretto al suo hardware. Gli hypervisor di tipo 1 vengono in genere eseguiti su computer server e sono considerati più efficienti e con prestazioni migliori rispetto agli hypervisor di tipo 2, il che li rende adatti alla virtualizzazione di server, desktop e applicazioni. Esempi di hypervisor di tipo 1 includono Microsoft Hyper-V e VMware ESXi.
Hypervisor di tipo 2
Noti anche come hypervisor ospitati, gli hypervisor di tipo 2 sono installati sul sistema operativo della macchina host, che gestisce le chiamate alle risorse hardware. Gli hypervisor di tipo 2 sono generalmente distribuiti su sistemi di utenti finali per casi d’uso specifici, ad esempio uno sviluppatore che crea un ambiente specifico per la creazione di un’applicazione o un analista di dati che testa un’applicazione in un ambiente isolato. Esempi di hypervisor di tipo 2 includono VMware Workstation e Oracle VirtualBox.
VM di processo vs. di sistema
Le VM sono spesso classificate in base al tipo di hypervisor che le gestisce o in base al tipo di carichi di lavoro che supportano. Tuttavia, le VM possono anche essere classificate come VM di processo o di sistema.
VM di processo
Una VM di processo è un ambiente di programmazione temporaneo e indipendente dalla piattaforma per l’esecuzione di un singolo processo come applicazione. L’ambiente fornisce un’astrazione di alto livello che maschera l’hardware o il sistema operativo sottostante. Una VM di processo viene creata all’avvio del processo e distrutta al termine del processo. Due esempi comuni di VM di processo sono le macchine virtuali Java, che eseguono programmi compilati da Java, e Common Language Runtime, che fa parte di .NET Framework di Microsoft.
VM di sistema
Una VM di sistema è un ambiente completamente virtualizzato ospitato su un server fisico che esegue il proprio sistema operativo. La VM condivide le risorse fisiche dell’host ma fornisce un ambiente completo per l’esecuzione di applicazioni e servizi, simile a una macchina fisica senza sovraccarico. Le VM di sistema utilizzano un hypervisor per virtualizzare le risorse hardware e renderle disponibili agli ambienti VM. Esempi comuni di VM di sistema includono quelle supportate da piattaforme di virtualizzazione come VMware vSphere e Microsoft Hyper-V.
I vantaggi dell’utilizzo di VM
Sebbene i contenitori e altre moderne tecnologie applicative abbiano influenzato l’utilizzo delle VM, le organizzazioni di tutte le dimensioni continuano a distribuire ampiamente le VM perché offrono diversi vantaggi importanti.
Le VM semplificano la gestione di più ambienti che eseguono diversi sistemi operativi e possono semplificare i backup, il disaster recovery, le nuove distribuzioni e le attività di amministrazione di base dei sistemi.
Costi ridotti e maggiore efficienza
La virtualizzazione limita i costi riducendo la necessità di sistemi hardware fisici. Poiché le VM aiutano le organizzazioni a consolidare i server e a utilizzare meglio le risorse hardware rispetto alle distribuzioni bare-metal, le organizzazioni distribuiscono regolarmente le VM nei loro data center per supportare un’ampia gamma di casi d’uso e carichi di lavoro.
L’esecuzione di più VM contemporaneamente su un singolo server riduce la necessità di distribuire i carichi di lavoro su più server, che spesso operano al di sotto della capacità. Consolidare i carichi di lavoro su meno server significa meno sistemi fisici da distribuire e gestire. Ciò, a sua volta, può far risparmiare capitale e spese operative riducendo i costi di manutenzione associati e la richiesta di alimentazione e raffreddamento.
Gestione e amministrazione IT semplificate
Le organizzazioni spesso distribuiscono le VM per eseguire contemporaneamente più applicazioni che richiedono sistemi operativi e potenza di elaborazione diversi. Esempi includono l’esecuzione di applicazioni legacy insieme ad altri carichi di lavoro, il test di più server Web insieme a piccoli database e l’utilizzo dello stesso server per eseguire software di gioco ad alta intensità grafica e un database del servizio clienti. I team DevOps possono anche utilizzare le VM come parte di pipeline di integrazione continua e distribuzione continua (CI/CD).
Le VM forniscono ambienti isolati e autonomi che possono eseguire diversi sistemi operativi e applicazioni su un singolo server. Amministratori, sviluppatori e tester possono distribuire e gestire rapidamente più VM da un’interfaccia centralizzata sulla maggior parte delle piattaforme di virtualizzazione, anche se tali VM sono distribuite su più host. Ciò consente alle organizzazioni di distribuire applicazioni legacy e aziendali negli ambienti di cui hanno bisogno senza dover affrontare problemi di contesa o dover acquistare più server.
Maggiore scalabilità e flessibilità
Le VM semplificano la scalabilità delle applicazioni e si adattano a carichi di lavoro fluttuanti, motivo per cui la virtualizzazione svolge un ruolo chiave nel cloud computing e in sistemi come l’infrastruttura iperconvergente (HCI). I team IT possono spostare, copiare e riassegnare le VM tra server host e tra ambienti on-premise e cloud. Oltre a migliorare l’utilizzo delle risorse hardware, questo semplifica la scalabilità delle applicazioni.
Le VM sono anche flessibili in quanto non richiedono hardware specializzato o specifico dell’hypervisor. Tuttavia, se l’hardware fisico deve ospitare più VM in esecuzione, il computer host necessita di più larghezza di banda, capacità di archiviazione ed elaborazione rispetto a un server o desktop tradizionale.
Maggiore sicurezza
Le organizzazioni si rivolgono alle VM anche per il livello di sicurezza aggiuntivo che forniscono contro potenziali minacce. Poiché le VM operano in ambienti isolati, forniscono un ulteriore livello di protezione contro gli attacchi informatici.
Le VM supportano anche funzionalità come snapshot e backup, il che significa che gli amministratori possono eliminare, ripristinare o ripristinare una VM compromessa a un backup o snapshot recente. Poiché la VM compromessa è isolata dall’host e dalle altre VM, la minaccia è limitata a quella VM.
Confronto tra VM e container
I container sono simili alle VM, tranne per il fatto che virtualizzano solo il sistema operativo, anziché il resto dell’hardware sottostante.
I container includono il codice, gli strumenti di sistema, il runtime, le librerie di sistema e le impostazioni necessarie per eseguire le applicazioni containerizzate. Di conseguenza, i container vengono spesso utilizzati per più applicazioni in esecuzione sullo stesso sistema operativo.
I container vengono utilizzati anche per applicazioni distribuite cloud-native e per confezionare applicazioni legacy per una maggiore portabilità e semplicità di distribuzione. Docker, che è entrato nel mercato nel 2013 come piattaforma di container basata su Linux, è una delle principali opzioni di container.
Pro e contro di container e VM
Le VM su un host fisico possono consumare quantità di risorse non uguali: una potrebbe monopolizzare lo storage fisico disponibile, mentre un’altra ne usa poco. Pertanto, i professionisti IT devono bilanciare le VM con le risorse disponibili, sebbene le piattaforme di virtualizzazione semplifichino il processo.
I container hanno un overhead inferiore rispetto alle VM e sono molto più leggeri. Si avviano anche più velocemente, utilizzano meno risorse del server e sono più portabili, il che li rende adatti a moderni progetti di applicazioni come le architetture di microservizi.
Tuttavia, tutti i container in esecuzione sullo stesso host o trasferiti su un host diverso devono supportare lo stesso sistema operativo. Le VM, al contrario, possono eseguire sistemi operativi diversi e offrire un maggiore grado di isolamento, sebbene possano essere configurate per comunicare tra loro se necessario. Le VM sono quindi più adatte per applicazioni monolitiche o per eseguire più applicazioni insieme. Sono anche utili per applicazioni legacy che richiedono ambienti isolati.
È possibile utilizzare sia container che VM? I contenitori e le VM possono essere utilizzati insieme per offrire il meglio di entrambi i mondi. Sebbene ciò aggiunga overhead, fornisce un ulteriore livello di sicurezza che manca ai contenitori da soli. La combinazione consente inoltre di distribuire infrastrutture in grado di supportare carichi di lavoro moderni e tradizionali.
Sebbene la maggior parte delle piattaforme HCI si basi su tecnologie di virtualizzazione, molte hanno aggiunto il supporto per Kubernetes, che è implementato all’interno della struttura VM. Di conseguenza, tutti i carichi di lavoro containerizzati vengono eseguiti in VM, beneficiando dell’isolamento delle VM mentre operano insieme ai carichi di lavoro tradizionali.
Impostazione di una VM
Il processo utilizzato per impostare una VM dipende dalla piattaforma di virtualizzazione. Molte piattaforme offrono procedure guidate e altre funzionalità per semplificare il processo di creazione e distribuzione di una VM.
Ad esempio, in VMware vSphere, un amministratore può creare una VM da un modello o un clone o creare una singola VM da zero. Incluso con vSphere è il wizard Nuova macchina virtuale, che guida l’utente attraverso il processo di creazione della VM, che sia una nuova o una basata su un modello o un clone.
Red Hat Virtualization adotta un approccio diverso per la configurazione di una VM. Ad esempio, per installare una VM Linux, l’utente deve seguire i seguenti passaggi:
- Creare una VM vuota.
- Aggiungere un disco virtuale per l’archiviazione.
- Aggiungere un’interfaccia di rete per connettere la VM alla rete.
- Installare il sistema operativo guest.
- Registrare la VM con la rete di distribuzione dei contenuti e allegare le sottoscrizioni necessarie.
- Installare eventuali agenti o driver guest richiesti.
- Poiché il processo di configurazione di una VM è specifico per la piattaforma di virtualizzazione, gli utenti devono esaminare la documentazione della piattaforma prima di distribuire qualsiasi VM.
Gestione delle VM
L’utilizzo delle VM comporta diverse importanti considerazioni di gestione, molte delle quali possono essere affrontate tramite le best practice e gli strumenti di amministrazione dei sistemi generali progettati per gestire le VM.
Il consolidamento presenta alcuni rischi, tra cui il sovraccarico delle risorse o l’insorgenza di interruzioni su più VM a causa di guasti hardware fisici. Sebbene i risparmi sui costi aumentino man mano che più VM condividono la stessa piattaforma hardware, aumenta anche il rischio: potrebbe essere possibile posizionare centinaia di VM sullo stesso hardware, ma un guasto della piattaforma hardware potrebbe eliminare decine o centinaia di VM. Il backup proattivo delle VM può aiutare a mitigare questi rischi.
Fornitori di piattaforme VM
Diversi fornitori offrono piattaforme di virtualizzazione. Di seguito sono riportate quattro delle opzioni più diffuse:
- VMware vSphere è una piattaforma di virtualizzazione ampiamente implementata che include il supporto nativo per Kubernetes, rendendo possibile l’esecuzione di carichi di lavoro tradizionali e moderni nelle VM. VMware vSphere è altamente scalabile e può supportare applicazioni ad alte prestazioni come SAP HANA. Citrix
- Hypervisor, precedentemente Citrix XenServer, è un hypervisor ad alte prestazioni basato sull’hypervisor open source Xen Project. Citrix Hypervisor è ottimizzato per carichi di lavoro di app e desktop virtuali, nonché per server virtuali Windows e Linux. Gli amministratori possono configurare policy che riavviano le VM su un altro server in caso di guasto di una di esse.
- Microsoft Hyper-V consente agli amministratori di creare e gestire VM su Windows. Hyper-V è un componente integrato della piattaforma Windows Server, che semplifica le implementazioni negli ambienti Windows Server. Hyper-V supporta sia VM Windows che Linux e include funzionalità per spostare, distribuire o replicare facilmente VM.
- Red Hat Virtualization è una piattaforma di virtualizzazione aziendale basata sul sistema operativo Red Hat Enterprise Linux e sul modulo di virtualizzazione Kernel-based VM (KVM). La piattaforma può supportare applicazioni mission-critical e carichi di lavoro ad alta intensità di risorse ed è integrata con Red Hat OpenStack, OpenShift e Ansible.
Oltre a KVM, numerosi altri prodotti di virtualizzazione open source hanno rivendicato i loro diritti nel mercato delle VM, tra cui oVirt e Proxmox Virtual Environment.
Sebbene il cloud computing faccia ampio uso della virtualizzazione, aggiunge tecnologie aggiuntive alla piattaforma, come il provisioning self-service e il chargeback. Ad esempio, in un data center virtualizzato, lo staff IT può avviare nuove VM in base alla domanda dell’utente o a un nuovo progetto. Tuttavia, in un ambiente cloud, un utente finale può effettuare il provisioning delle VM da un catalogo self-service e specificare le risorse senza interagire con l’apparecchiatura fisica sottostante o richiedere l’aiuto di un amministratore.