Het zones-systeem van OpenSolaris zorgt voor virtualisatie op besturingssysteemsniveau, zogenaamde 'operating-system level virtualization', te vergelijken met de jails in FreeBSD. Met dit verschil dat je in zones wel andere besturingssystemen kunt draaien. Toepassingen binnen een zone zijn volledig geïsoleerd van andere zones. Maar in realiteit draaien alle zones op dezelfde OpenSolaris-kernel. Dat maakt van zones een efficiënte oplossing om toepassingen van elkaar te scheiden zonder de overhead van volledige virtualisatie.

Zones zijn in het OpenSolaris-systeem ingebakken, zover zelfs dat de standaard OpenSolaris-installatie beschouwd wordt als een zone, de globale zone. Andere zones die je installeert worden als niet-globaal aangeduid. Verder kun je nog verschillende types van zones aanmaken: native of branded. Een native zone erft de karakteristieken van de globale zone en is dus een Solaris-installatie van dezelfde versie, terwijl een branded zone een ander besturingssysteem of een andere kernelversie in een zone emuleert.

De lx brand maakt Linux in een zone mogelijk, terwijl de solaris8 en solaris9 brands het mogelijk maken om legacy toepassingen voor oudere versies van Solaris in een zone op Solaris 10 voor SPARC te draaien. OpenSolaris gebruikt sinds versie 2009.06 standaard geen native zones maar de ipkg brand voor zones die je aanmaakt, ter integratie met het Image Packaging System van OpenSolaris. In dit artikel gaan we enkel in op de ipkg zones.

Aan de slag

Maak eerst een ZFS dataset aan waar al je zones in aangemaakt worden:

# zfs create -o mountpoint=/zones tank/zones

Configureer nu je zone:

# zonecfg -z myzone

myzone: No such zone configured

Use 'create' to begin configuring a new zone.

zonecfg:myzone> create

zonecfg:myzone> set zonepath=/zones/myzone

zonecfg:myzone> add net

zonecfg:myzone:net> set physical=nge0

zonecfg:myzone:net> set address=192.168.1.50

zonecfg:myzone:net> end

zonecfg:myzone> exit

Zorg ervoor dat je in de netwerkinstellingen bij physical de juiste netwerkinterface ingeeft.

Nadat de zone geconfigureerd is, vragen we een lijst op van alle zones met zoneadm list –cv. We krijgen dan de status van elke zone te zien: de globale zone is 'running' en heeft een 'native' brand, terwijl de zone die we net aangemaakt hebben als status 'configured' heeft en een 'ipkg' brand.

Nu installeren we de zone. Eigenlijk creëert dit een tweede installatie van OpenSolaris in de zone:

# zoneadm -z myzone install

Dit commando kan enkele minuten duren, waarna de status van de zone veranderd is van 'configured' in 'installed.'

Wanneer de zone geïnstalleerd is, starten we ze op met het volgende commando:

# zoneadm -z myzone boot

Dit opstarten duurt normaal gezien slechts enkele seconden, omdat het hier om virtualisatie op het niveau van het besturingssysteem gaat: er moet immers geen kernel meer opgestart worden. Daarna zie je dat de status van de zone veranderd is van 'installed' naar 'running.'

Nu loggen we in de console van onze zone in:

# zlogin -C myzone

Deze eerste login duurt even omdat OpenSolaris nog alle services moet initialiseren. Daarna moet je de configuratie van je verse installatie nog doorvoeren. Je krijgt dus de vraag om een hostnaam, tijdzone, rootwachtwoord, enzovoort in te geven, net zoals je bij een normale installatie van OpenSolaris doet. Daarna reboot de zone en krijg je bij het inloggen een loginprompt te zien.

Nu is je zone klaar, en kun je heel eenvoudig een commando in de niet-globale zone uitvoeren van in je OpenSolaris-installatie in de globale zone:

# zlogin myzone uptime

Je kunt natuurlijk ook inloggen op de zone (met zlogin myzone) en daarin dan commando's uitvoeren, inclusief halt, reboot en shudown. Een zone kan echter ook van in de globale zone gestopt worden met het volgende commando:

# zoneadm -z myzone halt

Tips

Aangezien zones in OpenSolaris ingebakken zijn, kennen heel wat van de basiscommando's ook opties om met zones om te gaan. Zo voegt de optie -Z aan de uitvoer van ps een kolom toe met de zone waarin elk proces uitgevoerd wordt. Met prstat -Z krijg je dan weer een overzicht van het gedrag van alle zones, zoals het aantal processen, het geheugenverbruik en het processorverbruik. Zo zie je het vlug wanneer een zone zich niet gedraagt. Ook de commando's df (de Solaris-versie in /usr/bin/, niet de GNU-versie /usr/gnu/bin/ die in het standaard pad staat) en ipcs kennen de optie -Z.

Als je alleen de processen in een bepaalde zone wilt opvragen in de globale zone, dan gaat dat met:

# ps -fz myzone

Ook de commando's ipcrm, ipcs, pgrep, pkill, prstat en ptree kennen de optie -z.

Verder zijn er nog heel wat geavanceerde mogelijkheden in de configuratie van zones. Een overzicht van de huidige configuratie van een zone is op te vragen met het volgende commando:

# zonecfg -z myzone info

Je kunt de configuratie aanpassen door "zonecfg -z myzone" voor een bestaande zone myzone uit te voeren. Hier stellen we bijvoorbeeld in dat de zone automatisch opstart samen met de globale zone:

# zonecfg -z myzone

zonecfg:myzone> set autoboot=true

zonecfg:myzone> exit

Een overzicht van alle mogelijke instellingen kun je opvragen nadat je "zonecfg -z myzone" uitgevoerd hebt door het commando "help set" in te typen. Tot de mogelijkheden behoren het beperken van de systeembronnen die een zone mag gebruiken. Bekijk ook eens de manpagina's van de verschillende zone-commando's. Door het gebruik van ZFS-datasets is het bijvoorbeeld heel eenvoudig om zones te klonen of om een zone naar een andere computer te migreren.

Conclusie

Wie servers wil virtualiseren, moet niet onmiddellijk teruggrijpen naar volledige virtualisatie of paravirtualisatie. OpenSolaris biedt met zones een flexibele en lichtgewicht virtualisatieoplossing die in heel wat gevallen volstaat en ook nog eens vrij eenvoudig op te zetten is.

Bron: Techworld