Elencare le differenze tra contenitori e macchine virtuali

Completato

L'amministratore di Windows Server di Contoso deve determinare quali carichi di lavoro e scenari sono appropriati per le macchine virtuali (VM) e quali sono più adatti per i contenitori. Valuta le caratteristiche dei carichi di lavoro delle macchine virtuali e dei contenitori, gli scenari in cui possono essere usati e le circostanze in cui è possibile usare i carichi di lavoro dei contenitori per aumentare l'efficienza.

Macchine virtuali e contenitori

Sia le macchine virtuali che i contenitori sono tecnologie di virtualizzazione usate per fornire ambienti di elaborazione isolati e portabili per applicazioni e servizi:

  • Le macchine virtuali simulano un intero computer, che include hardware virtualizzato, sistema operativo, modalità utente e modalità kernel. Le macchine virtuali sono piuttosto agili e offrono un supporto formidabile per le applicazioni. Tendono tuttavia a essere di grandi dimensioni e utilizzano risorse del computer host.

  • I contenitori, come descritto in precedenza, si basano sul kernel del sistema operativo host e contengono un processo in modalità utente isolato per l'app in pacchetto. Questo li rende molto leggeri e veloci da avviare. Diversi dalle macchine virtuali, i contenitori possono essere facilmente spostati dallo sviluppo, al test, agli ambienti di produzione. Tuttavia, poiché il sistema operativo non è esattamente lo stesso, non tutte le applicazioni eseguono lo stesso (o tutti) in un ambiente contenitore.

Analogie e differenze

La tabella seguente riepiloga le analogie e le differenze tra le funzionalità per le macchine virtuali e per i contenitori.

Caratteristica VM Contenitore
Isolamento Fornisce isolamento completo dal sistema operativo host e dalle altre macchine virtuali. Fornisce un isolamento leggero dall'host e dagli altri contenitori.
Sistema operativo Esegue un sistema operativo completo, incluso il kernel. Esegue solo la parte della modalità utente di un sistema operativo.
Compatibilità guest Può essere eseguita praticamente su qualsiasi sistema operativo all'interno della macchina virtuale I contenitori di Windows richiedono versioni corrispondenti del sistema operativo host e contenitore. (Per altri dettagli e alternative, vedere modalità di isolamento)
Distribuzione Distribuita usando la console di gestione di Hyper-V o altri strumenti di gestione delle macchine virtuali. Distribuito e gestito tramite Docker o un altro runtime del contenitore. È possibile distribuire più contenitori usando un agente di orchestrazione, ad esempio Kubernetes.
Archiviazione permanente Usa file di disco rigido virtuale o una condivisione SMB (Server Message Block). I dati non vengono mantenuti quando un contenitore non esiste più. Per rendere persistenti i dati in un contenitore con Windows Server, è necessario usare l'archiviazione permanente.
Bilanciamento del carico e disponibilità elevata Usa un cluster di failover Windows o un servizio di bilanciamento del carico Windows per spostare le macchine virtuali in base alle esigenze e supportare un volume superiore. Usa un agente di orchestrazione dei contenitori per avviare e arrestare automaticamente i contenitori, la scalabilità automatica e supportare traffico aggiuntivo.
Rete Consente di usare schede di rete virtuali. Sono disponibili opzioni di rete diverse a seconda dello scenario. Il valore predefinito è una rete NAT (Network Address Translation) che usa un commutatore interno e esegue il mapping delle porte dall'host al contenitore.

Nota

È comune effettuare il provisioning di contenitori all'interno di una macchina virtuale altamente ottimizzata per fornire isolamento e sicurezza avanzati.

Vantaggi dei contenitori

A livello generale, i contenitori:

  • Richiedono relativamente poche risorse. Utilizzano meno risorse rispetto alle macchine virtuali.

  • Si avviano rapidamente. I tempi di avvio dei contenitori sono approssimativamente equivalenti al tempo necessario per avviare un nuovo processo.

  • Migliorano la densità dei server. I contenitori consentono un utilizzo più efficiente della memoria, del disco e della CPU dell'hardware disponibile rispetto alle macchine virtuali. Questo si traduce in un minor numero di server inattivi e di conseguenza nel miglioramento dell'utilizzo delle risorse di calcolo esistenti. Questo è particolarmente importante per i provider di servizi cloud e per gli utenti, perché consente di ridurre i costi.

  • Portabilità. I contenitori si comportano allo stesso modo indipendentemente dall'ambiente in cui sono in esecuzione. Un contenitore avrà le dipendenze per il funzionamento di un'applicazione. Ciò consente a un contenitore di eseguire lo stesso tra sviluppo, test e produzione, nonché tra l'ambiente locale e il cloud.

Il grafico seguente offre un confronto tra PC, VM, contenitori e processi in termini di isolamento ed efficienza, mostrando che:

  • I PC forniscono il grado di isolamento più elevato. L'isolamento è progressivamente inferiore per macchine virtuali, contenitori e processi.

  • I processi offrono il massimo grado di efficienza e possibile densità. Contenitori, macchine virtuali e PC sono progressivamente meno efficienti.

  • Le risorse hardware, kernel e di sistema, ad esempio un file system, sono condivise:

    • Le VM condividono solo l'hardware.

    • I contenitori condividono l'hardware e un kernel (ad eccezione dei contenitori di Windows Hyper-V, che non condividono un kernel).

    • I processi condividono l'hardware, un kernel e le risorse di sistema.

    • I PC non condividono alcuno di questi elementi.

Diagramma che mostra il confronto tra isolamento ed efficienza tra PC, macchine virtuali, contenitori e processi.

Suggerimento

Per l'archiviazione permanente, è possibile usare un bind mount per montare un percorso nel computer locale. I file all'interno del percorso saranno disponibili quando si riavvia un contenitore oppure se si vogliono condividere i file con più contenitori. Se si vuole che un contenitore venga eseguito in più computer con accesso agli stessi file, occorre invece usare un volume denominato oppure montare una condivisione SMB.

Gli agenti di orchestrazione, ad esempio Kubernetes, hanno la propria implementazione dell'archiviazione permanente.

Attenzione

Non usare bind mount per montare directory riservate, ad esempio C:\ in un contenitore non attendibile. Ciò consentirebbe al contenitore non attendibile di modificare file nell'host a cui generalmente non dovrebbe avere accesso e potrebbe creare una violazione della sicurezza. Assicurarsi inoltre che il contenitore funzioni correttamente quando si passa a un ambiente diverso. Ciò significa evitare l'associazione di un contenitore a un'unità specifica in un host specifico.

Quando scegliere una macchina virtuale

Usare una macchina virtuale quando:

  • È necessario gestire più sistemi operativi.

  • È necessario eseguire un'app che richiede tutte le risorse e i servizi di un sistema operativo completo, ad esempio un'interfaccia utente grafica.

  • È necessario un ambiente persistente e che mantenga le modifiche. Esempio: I database non sono candidati validi per l'esecuzione nei contenitori.

  • Sono necessari isolamento e sicurezza completi.

Quando scegliere un contenitore

Usare un contenitore quando:

  • È necessario un pacchetto dell'applicazione leggero che si avvia rapidamente.

  • È necessario distribuire più istanze di una singola app. Sono necessarie la scalabilità automatica e/o la scalabilità orizzontale.

  • È necessario eseguire un'app o un processo non persistente e su richiesta.

  • È necessario distribuire un'app che possa essere eseguita su qualsiasi infrastruttura sottostante.