Eucalyptus is een opensource-project dat Amazons Elastic Compute Cloud (EC2) in je eigen datacenter namaakt. Het is interfacecompatibel met EC2, wat betekent dat alles wat je op EC2 kan doen, ook in een eigen privé-cloud kan. Daardoor is Eucalyptus (wat overigens staat voor het mondvol "Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems") een ideaal middel om cloud-technologie te evalueren en je cloud daarna te migreren naar een productieomgeving op Amazons servers.

Eucalyptus bestaat in Ubuntu 9.04 uit de volgende drie pakketten:

- eucalyptus-cloud: Dit is de cloud-controller, die compatibel is met de EC2-API en ook het Amazon S3-compatibele storagesysteem Walrus aanbiedt. Hiervan heb je er maar één nodig.

- eucalyptus-cc: Dit is de cluster-controller, die de master-server uitmaakt en het virtuele netwerk implementeert. Ook hiervan heb je er normaal maar één nodig.

- eucalyptus-nc: Dit is de node-controller, die de hypervisor KVM bestuurt om de virtuele machines te beheren. Hiervan installeer je er één op elke fysieke server die virtuele machines voor je cloud draait.

Je kunt de drie componenten van Eucalyptus gerust op één computer met Ubuntu 9.04 installeren voor een eerste kennismaking met de technologie. De uitbreiding tot meerdere nodes laten we aan de lezer over, maar dat wijst zichzelf uit.

Aan de slag

Installeer eerst de drie componenten van Eucalyptus:

sudo apt-get install eucalyptus-cloud eucalyptus-cc eucalyptus-nc

Na de installatie (met heel wat dependencies) zijn de Eucalyptus-services opgestart en kun je inloggen op de webinterface op https://localhost:8443/ In Firefox 3 moet je het SSL-certificaat eerst aanvaarden.

Je krijgt nu een login-venster te zien. Vul daar als gebruikersnaam en wachtwoord admin in. Eucalyptus vraagt je nu prompt om je wachtwoord te veranderen. Daarna vul je het e-mailadres van de beheerder van de cloud in. Boodschappen van je privé-cloud zullen hiernaartoe worden gestuurd. Het systeem moet hiervoor wel e-mails kunnen zenden, dus installeer bijvoorbeeld de mailserver Postfix. Een laatste melding die je krijgt is de URL van de S3-compatibele Walrus-server. Normaal staat dit juist ingevuld en hoef je alleen maar op "Confirm URL" te klikken.

Als alles goed is gegaan, zie je nu de Configuration-tab van de webinterface. Onder de titel "Clusters" zie je nu dat er geen clusters gespecificeerd zijn, dus de cloud is nog niet klaar. Klik op "Add cluster" en vul dan de gegevens in. Voor onze configuratie volstaan we met localhost als hostnaam. Klik dan op "Save cluster configuration".

Voeg nu de lokale computer als node toe aan de cluster met het volgende commando:

sudo euca_conf -addnode naamvanserver

Volg de instructies die je dan krijgt. Als je meerdere nodes wilt toevoegen, voer je hetzelfde euca_conf-commando uit voor elke server.

Door de clusterconfiguratie te bewaren in de webinterface, heeft Eucalyptus cryptografische sleutels aangemaakt, maar die moeten nog naar alle nodes doorgestuurd worden. Dit kan niet vanuit de webinterface, maar moet in een console met de volgende opdracht:

/usr/sbin/euca_sync_key -c /etc/eucalyptus/eucalyptus.conf

Je wordt nu gevraagd naar je wachtwoord op elk van de clusternodes. Ook als je enkel de lokale computer als node gebruikt, moet je dit doen.

EC2-tools

Om nu Eucalyptus met de EC2-tools te kunnen gebruiken, moet je gebruikerscredentials aanmaken. Klik dus in de webinterface op de "Credentials"-tab en daarin op de "Download Certificate"-knop. Hiermee download je een X.509-certificaat dat je kunt gebruiken met de Amazon EC2-tools en met third-party beheertools, zoals die van RightScale.

Maak nu een directory .euca in je thuisdirectory aan en unzip daarin het credentials-bestand:

mkdir ~/.euca

unzip ~/Desktop/euca2-admin-x509.zip -d .euca

Naast de certificaatbestanden is nu ook een bestand eucarc uitgepakt, dat de omgevingsvariabelen bevat die je moet gebruiken telkens als je de EC2-commandline tools wilt aanroepen. Nu moeten we die laatste nog installeren en nog wat commando's aan eucarc toevoegen. Omdat Eucalyptus nog niet compatibel is met de EC2-tools in Ubuntu 9.04, is het proces wat omslachtig, maar het hoeft slechts één keer te gebeuren:

cd ~/.euca

sudo apt-get install ec2-api-tools ec2-ami-tools

sudo apt-get remove ec2-api-tools ec2-ami-tools

wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools-1.3-30349.zip

unzip ec2-api-tools-1.3-30349.zip

mv ec2-api-tools-1.3-30349 ec2

wget http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools-1.3-26357.zip

unzip ec2-ami-tools-1.3-26357.zip

mv ec2-ami-tools-1.3-26357 ec2ami

echo 'export JAVA_HOME=/usr' >> eucarc

echo 'export EC2_HOME=~/.euca/ec2' >> eucarc

echo 'export EC2_AMITOOL_HOME=~/.euca/ec2ami' >> eucarc

echo 'export PATH=$PATH:$EC2_HOME/bin:$EC2_AMITOOL_HOME/bin' >> eucarc

Het bestand eucarc met alle benodigde omgevingsvariabelen laad je nu telkens als je de EC2-tools gebruikt met het commando:

source ~/.euca/eucarc

Netwerk

Op elke node waar Eucalyptus zijn virtuele machines draait moet je nu nog de primaire netwerkinterface configureren als bridge. Eucalyptus zal de virtuele netwerkinterfaces van de virtuele machines op deze bridge aansluiten. De standaardconfiguratie van Eucalyptus gaat er ook van uit dat je een DHCP-server in je netwerk gebruikt, zodat de virtuele machines dan automatisch een IP-adres verkrijgen.

We zetten het netwerk stop:

sudo invoke-rc.d networking stop

En daarna passen we het bestand /etc/network/interfaces als volgt aan:

auto lo

iface lo inet loopback

auto br0

iface br0 inet dhcp

bridge_ports eth0

bridge_fd 9

bridge_hello 2

bridge_maxage 12

bridge_stp off

Daarna herstarten we het netwerk:

sudo invoke-rc.d networking restart

Nu schakelen we de node-controller uit:

sudo /etc/init.d/eucalyptus-nc stop

Daarna zetten we in /etc/eucalyptus/eucalyptus.conf VNET_BRIDGE op "br0". Hierna starten we de node-controller opnieuw:

sudo /etc/init.d/eucalyptus-nc start

En nu is onze cloud klaar om virtuele machines te draaien.

Maak een VM-image

We hebben nu een cloud, dus hebben we alleen nog virtuele machines nodig om erop te draaien. We maken de officiële Ubuntu-image aan met de volgende commando's:

kernel=vmlinuz-2.6.28-11-server

ramdisk=initrd.img-2.6.28-11-server

image_name=rightscale-euc-1.0.img

image_tar_name=$image_name.tgz

image_prefix=$image_tar_name.part.

num_image_parts=23

mkdir /tmp/euc

cd /tmp/euc

curl -o $kernel http://s3.amazonaws.com/rightscale-eucalyptus/$kernel

curl -o $ramdisk http://s3.amazonaws.com/rightscale-eucalyptus/$ramdisk

for i in `seq -w 0 $(($num_image_parts - 1 ))`; do

curl -o ${image_prefix}$i http://s3.amazonaws.com/rightscale-eucalyptus/${image_prefix}$i

done

cat $image_prefix* > $image_tar_name

tar -xzvf $image_tar_name

mkdir ~/.euca/images

cd ~/.euca/images

mv /tmp/euc/$image_name .

mv /tmp/euc/$kernel .

mv /tmp/euc/$ramdisk .

rm -rf /tmp/euc

Nu bundelen we de kernel en ramdisk met de volgende interactieve commando's:

ec2-bundle-image -i ~/.euca/images/vmlinuz-2.6.28-11-server --kernel true

ec2-upload-bundle -b kernel-bucket -m /tmp/vmlinuz-2.6.28-11-server.manifest.xml

ec2-register kernel-bucket/vmlinuz-2.6.28-11-server.manifest.xml

ec2-bundle-image -i ~/.euca/images/initrd.img-2.6.28-11-server --ramdisk true

ec2-upload-bundle -b ramdisk-bucket -m /tmp/initrd.img-2.6.28-11-server.manifest.xml

ec2-register ramdisk-bucket/initrd.img-2.6.28-11-server.manifest.xml

ec2-describe-images

Het laatste commando geeft informatie over je elastic kernel image en elastic ram image, bijvoorbeeld:

IMAGE eki-D77114C6 kernel-bucket/vmlinuz-2.6.28-11-server.manifest.xml admin available public i386 kernel

IMAGE eri-333F1605 ramdisk-bucket/initrd.img-2.6.28-11-server.manifest.xmladmin available public i386 ramdisk

Nu maken we van het geheel een gebundelde image, waarbij je de geschikte eki- en eri-getallen ingeeft:

ec2-bundle-image -i ~/.euca/images/rightscale-euc-1.0.img --kernel eki-D77114C6 --ramdisk eri-333F1605

ec2-upload-bundle -b image-bucket -m /tmp/rightscale-euc-1.0.img.manifest.xml

ec2-register image-bucket/rightscale-euc-1.0.img.manifest.xml

Na dit laatste commando geeft het commando ec2-describe-images ook informatie over het image:

IMAGE emi-A9AA1436 image-bucket/rightscale-euc-1.0.img.manifest.xml admin available public i386 machine eki-D77114C6 eri-333F1605

Draai het image op je cloud

Nu kun je een virtuele machine draaien op basis van je EC2-image. Met het volgende commando maak je eerst een ssh-sleutelpaar aan, waarmee je als root kunt inloggen in de virtuele machine:

ec2-add-keypair mykey > ~/.euca/mykey.priv

chmod 0600 ~/.euca/mykey.priv

Draai nu een instance van je geregistreerde image, waarbij je het juiste emi-getal ingeeft:

ec2-run-instances emi-A9AA1436 -k mykey -t c1.medium

Met c1.medium duiden we aan dat het image groot is. In de Configuration-tab van de webinterface zie je de verschillende klassen. De klasse c1.medium wil zeggen dat het image 256 MB RAM heeft en 2 GB schijfruimte.

In de uitvoer krijg je de status te zien, die je later ook kan opvragen met het commando ec2-describe-instances. In het begin is die status 'pending', maar na een tijd moet die 'running' zijn. Wanneer de virtuele machine een IP-adres heeft gekregen via DHCP, dan zullen de adresvelden ook veranderen van 0.0.0.0 naar een IP-adres. Daarna kan je met je ssh-sleutel inloggen op dit IP-adres:

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

Naar de toekomst

Houd er rekening mee dat Eucalyptus onder Ubuntu nog een 'technology preview' is. Uit de uitleg in dit artikel blijkt wel dat het nog een omslachtig proces is om een privé-cloud op te zetten. De Ubuntu-ontwikkelaars willen vanaf nu vooral het proces wat stroomlijnen, zodat Ubuntu 9.10 aan het einde van dit jaar volledig klaar is voor cloud computing. Zo komt er een portfolio van Ubuntu-images voor standaardtaken. Maar wie er niet voor terugdeinst om zelf de handen uit de mouwen te steken, kan nu zeker al aan de slag met Ubuntu 9.04 en de behulpzame documentatie.

Bron: Techworld