Canonical introduceerde in Ubuntu 9.04 de mogelijkheid om een eigen privé-cloud van servers met virtuele machines te draaien. Hiervoor was het bedrijf een samenwerking aangegaan met het Eucalyptus-project (ondertussen als bedrijf verzelfstandigd), dat compatibel is met Amazons EC2. Een half jaar geleden bespraken we hoe je zo je eigen privé-cloud opzet. Eucalyptus was in Jaunty echter nog een technology preview, waardoor dit nog vrij omslachtig was.

In Ubuntu 9.10 is Eucalyptus onder de naam Ubuntu Enterprise Cloud (UEC) volledig in de distributie geïntegreerd en werkt het hele proces veel vlotter. Zo kun je nu rechtstreeks Ubuntu Enterprise Cloud-machines installeren vanaf de server-cd. Tijd dus om eens opnieuw een kijkje te nemen.

Laten we eerst aanstippen dat privé-clouds en publieke clouds (EC2) in Ubuntu vrij eenvoudig uit te wisselen zijn. De UEC-images van Ubuntu 9.10 zijn bijvoorbeeld zonder wijziging ook te gebruiken op Amazon EC2. Dat maakt het wel heel eenvoudig om images op een privé-cloud te draaien en bij een hoge belasting van de eigen servers tijdelijk te offloaden naar EC2.

Vereisten

Om een privé-cloud op te zetten, heb je minstens twee systemen nodig: een cluster en een node. De cluster bevat de cloud controller, cluster controller en het Amazon S3-compatibele storagesysteem Walrus. Belangrijk voor deze machine is dat ze snelle harde schijven hebben en een snelle processor (minimum 1 GHz, liefst 2 x 2 GHz). 512 MB RAM is het minimum, maar 2 GB is comfortabeler. De harde schijf moet minimaal 40 GB schijfruimte hebben en liefst 200 GB.

De node bevat de node controller, die effectief de images in de hypervisor KVM draait. Belangrijk voor deze machine is dat de processor VT-extensies heeft (te controleren met grep -cE '(vmx|svm)' /proc/cpuinfo dat een getal groter dan 0 moet teruggeven), zoveel mogelijk processorkernen (liefst ook 64 bit), heel wat RAM (minimum 1 GB, liefst 4 GB) en ook snelle harde schijven, want Eucalyptus-nodes zijn heel disk-intensief. 40 GB schijfruimte is bovendien een minimum, en liefst 100 GB.

Zorg ook voor een snel netwerk, aangezien de images honderden megabytes groot zijn en naar de nodes gekopieerd moeten worden. Hoewel 100 Mbps werkt, is Gigabit Ethernet aangeraden. Hoe sneller het netwerk, hoe sneller je UEC-images gestart kunnen worden.

Installeer de cluster

Download het ISO-bestand van Ubuntu 9.10 Server en begin de installatie op de clustermachine. Kies in het bootmenu "Install Ubuntu Enterprise Cloud", waarna je de vragen voor de normale serverinstallatie beantwoordt. Wanneer het type UEC-installatie gevraagd wordt, bevestig dan het gesuggereerde "Cluster". Tijdens de installatie geef je ook de naam van je cluster in en een bereik van ongebruikte IP-adressen op je LAN die de cluster aan virtuele machines kan toekennen, bijvoorbeeld 192.168.1.150-192.168.1.249.

Na de installatie wordt je clustermachine gereboot. Het eerste wat je hierna moet doen is zorgen dat de machine up-to-date is:

cluster:~$ sudo apt-get update

cluster:~$ sudo apt-get upgrade

Installeer de node(s)

Het installeren van de nodes is nog eenvoudiger. Zorg er gewoon voor dat ze op hetzelfde netwerk aangesloten zijn als de cluster, die al moet draaien. Kies je in het bootmenu weer voor "Install Ubuntu Enterprise Cloud", dan zal het installatieprogramma detecteren dat er al een cluster draait en je "Node" als type voor een UEC-installatie voorstellen. Gebeurt de detectie om één of andere reden toch niet, selecteer dan zelf "Node" als type. Tijdens de rest van de installatie hoef je niets UEC-specifieks meer invullen. Na de installatie wordt de node gereboot. Zorg ook hier weer dat het systeem up-to-date is:

node:~$ sudo apt-get update

node:~$ sudo apt-get upgrade

Registreer de node(s)

De cluster en node draaien nu, maar je moet de node nog registreren bij de cluster. Log daarom op die laatste in en voer de volgende opdracht uit:

cluster:~$ sudo euca_conf --no-rsync --discover-nodes

De cluster ontdekt nu alle nodes die op hetzelfde netwerk draaien, en voor elke node bevestig je dit.

Test je privé-cloud

Om te testen of je privé-cloud correct is opgezet, moet je op de cluster eerst admin credentials verkrijgen:

cluster:~$ mkdir -p ~/.euca

cluster:~$ chmod 700 ~/.euca

cluster:~$ cd ~/.euca

cluster:~/.euca$ sudo euca_conf --get-credentials mycreds.zip

cluster:~/.euca$ unzip mycreds.zip

cluster:~/.euca$ cd

Nu laad je het bestand eucarc in, dat alle benodigde omgevingsvariabelen bevat om je cloud te kunnen gebruiken:

cluster:~$ source ~/.euca/eucarc

Wil je dat dit altijd automatisch bij het inloggen gebeurt, zet deze regel dan in je ~/.bashrc.

Draai nu het commando euca-describe-availability-zones, waarmee je te zien krijgt welke types virtuele machines je op je privé-cloud kunt starten:

cluster:~$ euca-describe-availability-zones verbose

AVAILABILITYZONE zoo 192.168.1.140

AVAILABILITYZONE |- vm types free / max cpu ram disk

AVAILABILITYZONE |- m1.small 0004 / 0004 1 128 2

AVAILABILITYZONE |- c1.medium 0004 / 0004 1 256 5

AVAILABILITYZONE |- m1.large 0002 / 0002 2 512 10

AVAILABILITYZONE |- m1.xlarge 0002 / 0002 2 1024 20

AVAILABILITYZONE |- c1.xlarge 0001 / 0001 4 2048 20

De naam 'zoo' verwijst hier naar de naam van de cloud die we bij de installatie van de cluster hebben ingegeven en 192.168.1.140 is het IP-adres van de machine. Je ziet in deze lijst bijvoorbeeld dat het type c1.medium een virtuele machine met 1 CPU, 256 MB RAM en 5 GB schijfruimte voorstelt. De kolommen free en max tonen hoeveel virtuele machines van dit type je kunt draaien op je cloud.

Installeer een image

De eenvoudigste manier om een image te installeren dat je dan als virtuele machine kunt draaien is via de webinterface van UEC. Surf in je browser naar https://cluster:8443 en geef als login en wachtwoord admin in. In de volgende pagina verander je het standaardwachtwoord en geef je je e-mailadres in om meldingen te krijgen.

Klik nu op de tab Store. Hier krijg je door Canonical aangeboden images te zien die je op Ubuntu Enterprise Cloud kunt draaien. Op dit moment zijn dat 32- en 64-bit versies van Ubuntu 9.10 RC Server en een MediaWiki Demo Appliance. Klik op Install naast het gewenste image, bijvoorbeeld de 64-bit Ubuntu-server. Wanneer het image gedownload en geïnstalleerd is, klik je op "How to run?" om de commando's te bekijken die je moet uitvoeren om het image te starten. Het image staat nu ook vermeld in de lijst in de tab Image.

Bundel zelf een image

Je kunt ook één van de officiële Ubuntu UEC-images downloaden en zelf bundelen. Zo zie je de verschillende stappen die nodig zijn als je je eigen aangepaste images wilt maken. We tonen dit voor het officiële 64-bit image. Eerst het downloaden (op de cluster):

cluster:~$ TIMESTAMP=$(date +%Y%m%d%H%M%S)

cluster:~$ RELEASE=karmic

cluster:~$ ARCH=amd64

cluster:~$ [ $ARCH = "amd64" ] && IARCH=x86_64 || IARCH=i386

cluster:~$ UEC_IMG=$RELEASE-uec-$ARCH

cluster:~$ URL=http://uec-images.ubuntu.com/$RELEASE/current/

cluster:~$ [ ! -e $UEC_IMG.tar.gz ] && wget $URL/$UEC_IMG.tar.gz

Nu heb je een bestand karmic-uec-amd64.tar.gz, dat we uitpakken:

cluster:~$ [ ! -e $UEC_IMG.img ] && tar -S -xzf $UEC_IMG.tar.gz

Daarna bundelen we de kernel tot een 'Eucalyptus Kernel Image' (EKI):

cluster:~$ BUCKET_KERNEL="k-$TIMESTAMP"

cluster:~$ UEC_KERNEL=$UEC_IMG-vmlinuz-virtual

cluster:~$ euca-bundle-image -i $UEC_KERNEL -r $IARCH --kernel true

cluster:~$ euca-upload-bundle -b $BUCKET_KERNEL -m /tmp/$UEC_KERNEL.manifest.xml

cluster:~$ EKI=$(euca-register $BUCKET_KERNEL/$UEC_KERNEL.manifest.xml | grep "^IMAGE" | awk '{print $2}') && echo $EKI

Hetzelfde doen we met de ramdisk (een 'Eucalyptus Ramdisk Image' of ERI):

cluster:~$ BUCKET_INITRD="r-$TIMESTAMP"

cluster:~$ UEC_INITRD=$UEC_IMG-initrd-virtual

cluster:~$ euca-bundle-image -i $UEC_INITRD -r $IARCH --ramdisk true

cluster:~$ euca-upload-bundle -b $BUCKET_INITRD -m /tmp/$UEC_INITRD.manifest.xml

cluster:~$ ERI=$(euca-register $BUCKET_INITRD/$UEC_INITRD.manifest.xml | grep "^IMAGE" | awk '{print $2}') && echo $ERI

In de laatste stap bundelen we het image zelf (wat wel een aantal minuten kan duren) tot een 'Eucalyptus Machine Image' (EMI), dat daardoor naar je Eucalyptus-cluster geüpload wordt:

cluster:~$ BUCKET_IMAGE="i-$TIMESTAMP"

cluster:~$ UEC_IMG=$RELEASE-uec-$ARCH

cluster:~$ euca-bundle-image -i $UEC_IMG.img -r $IARCH --kernel $EKI --ramdisk $ERI

cluster:~$ euca-upload-bundle -b $BUCKET_IMAGE -m /tmp/$UEC_IMG.img.manifest.xml

cluster:~$ EMI=$(euca-register $BUCKET_IMAGE/$UEC_IMG.img.manifest.xml | grep "^IMAGE" | awk '{print $2}') && echo $EMI

Controleer nu of de kernel, ramdisk en image beschikbaar zijn:

cluster:~$ euca-describe-images

IMAGE eri-46A316D1 r-20091101181327/karmic-uec-amd64-initrd-virtual.manifest.xml admin available public x86_64 ramdisk

IMAGE emi-3F2F123F i-20091101181327/karmic-uec-amd64.img.manifest.xml admin available public x86_64 machine

IMAGE eki-63D61762 k-20091101181327/karmic-uec-amd64-vmlinuz-virtual.manifest.xml admin available public x86_64 kernel

In de webinterface zijn de images nu ook te zien in de tab Images.

Start je Eucalyptus Machine Image

Voor we de EMI op onze cloud kunnen starten, moeten we ervoor zorgen dat we erop kunnen inloggen. Maak daarom een SSH-sleutel aan en zet poort 22 op al je instances open:

cluster:~$ euca-add-keypair mykey > ~/.euca/mykey.priv

cluster:~$ chmod 0600 ~/.euca/mykey.priv

cluster:~$ euca-describe-groups # zonder deze regel geeft de volgende regel vreemd genoeg een foutmelding.

cluster:~$ euca-authorize default -P tcp -p 22 -s 0.0.0.0/0

Nu kunnen we een virtuele machine van het type c1.medium opstarten met het EMI-id dat we eerder met euca-describe-images opgezocht hebben:

cluster:~$ euca-run-instances -k mykey emi-3F2F123F -t c1.medium

RESERVATION r-46DE0817 admin admin-default

INSTANCE i-40A607C3 emi-3F2F123F 0.0.0.0 0.0.0.0 pending mykey 2009-11-01T17:34:41.822Z eki-63D61762 eri-46A316D1

Wacht nu tot de toestand van "pending" veranderd is naar "running", wat voor het eerste instance en als je een traag netwerk hebt wel een aantal minuten kan duren. Met het volgende commando kun je dit om de vijf seconden opvragen:

cluster:~$ watch -n 5 euca-describe-instances

RESERVATION r-46DE0817 admin default

INSTANCE i-40A607C3 emi-3F2F123F 192.168.1.150 172.19.1.2 running mykey 0 c1.medium 2009-11-01T17:34:41.822Z zoo eki-63D61762 eri-46A316D1

Wanneer de toestand "running" is, kijk dan naar het eerste vermelde IP-adres in de uitvoer van euca-describe-instances, dat het publieke IP-adres is. Hierop log je dan in met de gebruikersnaam ubuntu en je eerder aangemaakte sleutel:

cluster:~$ ssh -i ~/.euca/mykey.priv [email protected]

Je kunt het instance beëindigen met het juiste instance-id:

cluster:~$ euca-terminate-instances i-40A607C3

Gebruikers

Het nut van een privé-cloud blijft natuurlijk beperkt als alleen de systeembeheerder instances kan lanceren. In Ubuntu Enterprise Cloud kun je echter eenvoudig gebruikers aanmaken. De gebruiker kan gewoon in zijn browser surfen naar https://cluster:8443/ en op "Apply" klikken. Daarna geeft hij een gebruikersnaam, wachtwoord en identificatiegegevens zoals zijn naam en e-mailadres in. Nadat hij op "Sign up" geklikt heeft, krijgt hij de melding dat de beheerder van de cloud zijn aanvraag ontvangen heeft.

Als je tijdens de installatie van de cluster de mailserver correct hebt ingesteld, zal je als beheerder inderdaad een e-mail krijgen met de aanvraag voor een account. Volg dan de instructies om de account te aanvaarden. De gebruiker krijgt dan op zijn beurt een e-mail voor een bevestiging. Na het volgen van de instructies kan de gebruiker met zijn gebruikersnaam en wachtwoord inloggen en in de tab Credentials op "Download Credentials" klikken. Het resultaat is een zip-bestand. Na het uitpakken voert de gebruiker het script eucarc uit, net zoals hiervoor in de instructies voor de beheerder. Ook inloggen via SSH mogelijk maken gebeurt op dezelfde manier, evenals het opstarten van een instance. De gebruiker kan nu zijn eigen instances op de privé-cloud lanceren.

En verder

Canonical heeft zijn cloud-aanbod met Karmic Koala heel wat geherstructureerd. Zo biedt het consultancy aan, een online cursus van twee dagen om UEC te leren opzetten, ondersteuning (vanaf 4.750 dollar per jaar) en beheertools (bijvoorbeeld Landscape voor 150 dollar per beheerde machine per jaar).

Er is dus geen gebrek aan professionele omkadering voor wie zich serieus met Ubuntu Enterprise Cloud gaat bezighouden. De Cloud Store zal in de volgende versies bovendien heel wat uitgebreid worden, met mogelijk zelfs commerciële aanbiedingen. Maar Ubuntu Enterprise Cloud zelf is gratis en volledig functioneel voor wie zelf de handen uit de mouwen wil steken. Als we het vergelijken met Eucalyptus in Jaunty een half jaar geleden, is het allemaal alvast heel wat minder omslachtig. Zoals we van Ubuntu gewoon zijn is er ook weer uitstekende documentatie die je op weg helpt.

Bron: Techworld