Lichtgewicht virtuele machines met FreeBSD jails
Gepubliceerd: Vrijdag 28 augustus 2009
Auteur: Koen Vervloesem
Wie wil gaan virtualiseren hoeft niet altijd direct VMware, Hyper-V of Xen te gaan draaien. Een aantal besturingssystemen heeft virtualisatie al in zich. Het jails-subsysteem van FreeBSD zorgt bijvoorbeeld voor lichtgewicht virtualisatiecontainers. Deze virtualisatieoplossing behaalt een hogere performance dan volledige virtualisatie. In dit artikel gaan we ermee aan de slag.
Het jails-systeem van FreeBSD zorgt voor virtualisatie op besturingssysteemsniveau, ook bekend als 'operating-system level virtualization': toepassingen binnen een jail denken dat ze op een standalone FreeBSD-systeem draaien, omdat ze volledig geïsoleerd zijn van toepassingen in een andere jail. Maar in realiteit draaien alle jails op één FreeBSD-kernel, namelijk die van het host-systeem. Dat betekent dat deze virtualisatieoplossing een verwaarloosbare impact heeft op de performance van de containers.
Daarmee zijn jails een prima oplossing voor service providers die de services van hun klanten van elkaar willen scheiden, zonder tot de overhead van volledige virtualisatie of paravirtualisatie te moeten gaan. Verder zijn interessant om verschillende versies van software uit te proberen zonder je systeemconfiguratie om zeep te helpen. En tot slot is het gewoon een efficiënte manier om serverprocessen van elkaar af te scheiden in een sandbox en dus de veiligheid van een systeem te verhogen. Een nadeel is wel dat jails niet zo flexibel zijn: elke jail moet dezelfde kernelversie draaien als het basissysteem. En je kunt geen Windows- of Linux-gast draaien in een jail op FreeBSD.
Onderdelen
Een jail bestaat in FreeBSD uit vier basiscomponenten:
* Een directory-subtree: dit is de directorystructuur die de processen binnen de jail te zien krijgen. Een proces kan hieruit niet ontsnappen.
* Een hostnaam: dit is de hostnaam die in de jail gebruikt wordt.
* Een IP-adres: dit is het IP-adres dat aan de jail toegekend wordt. Dit kan op geen enkele manier veranderd worden tijdens de levensduur van de jail.
* Een commando: een uitvoerbaar programma dat in de jail gedraaid wordt, relatief ten opzichte van de root-directory van de jail.
Uiteraard kan elke jail ook eigen gebruikers hebben, je hebt in een jail een volledig functioneel FreeBSD-systeem.
Aan de slag
De basis van FreeBSD jails wordt gelegd door het commando jail, dat een jail kan draaien en beheren. In de manpagina staat heel wat uitleg en ook wat voorbeelden. Als je verschillende jails aanmaakt, heb je echter voor elke jail een volledige kopie van het basissysteem van FreeBSD nodig. Voor tientallen tot honderden jails schaalt het systeem dus niet echt. Bovendien vergt het configureren en up-to-date houden van alle jails heel wat werk.
