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 containers kunnen onze ontwikkelteams snel werken, software efficiënt implementeren en op een ongekende schaal opereren. Elke week starten we meerdere miljarden containers. We hebben de afgelopen tien jaar veel geleerd over het uitvoeren van productietaken in containers en hebben deze kennis steeds 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 omvang makkelijk gebruik kunnen maken van de nieuwste containerinnovaties.

Vrachtschip met containers in een wolk. Op de achtergrond zwemt een walvis.
Wat zijn containers?

Containers bieden een logisch verpakkingsmechanisme waarmee apps kunnen worden gescheiden van de omgeving waarin ze worden uitgevoerd. Door de ontkoppeling kunnen container-apps makkelijk en consistent worden geïmplementeerd ongeacht de doelomgeving, of dit nu 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.

Diagram van virtuele machines versus containers.
Virtuele machines bevatten de volgende eenheden, gestapeld voor visualisatie: app, bin/libs, gast-OS, hypervisor, hostbesturingssysteem, infrastructuur. Containers bevatten de volgende eenheden, gestapeld voor visualisatie: app, bin/libs, containerruntime, hostbesturingssysteem, infrastructuur.
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 makkelijker 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. Bovendien creëert dit een extra beveiligingslaag 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 hebben die nodig zijn voor de app, 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 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 met aannames kunnen werken waarvan ze zeker weten dat die in productie ook gelden.

Overal uitvoerbaar

Containers kunnen vrijwel overal worden uitgevoerd, waardoor ontwikkeling en implementatie veel makkelijker 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, zodat ontwikkelaars het besturingssysteem in een aparte sandbox zien, logisch geïsoleerd van andere apps.

  Voordelen container Voordelen van virtuele machines
Consistente runtime-omgeving
Sandboxen van apps
Weinig schijfruimte nodig  
Geringe 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 makkelijk repliceren voor andere ontwikkelaars in uw team en andere machines in uw cluster.

Net zoals softwarebibliotheken samengestelde pakketjes van fragmenten code zijn, zodat ontwikkelaars om logica als gebruikersverificatie en sessiebeheer heen kunnen werken, maakt u met containers van uw volledige app een pakket en scheidt u dit van het besturingssysteem, de machine en zelfs de code. Als u dit combineert met een servicegebaseerde architectuur, wordt de volledige eenheid waar ontwikkelaars zich mee bezig moeten houden veel kleiner, wat leidt tot meer flexibiliteit en een hogere productiviteit. Dit maakt het een stuk makkelijker om uw apps te ontwikkelen, testen, implementeren en 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 zelfs als andere uitvallen. De algehele betrouwbaarheid van uw app neemt hiermee toe.

Door onderverdeling in componenten kunt u ook sneller en betrouwbaarder ontwikkelen. Kleinere codebases zijn eenvoudiger te onderhouden en omdat 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 omdat containers code van de rest scheiden, kunt u afzonderlijke services als black boxes behandelen en de taak voor ontwikkelaars verder verkleinen. Als ontwikkelaars werken aan services die van elkaar afhankelijk zijn, kunnen ze makkelijk een container starten voor die specifieke service zonder vooraf tijd te verspillen aan het opzetten van de juiste omgeving en het oplossen van problemen.

Ontdek de top drie van manieren waarop containers kunnen worden uitgevoerd in Google Cloud.

Google Kubernetes Engine als oplossing voor containerindeling, Cloud Run voor een volledig serverloze aanpak en Compute Engine om makkelijk virtuele machines te gebruiken.

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 uw voordeel doen met onze tientallen jaren aan ervaring. Kubernetes, ook wel 'k8s' genoemd, biedt geautomatiseerde containerindeling (het beheer van uw machines en services wordt voor u geregeld). Uw oplossingen worden hierdoor betrouwbaarder. 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 makkelijker. Kubernetes automatiseert uitrol en rollbacks en houdt de status van uw services in de gaten. Een problematische uitrol kan zo 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, zodat 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. Versiebeheer voor uw installatie is hierdoor mogelijk en kan makkelijk 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.

Hybride Kubernetes-cloud: uw app wordt uitgevoerd op Kubernetes en kan vervolgens worden geïmplementeerd in andere clouds, GCP en uw datacenter.
Uw cluster op Google

Kubernetes werkt uiteraard het best 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 monitoring, diagnostiek en logging van Stackdriver, identiteits- en toegangsbeheer en de toonaangevende netwerkinfrastructuur van Google.

Kenmerken van Kubernetes Engine
  • Beheerde opensource-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

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 beheerde omgeving met Google Cloud Run tot clusterbeheer met Kubernetes Engine en opties om zelf uw infrastructuur te implementeren op de zeer concurrerend geprijsde Google Compute Engine: wij 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 makkelijk en zeer goed beveiligd besturingssysteem waarop de Docker- en Kubernetes-runtimes vooraf zijn geïnstalleerd. Al uw containerbeheer kan dus op GCP plaatsvinden.

Ontwerpen: Container Builder, Opslaan: Container Registry, Uitvoeren: Container Optimized OS, Indelen: Kubernetes Engine

"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