Containers bij Google

Een betere manier om apps te ontwikkelen en implementeren

Kosteloos uitproberen Documentatie bekijken
De Google-manier

Van Gmail tot YouTube en Google Zoeken, alles bij Google wordt uitgevoerd in containers. Door gebruik te maken van containerisatie kunnen onze ontwikkelteams snel werken, software efficiënt implementeren en op een ongekende schaal opereren. Elke week starten we meer dan twee miljard containers. We hebben de afgelopen tien jaar veel geleerd over het uitvoeren van productietaken in containers en hebben gaandeweg deze kennis gedeeld met de community: eerst door cgroups voor de Linux-kernel beschikbaar te stellen en later door ontwerpen voor onze interne tools open source aan te bieden in de vorm van het Kubernetes-project. Deze expertise hebben we nu ingebouwd in Google Cloud Platform, zodat ontwikkelaars en bedrijven van elke grootte eenvoudig gebruik kunnen maken van de nieuwste containerinnovaties.

Wat zijn containers?

Containers bieden een logisch verpakkingsmechanisme waarmee apps kunnen worden gescheiden van de omgeving waarin ze worden uitgevoerd. Door deze ontkoppeling kunnen container-apps eenvoudig en consistent worden ingezet, ongeacht of de doelomgeving een particulier datacenter, de openbare cloud of zelfs de persoonlijke laptop van een ontwikkelaar is. Verpakking in containers zorgt voor een nette scheiding van werkzaamheden. Ontwikkelaars richten zich op de logica en afhankelijkheden van hun apps, terwijl IT Operations-teams zich kunnen richten op implementatie en beheer, zonder zich druk te hoeven maken over app-details zoals specifieke softwareversies en app-specifieke configuraties.

Voor mensen die bekend zijn met gevirtualiseerde omgevingen worden containers vaak vergeleken met virtuele machines (VM's). U weet mogelijk wel wat VM's zijn: een gastbesturingssysteem zoals Linux of Windows wordt uitgevoerd op een hostbesturingssysteem en krijgt gevirtualiseerde toegang tot de onderliggende hardware. Net als bij virtuele machines kunt u met containers uw app samen met bibliotheken en andere afhankelijkheden verpakken. Zo beschikt u over geïsoleerde omgevingen waarin u uw softwareservices kunt uitvoeren. Zoals u hieronder zult zien, houden daar de overeenkomsten wel op. Containers bieden ontwikkelaars en IT Ops-teams een veel eenvoudigere eenheid om mee te werken, wat talloze voordelen heeft.

Waarom containers?

In plaats van de hardwarestack te virtualiseren, zoals bij de aanpak met virtuele machines gebeurt, virtualiseren containers op het niveau van het besturingssysteem, waarbij meerdere containers direct op de kernel van het besturingssysteem worden uitgevoerd. Dit houdt in dat containers veel eenvoudiger van opzet zijn. Ze delen de kernel van het besturingssysteem, starten veel sneller en gebruiken maar een fractie van het geheugen vergeleken met het opstarten van een volledig besturingssysteem.

Er zijn veel verschillende containerindelingen beschikbaar. Docker is een populaire opensource-containerindeling die wordt ondersteund op Google Cloud Platform en door Google Kubernetes Engine.

Wat is het voordeel van sandboxen?

Containers plaatsen apps in aparte silo's, tenzij u ze expliciet met elkaar verbindt. Dit betekent dat u zich niet druk hoeft te maken over conflicten tussen afhankelijkheden of strijd om resources. U stelt namelijk expliciete resourcebeperkingen in voor elke service. Belangrijk is dat er op deze manier een extra beveiligingslaag wordt gecreëerd, omdat apps niet rechtstreeks op het hostbesturingssysteem worden uitgevoerd.

Consistente omgeving

Ontwikkelaars kunnen met containers voorspelbare omgevingen maken die van andere apps zijn geïsoleerd. Containers kunnen ook softwareafhankelijkheden bevatten die de app nodig heeft, zoals specifieke versies van runtimes van programmeertalen en andere softwarebibliotheken. Vanuit het perspectief van de ontwikkelaar blijven al deze elementen gegarandeerd consistent, ongeacht waar de app uiteindelijk wordt geïmplementeerd. Dit vertaalt zich vervolgens in een hogere productiviteit: ontwikkelaars en IT Ops-teams hoeven minder tijd te besteden aan foutopsporing en het achterhalen van verschillen tussen omgevingen en hebben meer tijd om gebruikers van nieuwe functionaliteit te voorzien. Er treden ook minder bugs op omdat ontwikkelaars nu in ontwikkel- en testomgevingen aannamen kunnen doen waarvan ze zeker weten dat die in productie ook gelden.

Overal uitvoerbaar

Containers kunnen vrijwel overal worden uitgevoerd, waardoor ontwikkeling en implementatie veel eenvoudiger worden. Zo heeft u de vrije keuze uit Linux-, Windows- en Mac-besturingssystemen, uit virtuele of fysieke machines, de machine van een ontwikkelaar, een datacenter op locatie en, niet te vergeten, de openbare cloud. De grote populariteit van de Docker-bestandsindeling voor containers zorgt voor nog meer locatieonafhankelijkheid. Waar u uw software ook wilt uitvoeren, u gebruikt gewoon containers.

Isolatie

Containers virtualiseren CPU, geheugen, opslag en netwerkresources op het niveau van het besturingssysteem, waardoor ontwikkelaars het besturingssysteem in een aparte sandbox zien, logisch geïsoleerd van andere apps.

  Voordelen container Voordelen virtuele machine
Consistente runtime-omgeving
Sandboxen van apps
Weinig ruimte nodig op de schijf  
Lage overhead  
Van code tot apps

Met containers kunt u uw app en de bijbehorende afhankelijkheden samenvoegen tot één handig manifest waarvoor versiebeheer mogelijk is. Zo kunt u uw app eenvoudig repliceren voor andere ontwikkelaars in uw team en andere machines in uw cluster.

Net zoals softwarebibliotheken fragmenten code tot samengestelde pakketjes verwerken zodat ontwikkelaars afzonderlijk kunnen werken met logica als gebruikersverificatie en sessiebeheer, kunt u met containers een pakket van uw volledige app maken en deze zodoende scheiden van het besturingssysteem, de machine en zelfs van de code. Wanneer u dit combineert met een servicegebaseerde architectuur, wordt de volledige eenheid waar ontwikkelaars zich mee bezig moeten houden veel kleiner, wat weer leidt tot meer flexibiliteit en een hogere productiviteit. Daardoor is het een stuk eenvoudiger om uw apps te ontwikkelen, te testen, te implementeren en te beheren.

Van een monolithische naar een servicegebaseerde architectuur

Containers werken het beste in servicegebaseerde architecturen. In tegenstelling tot monolithische architecturen, waarbij alle onderdelen van de app met elkaar in verband staan, van IO tot gegevensverwerking en weergave, worden deze elementen bij servicegebaseerde architecturen ondergebracht in afzonderlijke componenten. Door werkzaamheden te scheiden en onder te verdelen, kunnen uw services blijven werken, ook wanneer andere uitvallen, waardoor de algehele betrouwbaarheid van uw app toeneemt.

Door onderverdeling in componenten kunt u ook sneller en betrouwbaarder ontwikkelen. Kleinere codebases zijn eenvoudiger te onderhouden en aangezien de services van elkaar gescheiden zijn, kunt u makkelijk testen wat specifieke invoer aan uitvoer oplevert.

Containers zijn perfect voor servicegebaseerde apps omdat u elke container op problemen kunt controleren, elke service tot specifieke resources kunt beperken en containers onafhankelijk van elkaar kunt starten en stoppen.

En aangezien de code bij containers van de rest wordt gescheiden, kunt u met containers afzonderlijke services als black boxes behandelen en de ruimte waar een ontwikkelaar zich mee bezig moet houden verder verkleinen. Wanneer ontwikkelaars werken aan services die van elkaar afhankelijk zijn, kunnen ze eenvoudig een container starten voor die specifieke service zonder van tevoren tijd te verspillen aan het opzetten van de juiste omgeving en het oplossen van problemen.

Kubernetes: containerindeling op productieniveau

Ons interne clusterbeheersysteem Borg was zo'n doorslaand succes dat we onze ervaringen hiermee in het opensource-project Kubernetes hebben verwerkt. Nu kunt u, evenals andere bedrijven, ook gebruikmaken van onze tientallen jaren aan ervaring. Kubernetes, ook wel 'k8s' genoemd, biedt geautomatiseerde containerindeling (het beheer van uw machines en services wordt voor u geregeld), waardoor uw oplossingen betrouwbaarder worden. Ook hoeft u minder tijd en resources aan DevOps te besteden, wat een hoop stress scheelt.

Kubernetes maakt alles wat met de implementatie en het beheer van uw app te maken heeft eenvoudiger. Kubernetes automatiseert implementaties en rollbacks en houdt de status van uw services in de gaten, waardoor problematische implementaties worden voorkomen voordat er iets misgaat. De oplossing voert ook voortdurend statuschecks uit voor uw services. Containers die niet werken of die zijn vastgelopen, worden opnieuw opgestart en services worden alleen aan clients aangeboden wanneer zeker is dat ze goed zijn opgestart. Daarnaast schaalt Kubernetes uw services automatisch op of terug op basis van gebruik, waardoor u alleen uitvoert wat u nodig heeft, op momenten dat u het nodig heeft. Net als bij containers kunt u met Kubernetes uw cluster declaratief beheren. Hierdoor is versiebeheer voor uw installatie mogelijk en kan deze eenvoudig worden gerepliceerd.

Kenmerken van Kubernetes
  • Geautomatiseerde uitrol en rollbacks
  • Statuscontroles voor services
  • Automatische schaling van services
  • Declaratief beheer
  • Overal te implementeren, ook als hybride implementatie

Het belangrijkste is misschien wel dat Kubernetes is gemaakt om overal te worden gebruikt. U kunt zowel implementaties op locatie als in openbare clouds en in hybride omgevingen indelen. Zo is uw infrastructuur beschikbaar op de plekken waar uw gebruikers zich bevinden, zijn uw apps beter beschikbaar en kan uw bedrijf een goede balans vinden tussen beveiliging en kosten, terwijl alles aan uw specifieke behoeften is aangepast.

Uw cluster op Google

Kubernetes werkt uiteraard het beste op Google Cloud Platform. Google Kubernetes Engine is de belangrijkste beheerde Kubernetes-oplossing. U kunt in een mum van tijd met Kubernetes aan de slag en met de productie beginnen.

Kubernetes Engine wordt volledig beheerd door betrouwbaarheidstechnici van Google, die experts zijn op het gebied van containers en zorgen dat uw cluster beschikbaar en up-to-date blijft. De oplossing integreert naadloos met alle GCP-services, zoals controle, diagnostiek en logboekregistratie in Stackdriver, identiteits- en toegangsbeheer en de toonaangevende netwerkinfrastructuur van Google.

Functies van Kubernetes Engine
  • Beheerde open source Kubernetes
  • SLA van 99,5% en hoge beschikbaarheid door geïntegreerde multi-zone implementaties
  • Naadloze integratie met andere GCP-services
  • Toonaangevende prijs-kwaliteitsverhouding
  • Flexibel en interoperabel met uw lokale clusters of andere cloudproviders
  • Beheerde infrastructuur van Google-kwaliteit

Maar het is prettig om meerdere opties te hebben, dus biedt Google Cloud Platform u een volledig spectrum voor het uitvoeren van uw containers. Van een volledig beheerd Platform as a Service met de flexibele omgeving van Google App Engine tot clusterbeheer met Kubernetes Engine en opties om zelf uw infrastructuur te implementeren op de zeer concurrerend geprijsde Google Compute Engine: we hebben voor iedereen de ideale oplossing voor het uitvoeren van containers op Google Cloud Platform.

De volledige containeroplossing

En dat is nog niet alles. Google Cloud Platform biedt u alle tools die u nodig heeft om containers te gebruiken, van ontwikkeling tot productie. Cloud Build en Container Registry bieden opslag en beheer voor Docker-images, met ondersteuning van de hoge beveiligingsstandaarden en het gerenommeerde netwerk van Google. Container-Optimized OS van Google biedt een eenvoudig en zeer goed beveiligd besturingssysteem waarop de Docker- en Kubernetes-runtimes vooraf zijn geïnstalleerd. Al uw containerbeheer kan dus op GCP plaatsvinden.

"We hebben veel geleerd in de tien jaar dat we containerbeheersystemen ontwerpen en veel van die geleerde lessen hebben we verwerkt in Kubernetes, het nieuwste containerbeheersysteem van Google. Met dit systeem willen we voortbouwen op de mogelijkheden van containers en zo de productiviteit van programmeurs en het gemak van zowel handmatig als geautomatiseerd systeembeheer drastisch vergroten."

'Borg, Omega, and Kubernetes: Lessons learned from three container management systems over a decade', Google LLC, 2016