Open source is sexy. Dat is helaas nou niet echt direct wat je denk. Als je een beeld moet vormen van open source denk je toch snel aan nerds en echte ICT mannetjes. Gelukkig is dit beeld niet correct. Bijna alle grote bedrijven doen tegenwoordig wel iets in open source. Daarbij moet je denken aan de SUSE, RedHat en Ubuntu. Maar ook grote hardware leveranciers zoals HP, Dell en IBM, leveranciers van netwerk, zoals Juniper en Cisco en zelfs software bedrijven zoals VMware, Citrix en Microsoft.

Al met al gerespecteerde bedrijven, maar waar zijn ze nou mee bezig. Welk open source project is nou zo sexy dat iedereen mee wil doen. Dit project is genaamd OpenStack. Dit is één van de grotere open source producten en hét open source cloud platform. Maar wat is er nou zo bijzonder aan OpenStack en waarom wil iedereen mee doen?

Geschiedenis

OpenStack is oorspronkelijk een product van de samenwerking tussen Rackspace en NASA. In 2010 waren Rackspace en NASA allebei opzoek naar een cloudplatform. Rackspace wilde hun eigen platform opnieuw bouwen. NASA had geëxperimenteerd met Nebula en was tot de conclusie dat dat toch niet echt was wat ze wilde. Samen zijn ze begonnen met OpenStack.
Openstack is opgebouwd uit verschillende projecten. De eerste twee projecten waren Object Storage (de code naam hiervan is Swift, wat door NASA ontwikkeld is) en Compute (met de codenaam Nova, wat door Rackspace ontwikkeld is). De eerste versie van OpenStack werd op 21 oktober 2010 uitgebracht en had de naam Austin.

Elke paar maanden wordt er een nieuwe versie van OpenStack uitgebracht, met elke keer weer nieuwe verbetering en soms ook nieuwe projecten.
In 2011 kwamen versie Bexar, Cactus en Diablo uit, waarbij ook er ook een Image store (Glance) bij kwam. In 2012 zagen de versies Essex en Folsom het daglicht, samen met centrale Identity management (Keystone), een online dashboard (Horizon), Block Storage (Cinder) en networking (Quantum, waarvan later de naam is veranderd in Neutron). In Grizzly (April 2013) zijn er veel verbeteringen doorgevoerd aan de code en in de laatste release (Havana) kunnen we nu ook gebruik maken van Heat (automatische uitrol van services) en Ceilometer (monitoring van systemen).

Projecten

Binnen OpenStack bestaan er zoals beschreven een aantal projecten. Deze projecten zijn in principe losstaande componenten die samengekoppeld kunnen worden voor een betere ervaring van het geheel. Deze projecten communiceren onderling door middel van API’s. Een voordeel hiervan is dat een beheerder zo het hele proces kan nabootsen zoals een service dit ook doet. Ook is het hierdoor mogelijk om een bepaald stuk software te vervangen door een ander stuk software. Een bekend voorbeeld hiervan is bijvoorbeeld Swift, in plaats van Swift wordt er in de implementatie van OpenStack ook veel gebruik gemaakt van Ceph als Object Store. Zodra de services van OpenStack Ceph kunnen benaderen alsof het Swift zou zijn, maakt het voor de services zelf niet uit wat voor Object Store er gebruikt wordt. Het belangrijkste is dat het werkt.

Hieronder wil ik de projecten noemen waaruit OpenStack bestaat en zal ik de diverse componenten ook kort toelichten.

Nova

Nova is waarschijnlijk het meest bekende project. Dit project is in 2010 opgezet door Rackspace. Zij wilden hun interne omgeving opnieuw opbouwen en besloten toen de code voor het project als Open Source code uit te brengen. Nova is het gedeelte wat voor de virtualisatie zorgt binnen OpenStack. Het maakt gebruik van bestaande virtualisatie systemen zoals KVM, Xen, VMware en HyperV. Ook wordt LXC en Docker ondersteunt waarbij aparte systemen gemaakt kunnen worden door middel van Linux Containers.
Nova is de managementlaag die dit alles aanstuurt en heeft de mogelijkheid om diverse acties te ondernemen op een VM. Hierbij kan gedacht worden aan het starten, stoppen, aanmaken en verwijderen van systemen. Ook het resizen van een machine (meer of minder geheugen en/of CPU) en het migreren van een machine naar een andere fysieke host is een taak van Nova. Binnen OpenStack zullen er meestal meerdere fysieke hosts zijn die deze rol hebben.

In het bijzondere geval van VMware en HyperV, zal Nova de verbinding leggen met de management server van de bestaande omgeving en zal Nova soort gelijke acties kunnen doen als dat het direct onder Linux zou kunnen doen. Helaas kan Nova nog niet alles, hier wordt wel hard aan gewerkt. Hierdoor is het bijvoorbeeld mogelijk om een bestaande omgeving te koppelen met een cloud omgeving en een migratietraject te starten.

Hieronder een overzicht van de belangrijkste acties en wat welke ‘Hypervisor’ kan:

Actie KVM Xen VMware HyperV LXC Docker
Starten / Reboot / Stoppen + + + + + +
Pauzeren + + +
Slaapstand + + + +
Console (VNC of SPICE) + + + +
Toevoegen / verwijderen v/e volume + + + +
Live migratie + + +
Snapshots + + + + +
Netwerk icm VLAN’s + + + +
Firewall integratie + +

Swift

Het project Swift is ontwikkeld door NASA als een Object Storage, dit is vergelijkbaar met S3 van Amazon. Hierdoor is het mogelijk om door middel van HTTP request data op de schijf toe te voegen, te verwijderen of te veranderen. Dit kan door middel van het REST protocol wat veel gebruikt is.
Swift heeft minimaal 3 servers nodig om de data op op te slaan. Door middel van een algoritme weet de Swift proxy (dit is de service die de koppeling verzorgt tussen OpenStack en het Swift cluster) waar de desbetreffende data staat. De data zelf wordt standaard op 3 verschillende locaties opgeslagen. Hierdoor is het geen probleem als één van de Swift servers uitvalt. Het hele systeem blijft dan door draaien.

Deze vorm van opslag wordt vooral gebruikt om grote hoeveelheden data op te slaan. Bijvoorbeeld disk images van virtuele machines. Object Storage wordt niet gebruikt als schijf voor een computer of server.

Glance

Als er een cloud instance gestart moet worden, zal er een disk image opgehaald worden vanuit Glance. Glance bewaard deze disk images en kan deze ook serveren aan een bepaalde fysieke node. Voor de meeste Linux distributies zijn er wel disk images beschikbaar die gedownload kunnen worden vanaf het internet. Deze disk images kunnen geupload worden in Glance, maar het sinds kort ook mogelijk dat Glance zelf de bestanden ophaalt vanaf internet en deze in de Image Store zet.
Glance kan zijn bestanden opslaan in Swift maar ook lokaal op de disk.

Keystone

Eén van de centrale projecten is keystone. Keystone is de centrale authenticatie service waartegen de verschillende projecten van Openstack authentiseren. In keystone is het mogelijk om diverse backends toevoegen. Standaard wordt het hier MySQL voor gebruikt, maar het is ook mogelijk om tegen een LDAP server of Active Directory te authentiseren. Hierdoor is het mogelijk om OpenStack te integreren in een standaard Windows omgeving, waarbij de migratie van bijvoorbeeld VMWare naar OpenStack stap voor stap gedaan kan worden.

Horizon

In OpenStack is het mogelijk om de services te managen via command line tools, deze command line tools communiceren met de APIs van de diverse projecten. Hierdoor kan een beheerder alle werkzaamheden verrichten. Ook is er een webinterface voor OpenStack (Horizon) waarin het mogelijk is om gemakkelijk acties te verrichten. Zo is het mogelijk om snel een nieuwe cloud instance aanmaken of de huidige status op te vragen van een cloud instance. Ook is het mogelijk om via Horizon de console te openen van een instance. Door deze webinterface open te stellen voor gebruikers, kunnen gebruikers gemakkelijk hun instances beheren zonder dat een beheerder hier tussen hoeft te komen. Dit is voor een gebruiker fijn aangezien ze zelf snel kunnen schakelen, ook de beheerder hoeft zich dan niet bezig te houden met basis werkzaamheden welke een gebruiker ook kan doen.

Quatum / Neutron

Eén van het meest uitgebreide project (en voor mij persoonlijk ook het meest uitdagende project) van Openstack is het netwerk gedeelte. Tot de Folsom release van OpenStack was het alleen mogelijk om de verschillende cloud instances door middel van een Linux Bridge en een soort NAT aan te sluiten op het netwerk. Er was geen scheiding tussen de verschillende instances. Wel kon er gebruik gemaakt worden van security groups waarbij er een firewall geplaatst werd op de compute node. Deze firewall kon dan verkeer wel of niet toelaten tot een cloud instantie.

Sinds Folsom is het netwerk gedeelte van OpenStack erg uitgebreid. Er kan nu gebruik gemaakt worden van bijvoorbeeld de Open vSwitch plugin. Met deze plugin is het mogelijk om een software defined network (SDN) te creëren. Dit type netwerk is nu sinds een jaar erg in opkomt. Met SDN wordt het huidige netwerk doorgetrokken tot in de fysieke servers. Door middel van VLANs of GRE is het mogelijk om netwerken binnen Openstack aan te maken, waardoor het mogelijk is om een netwerk specifiek voor een klant aan te maken. Deze netwerken kunnen dan niet bij elkaar komen, maar kunnen wel tussen diverse fysieke nodes gedeeld worden. Door middel van een aparte router node kan dit verkeer gemanaged worden.
Eén van de voordelen van SDN is dat dit ook kan communiceren met het normale netwerk als de netwerkapparatuur ook ondersteuning heeft voor OpenFlow (dit is het protocol wat Open vSwitch gebruikt). Steeds meer switches ondersteunen OpenFlow, zowel Cisco als HP hebben switches die dit ondersteunen.

Cinder

Naast de Object Store (Swift) heeft OpenStack ook een project wat Block Storage aanbied. Dit wordt Cinder genoemd. Door middel van Cinder kan er een aparte disk aan een instance gekoppeld worden, waardoor de instance er een nieuwe disk bij krijgt (bijvoorbeeld sdb). Als backend gebruik Cinder een LVM volume groep.

Heat

Eén van de nieuwe projecten is Heat. Door middel van Heat is het mogelijk om diverse applicaties bovenop de cloud uit te rollen. Dit is vergelijkbaar met AWS CloudFormation. Door middel van een template file kan er precies ingesteld worden hoe de applicatie uitgerold moet worden. Verder kan er beschreven worden welk type instances er gebruikt moeten worden, welke floating ips, het aantal volumes, hoe de security groep werken, welke gebruikers er zijn en dergelijk. Ook is het mogelijk om een template welke geschikt is voor AWS CloudFormation te gebruiken.

Ceilometer

Een andere nieuw project is Ceilometer. Heel simpel beschreven is het hiermee mogelijk om metering te doen in de cloud. Het is hiermee mogelijk om het verbruik van CPU en netwerk te koppelen aan een project en hier dan, door een geautomatiseerd systeem, een factuur voor te maken.

Generieke componenten

Naast de standaard project van OpenStack zijn er nog een aantal onderdelen nodig om een OpenStack cloud te draaien. Dit zijn een MessageQueue en een database.

Message queue (RabbitMQ)
Om de communicatie mogelijk te maken tussen de verschillende onderdelen van Openstack wordt er een message queue gebruikt. Een bepaald project kan een bericht op de message queue zetten. Deze kan dan door een ander project opgehaald worden, na aanleiding van dit bericht kan het zijn dat er een actie wordt ondernomen door een bepaald project. Op dit moment worden RabbitMQ, Qpid en ZeroMQ ondersteund.

Database (MySQL)
De database wordt gebruikt om data in op te slaan. Zo staan hier bijvoorbeeld de namen van de hosts is. Als database kan er gebruikt gemaakt worden van MySQL of PostgreSQL.