OpenStack op Docker of Docker in OpenStack? (december 2015)

Het flexibel en dynamisch maken van clouds is een hot topic. Maar omdat elke aanbieder zijn eigen oplossingen heeft, blijkt in de praktijk al snel een vendor lock-in te ontstaan. Wat zou het toch mooi zijn als server applicatie-omgevingen met een druk op de knop verplaatst kunnen worden van de ene provider die met Microsoft-oplossingen werkt naar de andere provider die met VMware-oplossingen werkt of andersom. Klinkt simpel, maar dat is het niet. OpenStack en het Open Containers-initiatief (OCI) gaan ons echter helpen naar agile IT.

OpenStack en Docker

Kijkende naar de cloud zijn er twee opvallende technologieën, waar elke zichzelf respecterende cloud-aanbieder zich aan wil verbinden. De eerste is OpenStack, het consortium dat standaarden voor orkestratie van gevirtualiseerde (cloud) resources mogelijk maakt. Zoals de naam al zegt, is het een stack van open source producten en onderdelen, waar de vele fabrikanten en ontwikkelaars hun eigen tools en omgeving aan toe kunnen voegen. Er bestaat dus niet iets als “het product OpenStack“.  Een wat jongere trend waar veel partijen heil in zien, is Docker. Met Docker draai je op één compact besturingssysteem meerdere virtualisatie environments (VE’s) ofwel virtuele instances (VI’s) van hetzelfde besturingssysteem. Elke VE of VI draait in een geïsoleerde container, vandaar dat het concept ook wel containervirtualisatie of containerization wordt genoemd. Ook besturingssysteemvirtualisatie is en correcte omschrijving van het concept. Het is simpel een complexe Linux-serverapplicatie op te pakken en te verplaatsen. Hoewel containertechnologie verre van nieuw is, staat deze dankzij Docker en CoreOS (een veelgebruikte Linux-distro voor Docker) en spin-off als Rocket en diverse andere containeroplossingen de laatste twee jaren sterk in de belangstelling. Ook Microsoft is met Windows Server 2016, Nano Server druk in de weer met containers, om ook Windows serverapplicatie-omgevingen te ondersteunen, die zelfs met Docker-tools beheerd kunnen worden. De “religieuze containeroorlog” is al vele maanden in volle gang. Ook hier is wildgroei en is er behoefte aan standaardisatie en uitwisselingsmogelijkheden ontstaan. Het Open Containers-initiatief (sinds juni van dit jaar) onder de Linux Foundation, wil een open standaard ontwikkelen voor containerformaten en -runtimes. De standaard wordt gepubliceerd op GitHub (https://github.com/opencontainers/specs). Docker zelf doneert het containerformaat, de runtime en libraries aan de OCI.

Overlap

We zien dat enkele organisaties die lid zijn van het OpenStack-consortium ook sponsor zijn van OCI. Zo komen we bedrijven als HP, IBM, Red Hat, Suse en anderen bij beiden tegen. De overlap is verre van 100% en zal dat ook niet worden. De OCI bestaat pas kort en wil bewust een kleine en platte organisatie blijven, met een beperkte scope. OpenStack heeft in vijf jaren tijd vele honderden (!) sponsors opgeleverd. Sommigen ervan zijn wellicht alleen maar lid om de ontwikkelingen en vooral de persaandacht die ervan uit gaat niet te missen, andere dragen serieus bij aan de open source community. Opvallend is dat grote cloud-namen als AWS (Amazon) en Microsoft ontbreken in het indrukwekkende lijstje van OpenStack-leden, Google heeft zich onlangs (in juli 2015) wel aangesloten bij OpenStack. AWS en Microsoft zijn wel OCI-sponsor. De vraag blijft natuurlijk waarom OCI nodig is als er al OpenStack bestaat? Past containertechnologie niet bij OpenStack dat toch vooral met virtualisatie te maken heeft? Er is wel degelijk een relatie tussen Docker en OpenStack, hoewel het totaal andere concepten zijn vullen ze elkaar prima technologisch aan. Dit kan op twee manieren worden gerealiseerd.

OpenStack orkestreert Docker

De eerste manier waarop OpenStack en Docker elkaar aanvullen, is dat OpenStack in te zetten is als beheeromgeving voor Docker. Immers, als OpenStack al goed is in het orkestreren van virtual machines, moet dat ook kunnen met Docker-containers. Docker kan als virtual machine al draaien op een hypervisor en met uitbreidingen aan OpenStack kunnen individuele Docker-applicaties op die gevirtualiseerde en als virtual machine draaiende Docker worden beheerd. OpenStack heeft sinds mei vorig jaar een containers-projectteam dat deze functionaliteit aan het ontwikkelen is. De containerbeheercomponent in OpenStack die wordt ontwikkeld, wordt Magnum genoemd. Critici menen echter dat de eenvoud die Docker feitelijk biedt, door opname in OpenStack verzuipt binnen de complexe architectuur van OpenStack. Toch voegt OpenStack ook iets belangrijks toe aan Docker: multi-tenancy. Het is met Docker lastig containers aan meerdere afnemers in de cloud (klanten) aan te bieden. Het ligt daarom voor de hand op de hardware eerst een hypervisor te installeren, waarop meerdere virtual machine draaien, en waarbij elke virtual machine fungeert als Docker host. Dit beheren we dan met OpenStack. De individuele containers op Docker, beheren we met de reguliere Docker-tools. Maar als een organisatie alleen containers nodig heeft, is OpenStack overkill. Er is dan meer baat bij een oplossing die containers op een hoger aggregatieniveau aanbiedt, zoals het op het open source Kubernetes gebaseerde Google’s Container Engine. Nu is Google lid van zowel de OCI als OpenStack en heeft Mirantis Kubernetes geïntegreerd met OpenStack, dus wellicht komt het allemaal op zijn pootjes terecht.

Docker containeriseert OpenStack

De tweede manier waarop OpenStack aansluit bij Docker, is dat de vele componenten van het coomplexe OpenStack-platform afzonderlijk kunnen worden gecontaineriseerd met Docker. OpenStack bestaat uit allerlei componenten, serverapplicaties, zoals MariaDB, RabbitMQ, KeyStone of Nova. Al deze applicaties moeten gepatcht en vernieuwd worden. Dit zal veelal individueel van elkaar gebeuren, het is niet zo dat we van OpenStack 2.x alles upgraden naar OpenStack 3.x. En dat is waar Docker goed van pas komt, namelijk voor het vereenvoudigen van de complexiteit van het onderhoud en life cycle management van OpenStack zelf.  Waarom maken we van elke component van OpenStack geen Docker-container? Dit geeft OpenStack de beheervoordelen van containers. Afzonderlijke applicaties kunnen snel worden getest, vernieuwd of teruggedraaid bij problemen. OpenStack onderzoekt containerisatie ook zelf middels het OpenStack project Kolla.

De tijd zal het leren

OpenStack, met of zonder Docker, heeft weliswaar veel mogelijkheden voor cloud orkestratie, maar is ook complex. Grote omgevingen in de public cloud of gehoste omgevingen voor grote organisaties hebben er veel baat bij (zoals PayPal of Walmart), maar de technologie heeft nog lang niet de toch wat terughoudende enterprises als interne cloud oplossing bereikt en wellicht is dat ook niet de doelgroep van OpenStack. Docker daarentegen is door zijn eenvoud erg populair aan het worden als provisioning omgeving, zonder de complexiteit van een ‘management platform’, zeker nu Docker ook zelf meer en mee beheertools krijgt, waaronder Kitematic, de GUI voor Docker. Het zelf intern introduceren van deze containertechnologie bij bedrijven wordt hierdoor simpel en concurreert zelfs met virtual machine-technologie. De tijd zal leren hoe containers en OpenStack samen gaan, hoe dit duo de cloud-wereld gaat veroveren en hoe containers hun plek veroveren naast de al bijna traditioneel te noemen virtual machines. Maar dat beiden de cloud-wereld de komende jaren drastisch veranderen, staat buiten kijf.