Virtuele machines versus containers: een uitgebreide vergelijking
Virtuele machines en containerisatie zijn twee benaderingen voor het implementeren van meerdere uitvoeringsomgevingen op één platform.
Deze twee technologieën maken het gemakkelijk om een virtuele omgeving te creëren die is gemodelleerd naar fysieke infrastructuur, waardoor de gebruiker de middelen verder kan optimaliseren.
Dit artikel onderzoekt hun overeenkomsten en verschillen. Het kijkt ook naar hun voor- en nadelen in verschillende gebruikssituaties, om u een beter idee te geven van hoe en wanneer u ze het beste kunt gebruiken.
Hypervisors en containermotoren
Veel websites en internetapplicaties zijn ontstaan in een gedeelde hostingomgeving – waar twee of meer applicaties alle bronnen van een fysieke server deelden. Dit bracht problemen met zich mee, omdat één gecompromitteerde applicatie de rest kon beïnvloeden, beide aan veiligheid en prestaties. De eenvoudigste oplossing destijds was het runnen van een dedicated server, wat helaas hogere kosten met zich meebracht.
Virtualisatie is ontstaan om deze problemen op te lossen. Ten eerste zorgden hypervisors ervoor dat een fysieke server meer dan één virtuele server kon hosten, afhankelijk van het aantal CPU's en RAM. Hierdoor kunnen verschillende applicaties, websites of clients in hun geïsoleerde omgeving draaien tegen lagere kosten zonder dat een speciale fysieke server nodig is.
Ook kwamen er containers op om de kosten verder te verlagen en de vele problemen aan te pakken waarmee ontwikkelaars met virtuele machines werden geconfronteerd. Beide technologieën bestaan tegenwoordig naast elkaar, met elk hun sterke en zwakke punten.
Wat is een virtuele machine?
Virtuele machines of VM's zijn een vorm van gevirtualiseerde computeruitvoeringsomgeving die een fysiek systeem nabootst. Een virtuele machine maakt gebruik van gespecialiseerde software genaamd a hypervisor om toegang te krijgen tot specifieke bronnen op een fysieke infrastructuur waardoor deze kan functioneren als een onafhankelijk besturingssysteem.
Het besturingssysteem van een virtuele machine wordt het gast-besturingssysteem genoemd, terwijl het besturingssysteem op de fysieke server het host-besturingssysteem wordt genoemd. Een host-besturingssysteem kan meerdere gast-besturingssysteeminstanties hosten, afhankelijk van hoeveel geheugen, CPU-kernen en opslag het heeft.
Voors en tegens van virtuele machines
VOORDELEN
- Isolatie: Een virtuele machine is een zeer geïsoleerde omgeving die u voor veel doeleinden kunt gebruiken. Alles wat erin gebeurt, heeft geen invloed op andere virtuele machines en vice versa. De reden is dat elke virtuele machine op een of meer speciale CPU-threads draait.
- Hardware-optimalisatie: Met virtuele machines kunnen gebruikers veel besturingssystemen op één hardwareserver uitvoeren. Dit vermogen leidt tot kostenbesparingen.
- Momentopnamen en terugdraaien: U kunt op elk moment de uitvoeringsstatus van een virtuele machine vastleggen. Dit proces wordt een snapshot genoemd en een rollback is gewoon een functie die de virtuele machine terugbrengt naar die exacte uitvoeringsstatus.
- Flexibiliteit: U kunt VM's omhoog of omlaag schalen en eenvoudig migreren, waardoor ze een ideaal platform zijn voor het ontwikkelen en testen van applicaties.
NADELEN
- Beperkte schaalbaarheid: Hoewel u virtuele machines kunt schalen, zijn ze niet zo eenvoudig te schalen als containers.
- Ingewikkeldheid: Virtuele machines vereisen meer overhead om te beheren, zoals updates en monitoring, en dit kan leiden tot problemen bij grootschalige implementaties.
- Licenties: Het uitvoeren van meerdere virtuele machines kan licentiekosten met zich meebrengen.
Wat is een houder?
Een container is ook een virtualisatietechnologie waarmee een gebruiker geïsoleerde uitvoeringsomgevingen op een fysiek systeem kan creëren en onderhouden, zonder te vertrouwen op de hypervisor van het systeem of directe toegang tot CPU en andere bronnen.
Een container wordt gemaakt wanneer de inhoud van een gegevensbestand wordt uitgevoerd. Dit bestand wordt de containerimage genoemd en bevat alle bibliotheken die op het hostbesturingssysteem moeten worden geïnstalleerd om de gewenste container te maken.
Containers zijn licht van gewicht en bieden een consistente en draagbare omgeving die zeer nuttig is voor de moderne tijd software development. Ze kunnen ook naast elkaar op dezelfde fysieke host worden uitgevoerd, voor zover de hardwarespecificaties dit ondersteunen.
Voors en tegens van containers
VOORDELEN
- Consistente omgeving: De inhoud van een container staat vast en exact. Dit betekent dat het altijd dezelfde uitvoeringsomgeving produceert wanneer het wordt uitgevoerd.
- Efficiëntie met middelen: Containers gebruiken alleen zoveel resources als ze nodig hebben. U hoeft vooraf geen CPU's in te stellen of geheugen toe te wijzen. Hierdoor kunnen ook meer containers samen worden verpakt.
- Snelle implementatie: Containers zijn licht van gewicht en snel op te zetten en hebben vaak maar een paar seconden nodig om te beginnen met werken.
- Isolatie: Een container is een geïsoleerde uitvoeringsomgeving. Hoewel het niet zo geïsoleerd is als virtuele machines, is het nog steeds de beste oplossing voor het uitvoeren van microservices die zich richten op het uitvoeren van slechts één taak en deze goed uitvoeren.
NADELEN
- Beperkte ondersteuning voor verouderde applicaties: Als je te maken hebt met een applicatie die specifieke functies van het besturingssysteem of hardwareapparaten nodig heeft, dan is een container misschien niet de beste oplossing.
- Kortstondige gegevens: Alles aan containers wordt vernietigd wanneer de container wordt vernietigd en dit geldt ook voor gegevens. Er zijn echter manieren om persistente gegevens met containers te hebben.
- Kernelafhankelijkheid: Container-engines draaien op een host-besturingssysteem, wat beperkt wat u in de omgeving kunt doen.
Verschillen tussen virtuele machines en containers
Virtuele Machines | containers | |
---|---|---|
Architectuur | Inclusief besturingssysteem met bibliotheken | Bevat alleen de benodigde bibliotheken |
Beeld maat | 10 - 150 GB | 5 - 600 MB |
Isolatie & Beveiliging | Relatief geïsoleerd en veilig | Zeer geïsoleerd en veilig |
Inzet & Startup Tijd | gemiddeld 1-3 minuten | Gemiddeld 1-3 seconden |
Gebruik van hulpbronnen | Gemiddelde | Hoog |
Kosten | Hoger | Laag |
orkestratie | Okay | Zeer efficiënte |
Gebruikers verhalen | Isolatie, verouderde systemen, GUI | Microservices, DevOps, schaalvergroting |
- Architectuur: Virtuele machines zijn ontworpen om meerdere besturingssystemen naast elkaar te laten draaien. Elk besturingssysteem is volledig geïsoleerd en heeft een vaste hoeveelheid resources toegewezen gekregen. Containers daarentegen draaien op hetzelfde besturingssysteem maar in verschillende virtuele omgevingen. Elke container bevat alleen bibliotheken die hij nodig heeft en deelt beschikbare hardwarebronnen met anderen.
- Beeld maat: De kleinste containerimage is een Docker-bestand van 4.8 MB dat bij compressie neerkomt op 2 MB. De meeste containerbestanden zijn gemiddeld enkele honderden megabytes, met de grootste rond de 700 MB. Virtuele machines daarentegen beginnen vanaf ongeveer 10 GB en kunnen oplopen tot 150 GB.
- Isolatie & Beveiliging: Virtuele machines draaien op hun exclusieve CPU-thread(s) en hebben toegang tot een beperkt gebied van het fysieke RAM. Hierdoor zijn ze minder vatbaar voor aanvallen, zowel van binnenuit als van buitenaf. Containers daarentegen delen een besturingssysteem en dit maakt ze vatbaarder voor aanvallen, ongeacht hun beveiligingsimplementaties.
- Implementatie- en opstarttijd: Met voornamelijk megabytes aan gegevens om te laden en te installeren, en het niet nodig is om een systeem op te starten vanaf schijven, verslaan containers virtuele machines zonder meer als het op snelheid aankomt. De typische container heeft slechts enkele seconden nodig om te implementeren, terwijl een virtuele machine minuten nodig heeft.
- Gebruik van hulpbronnen en kosten: Virtuele machines hebben een lagere dichtheid per fysieke server omdat elke VM specifieke CPU-, RAM- en opslagbronnen vereist. De dichtheid van containers op een systeem hangt af van hun cumulatieve resourcegebruik.
- orkestratie: Beide systemen kunnen worden georkestreerd met behulp van de juiste applicaties. Docker Swarm en Kubernetes zijn populair voor containers, terwijl VM's ook kunnen worden georkestreerd met behulp van Kubernetes-oplossingen.
Welke oplossing past bij u?
Nu je de verschillen tussen containers en virtuele machines hebt gezien, moet je ook erkennen dat elk systeem scenario's heeft waarin het het beste werkt. Het volgende is dus een lijst van wanneer containers moeten worden gebruikt en wanneer VM's moeten worden gebruikt.
Wanneer containers gebruiken
- Microservices: Als u een gedistribueerde applicatiearchitectuur gebruikt, waarvan de verschillende onderdelen zijn ontworpen om onafhankelijk als microservices te werken, dan is een container waarschijnlijk de beste keuze.
- Controle van Milieu: Containers zijn ook ideaal voor situaties waarin u absolute controle over de omgeving nodig heeft, aangezien elke containerimage een exacte en 100% repliceerbare uitvoeringsomgeving bevat.
- Snelle implementatie: Containers kunnen binnen enkele seconden worden geladen, waardoor ze de ideale technologie zijn voor het snel implementeren van applicaties op aanvraag. Deze omvatten het testen van software, orkestratie en schaalvergroting van productiesystemen.
- Efficiënt gebruik van hulpbronnen: Containers kunnen de hardwarebronnen van een machine beter maximaliseren vanwege hun ontwerp, aangezien elke container flexibel is met zijn CPU- en geheugengebruik.
- Horizontaal en verticaal schalen: Containers werken goed voor zowel horizontale als verticale schaalsituaties. Horizontaal schalen is het eenvoudig lanceren van meer containers om hogere workflows aan te kunnen, terwijl verticaal schalen de toename is van de CPU- en geheugentoewijzingen van de specifieke container of containergroep.
Wanneer virtuele machines gebruiken
- Sterke applicatie-isolatie: Een virtuele machine is een goede oplossing wanneer u code moet uitvoeren in een omgeving die volledig geïsoleerd is van andere processen. Een voorbeeld is het uitvoeren van software die waarschijnlijk is geïnfecteerd met malware.
- GUI: Een virtuele machine kan de juiste oplossing zijn wanneer u een toepassing moet uitvoeren die communiceert via een grafische gebruikersinterface.
- Verticaal schalen: U kunt VM-applicaties eenvoudig verticaal schalen door hun CPU- en geheugentoewijzing te vergroten vanuit de virtualisatiesoftware.
- Toegang op hardwareniveau: Virtuele machines zijn ook geweldig voor applicaties die veel resources nodig hebben of die directe toegang tot de CPU of specifieke hardwareconfiguraties nodig hebben.
- Verouderde applicaties: Sommige toepassingen zijn afhankelijk van specifieke bibliotheken of bronnen van het besturingssysteem. Ze kunnen dus het beste worden uitgevoerd in de exacte omgeving die ze nodig hebben.
Lijst met virtuele machine- en containerisatietools
Er zijn tal van tools en oplossingen voor het maken en beheren van virtuele machines en containers. Dus, hier is een korte lijst van de meest populaire.
- Oracle VirtualBox: Gratis en open source beheerder van virtuele machines
- havenarbeider: Creatie en beheer van open-sourcecontainers
- Kubernetes: Open-source containerorkestratiesysteem
- Gecontaineriseerd: Container-runtime voor geavanceerde gebruikers
- VMware Workstation: Voer virtuele machines uit op Linux en Windows
- Microsoft Hyper-V: Voer virtuele machines uit op Windows
- RedHat Openshift: Enterprise-grade virtualisatie- en cloudbeheerplatform
- Nomade: Voor orkestratiebeheer
- Apache Mesos: Open-source clusterbeheerder
- boer: Voor het beheer van meerdere Kubernetes-clusters
- Google Cloud: De Kubernetes-engine van Google
- AWS: Amazon-webservices, inclusief de serverloze fargate containerbeheerder
Veelgestelde Vragen / FAQ
Hier zijn enkele veelgestelde vragen over virtuele cloudmachines en gecontaineriseerde applicaties.
Wat is veiliger, een virtuele machine of een container?
Een virtuele machine is technisch veiliger dan een container.
Wat is het verschil in grootte tussen virtuele machines en containers?
Virtuele machines zijn meestal gigabytes groot, terwijl containers meestal megabytes groot zijn.
Kunnen virtuele machines en containers samen worden gebruikt?
Ja, u kunt een container-engine in een virtuele machine uitvoeren.
Wat is schaalbaarder, een virtuele machine of een container?
Containers zijn eenvoudiger en sneller te schalen dan virtuele machines.
Kunnen containers tussen hosts worden gemigreerd?
Ja, een container kan worden gemigreerd tussen hosts met het juiste orkestratieplatform.
Hoeveel virtuele machines kan ik draaien op een enkele host?
Het hangt vooral af van de hoeveelheid beschikbare CPU-kernen en RAM. En tot op zekere hoogte hangt het ook af van het type werklast en de efficiëntie van de hypervisor.
Conclusie
We zijn aan het einde van deze vergelijking van virtuele cloudmachines en containers gekomen. En zoals je hebt gezien, zijn beide technologieën waardevol voor het implementeren en beheren van applicaties in de cloud.
Uw keuze tussen de twee hangt echter altijd af van uw behoeften. U kunt het op elk moment beter doen met een virtuele machine, een containerbenadering of beide.