Unikernels

Virtuele machines en containers zijn inmiddels vaste onderdelen van de gangbare DevOps-toolset. Unikernels zijn een wat minder bekend fenomeen en kunnen nog niet rekenen op de universele appreciatie die containers inmiddels ten deel valt. Toch herbergt de techniek achter unikernels veelbelovende elementen.

Hoog tijd dus om hier eens nader op in te zoomen. Wat is een unikernel precies? Wat kun je er allemaal mee? Zijn er ook valkuilen? En wanneer is het wel of juist niet verstandig om met unikernels te werken? Lees verder voor de antwoorden op deze prangende vragen.

Wat zijn unikernels?

Om helder voor het voetlicht te brengen wat een unikernel precies is, kunnen we een vergelijking trekken met een container. Qua opbouw en inrichting lijkt een unikernel veel op een container waar alle abstractielagen van het besturingssysteem tussenuit zijn gehaald. Een unikernel verpakt de applicatie en de toepassingsafhankelijke kernelfuncties in een machine image.

Unikernels verdelen de kernel in meerdere bibliotheken en plaatsen alleen de toepassingsafhankelijke bibliotheken in één enkele image. Net als VM’s worden unikernels geïmplementeerd en uitgevoerd op virtuele machinemonitoren. Het doel van een unikernel is dan ook om een VM te herstructureren tot compactere, meer modulaire componenten die flexibel, veilig en herbruikbaar zijn.

De basis voor de unikernel-technologie werd in de jaren negentig van de twintigste eeuw gelegd door systemen als exokernel en Nemesis, maar is inmiddels sterk doorontwikkeld in oplossingen als MirageOS, OSv en IBM Nabla. Door de aankoop van het Britse bedrijf Unikernel Systems, heeft ook de innovatieve containergigant Docker zich inmiddels op het unikernelconcept gestort. Docker-CTO Solomon Hykes noemt unikernels zelfs ‘de volgende grote stap op het gebied van virtualisatie’.

De voordelen van unikernels

Hoewel unikernels buiten een bescheiden kring van specialisten nog geen massale bekendheid genieten, heeft de technologie wel een aantal potentiële voordelen. De belangrijkste pre’s hebben vooral betrekking op de terreinen veiligheid, snelheid en het optimaal benutten van resources. Tijd om de belangrijkste voordelen van unikernels eens nader onder de loep te nemen.

Minimaal aanvalsoppervlak

Omdat unikernel-images alleen de toepassingsafhankelijke bibliotheken bevatten, hebben ze een klein aanvalsoppervlak. Veel van de onderdelen die in containers en VM’s zitten en kwetsbaar zijn voor intrusieve acties, zoals ongebruikte drivers, onnodige I/O-routines en niet direct noodzakelijke support libraries, ontbreken in een unikernel. De impact van een aanval op een unikernel blijft bovendien beperkt tot het onderdeel in die specifieke unikernel en heeft geen serieuze invloed op andere componenten van je DevOps-omgeving.

Snel laden en opstarten

Een unikernel herbergt alleen de bibliotheken die een specifieke applicatie nodig heeft en is dus hoogstens enkele megabytes groot. Dit vertaalt zich in een opstarttijd van slechts tientallen milliseconden. Het laten draaien van honderden unikernels op een enkele host is vanuit ruimtetechnisch oogpunt dan ook geen enkel probleem.

Resources optimaal benutten

De snelheid en compactheid van unikernels beperken de overhead en geven je de mogelijkheid om maximaal rendement uit je beschikbare resources te halen. Unikernel-applicaties hebben dan ook een minder lange wachttijd voor geheugentoegang dan vergelijkbare applicaties die in een traditionele VM draaien.

Unikernels vs containers

Unikernels zijn geen wondermiddelen

Unikernels zijn dus snel, veilig en compact. Maar hoe komt het dan dat ze de DevOps-wereld nog niet in een razend tempo hebben veroverd? Veel IT-experts wijzen als reden naar de beperkingen en valkuilen die (nog) verbonden zijn aan het inzetten van unikernels in bepaalde ontwikkelomgevingen. Werken met unikernels vereist bijvoorbeeld veel basaal programmeerwerk (low-level programming). Je begint dus eigenlijk op nul als je applicaties gaat bouwen met unikernels, iets dat je vermijdt als je vertrouwt op bekende en bewezen OS-services en stacks van een bekende speler als Linux.

Andere techexperts, zoals Docker-programmeur Amir Chaudry, zien het bouwen vanaf scratch juist als een spannende reis vol interessante mogelijkheden. Zeker als het aankomt op het uitproberen van nieuwe dingen of het creëren van specialistische softwaretoepassingen, ligt er volgens hem een mooie toekomst in het verschiet voor unikernels. Chaudry verwijst bijvoorbeeld naar een succesvolle unikernel-oplossing als CyberChaff. Deze unikernel creëert honderden of duizenden valse netwerknodes. Als een hacker een netwerk scant om een geschikt doelwit voor zijn aanval te kiezen, zijn de nepnodes niet te onderscheiden van de echte. Het gevolg: de kans is heel groot dat de hacker een CyberChaff-nepnode aanvalt, waardoor de aanval wordt afgeremd en het systeem meer tijd heeft om de admin een veiligheidswaarschuwing te sturen.

Softwareprogrammeur Bryan Cantrill stelt daarentegen dat unikernels nauwelijks geschikt zijn voor een productie-omgeving. “Unikernels zijn erg afhankelijk van hardware-virtualisatie, wat ten koste gaat van de efficiëntie. Het systeem dat in staat is om de hardware te zien (de hypervisor) is namelijk gescheiden van het systeem dat de applicatie kan zien (het guest operating system).” Volgens Cantrill doen de extra kosten die je moet maken voor paravirtualisatie het snelheidsvoordeel van unikernels grotendeels teniet.

Daarnaast wijst hij op een tweede belangrijke valkuil: de veiligheid van een unikernel valt of staat vooral met de kwaliteit van de veiligheidslaag die tussen de hypervisor en het guest operating system zit. Is dit grensgebied diffuus, matig beveiligd en kwetsbaar? Dan kunnen unikernels u opzadelen met problemen die u nog niet zo een-twee-drie hebt opgelost.

Daarnaast hebben unikernels een paar beperkingen die ervoor zorgen dat ze nog niet door elke developer worden omarmd.

  • Er zijn nog steeds weinig echt goede, volwassen tools op de markt voor het bouwen van unikernel-applicaties.
  • Veel unikernel-applicaties kunnen momenteel alleen draaien op specifieke hypervisors. Niet altijd ideaal met het oog op flexibiliteit en brede inzetbaarheid.
  • Het verplaatsen van een toepassing naar een unikernel vereist vaak veel handmatig hercodeerwerk in verschillende programmeertalen.
  • Monitoring en debugging in unikernels is lastig en heeft vaak een merkbaar effect op de prestaties van een applicatie.

Unikernels of niet?

U ziet, unikernels hebben voor DevOps  zeker potentie, bestaansrecht en significante voordelen als het aankomt op snelheid en compactheid. Tegelijkertijd gaan ze Linux en (Docker) containers niet vervangen, maar we verwachten de komende jaren wel een enorme acceptatie – niet alleen vanwege hun beveiligings- en prestatievoordelen, maar ook vanwege de nieuwe vormen van rekenkracht die ze ontgrendelen.  Of unikernels de juiste oplossing voor u zijn, hangt ook af van uw IT-landschap en de aard van de specifieke applicaties die u gebruikt. Wilt u nieuwe applicaties vanaf de grond opbouwen? Dan kan het gebruiken van unikernels een prima optie zijn. Let wel op dat unikernels geen wonderlijke panaceeën die bij toverslag alle obstakels en uitdagingen elimineren die u tijdens het ontwikkelproces tegenkomt. En ook voor het moderniseren van stateful-applicaties zijn unikernels minder geschikt.

Wellicht ook interessant voor u:

Bij ACC ICT beschikken we over de kennis en ervaring die nodig is om u vakkundig bij te staan in de zoektocht naar de ideale oplossing. Wij analyseren uw IT-ecosysteem nauwkeurig en kijken wat de meest geschikte oplossing is. Benieuwd naar wat wij voor uw organisatie kunnen betekenen? Neem dan gerust vrijblijvend contact op voor meer informatie of een deskundig advies.