Wat is Kubernetes? Uw volgende applicatieplatform

Kubernetes is een populair open source-platform voor containerorkestratie , dat wil zeggen voor het beheer van applicaties die zijn opgebouwd uit meerdere, grotendeels op zichzelf staande runtimes, containers genaamd . Containers zijn steeds populairder geworden sinds het Docker-containerisatieproject van start ging in 2013, maar grote, gedistribueerde gecontaineriseerde applicaties kunnen steeds moeilijker te coördineren worden. Door gecontaineriseerde applicaties aanzienlijk eenvoudiger op schaal te beheren, is Kubernetes een belangrijk onderdeel van de containerrevolutie geworden.

Wat is containerorkestratie?

Containers ondersteunen VM-achtige scheiding van zorgen, maar met veel minder overhead en veel meer flexibiliteit. Als gevolg hiervan hebben containers de manier waarop mensen denken over het ontwikkelen, implementeren en onderhouden van software hervormd. In een containerarchitectuur worden de verschillende services die een applicatie vormen, verpakt in afzonderlijke containers en geïmplementeerd op een cluster van fysieke of virtuele machines. Maar hierdoor ontstaat de behoefte aan containerorkestratie, een tool die de implementatie, het beheer, de schaalbaarheid, het netwerken en de beschikbaarheid van op containers gebaseerde applicaties automatiseert.

Wat is Kubernetes?

Kubernetes is een open source-project dat een van de meest populaire tools voor containerorkestratie is geworden; het stelt u in staat om multi-container applicaties op schaal te implementeren en te beheren. Hoewel Kubernetes in de praktijk het vaakst wordt gebruikt met Docker, het meest populaire containerisatieplatform, kan het ook werken met elk containersysteem dat voldoet aan de Open Container Initiative (OCI) -standaarden voor containerimage-formaten en runtimes. En omdat Kubernetes open source is, met relatief weinig beperkingen op het gebruik ervan, kan het vrij worden gebruikt door iedereen die containers wil draaien, vrijwel overal waar ze ze willen draaien: on-premise, in de openbare cloud of beide. .

Google en Kubernetes

Kubernetes is begonnen als een project binnen Google. Het is een opvolger van - maar niet een directe afstammeling van - Google Borg, een eerdere tool voor containerbeheer die Google intern gebruikte. Google open source Kubernetes in 2014, deels omdat de gedistribueerde microservices-architecturen die Kubernetes faciliteert, het gemakkelijk maken om applicaties in de cloud te draaien. Google ziet de acceptatie van containers, microservices en Kubernetes als een potentiële drijfveer voor klanten naar zijn cloudservices (hoewel Kubernetes zeker ook met Azure en AWS werkt). Kubernetes wordt momenteel onderhouden door de Cloud Native Computing Foundation, die zelf onder de paraplu van de Linux Foundation valt.

Kubernetes versus Docker en Kubernetes versus Docker Swarm

Kubernetes vervangt Docker niet, maar vergroot het. Echter, Kubernetes heeft een aantal van de hoger niveau technologieën die zijn ontstaan rond Docker vervangen.

Een van die technologieën is Docker Swarm, een orkestrator die is gebundeld met Docker. Het is nog steeds mogelijk om Docker Swarm te gebruiken in plaats van Kubernetes, maar Docker Inc. heeft ervoor gekozen om Kubernetes onderdeel te maken van de Docker Community en Docker Enterprise-edities.

Niet dat Kubernetes een drop-in vervanging is voor Docker Swarm. Kubernetes is aanzienlijk complexer dan Swarm en vereist meer werk om te implementeren. Maar nogmaals, het werk is bedoeld om op de lange termijn een grote beloning te bieden - een beter beheersbare, veerkrachtige applicatie-infrastructuur. Voor ontwikkelingswerk en kleinere containerclusters biedt Docker Swarm een ​​eenvoudigere keuze. 

Kubernetes tegen Mesos

Een ander project waar je misschien van hebt gehoord als concurrent van Kubernetes, is Mesos. Mesos is een Apache-project dat oorspronkelijk is voortgekomen uit ontwikkelaars op Twitter; het werd eigenlijk gezien als een antwoord op het Google Borg-project.

Mesos biedt inderdaad containerorkestratiediensten aan, maar zijn ambities gaan veel verder: het wil een soort cloudbesturingssysteem zijn dat zowel gecontaineriseerde als niet-gecontaineriseerde componenten kan coördineren. Daartoe kunnen veel verschillende platforms binnen Mesos worden uitgevoerd, inclusief Kubernetes zelf.

Kubernetes-architectuur: hoe Kubernetes werkt

De architectuur van Kubernetes maakt gebruik van verschillende concepten en abstracties. Sommige hiervan zijn variaties op bestaande, bekende begrippen, maar andere zijn specifiek voor Kubernetes.

Kubernetes-clusters

De Kubernetes-abstractie op het hoogste niveau, het cluster , verwijst naar de groep machines waarop Kubernetes draait (zelf een geclusterde applicatie) en de containers die erdoor worden beheerd. Een Kubernetes-cluster moet een master hebben , het systeem dat alle andere Kubernetes-machines in het cluster bestuurt en bestuurt. Een Kubernetes-cluster met hoge beschikbaarheid repliceert de faciliteiten van de master op meerdere machines. Maar slechts één master tegelijk voert de taakplanner en controller-manager uit.

Kubernetes-knooppunten en -pods

Elk cluster bevat Kubernetes- knooppunten . Knooppunten kunnen fysieke machines of VM's zijn. Nogmaals, het idee is abstractie: waar de app ook op draait, Kubernetes zorgt voor de implementatie op dat substraat. Kubernetes maakt het zelfs mogelijk om ervoor te zorgen dat bepaalde containers alleen op VM's of alleen op bare metal draaien.

Nodes voeren pods uit , de meest elementaire Kubernetes-objecten die kunnen worden gemaakt of beheerd. Elke pod vertegenwoordigt een enkele instantie van een applicatie of actief proces in Kubernetes en bestaat uit een of meer containers. Kubernetes start, stopt en repliceert alle containers in een pod als een groep. Pods houden de aandacht van de gebruiker bij de toepassing in plaats van bij de containers zelf. Details over hoe Kubernetes moet worden geconfigureerd, vanaf de status van pods, worden bewaard in Etcd , een gedistribueerde sleutel / waarde-opslag.

Pods worden zo nodig op knooppunten gemaakt en vernietigd om te voldoen aan de gewenste status die door de gebruiker is opgegeven in de poddefinitie. Kubernetes biedt een abstractie, een controller genaamd , voor het omgaan met de logistiek van hoe pods worden rondgedraaid, uitgerold en teruggedraaid. Controllers zijn er in een paar verschillende smaken, afhankelijk van het soort applicatie dat wordt beheerd. De onlangs geïntroduceerde "StatefulSet" -controller wordt bijvoorbeeld gebruikt voor toepassingen die een persistente status nodig hebben. Een ander soort controller, de implementatie , wordt gebruikt om een ​​app omhoog of omlaag te schalen, een app bij te werken naar een nieuwe versie of een app terug te draaien naar een bekende goede versie als er een probleem is.

Kubernetes-services

Omdat pods leven en sterven als dat nodig is, hebben we een andere abstractie nodig voor het omgaan met de levenscyclus van de applicatie. Een applicatie wordt verondersteld een persistente entiteit te zijn, zelfs als de pods die de containers draaien waaruit de applicatie bestaat zelf niet persistent zijn. Daartoe biedt Kubernetes een abstractie die een service wordt genoemd.

Een service in Kubernetes beschrijft hoe een bepaalde groep pods (of andere Kubernetes-objecten) toegankelijk is via het netwerk. Zoals de Kubernetes-documentatie het stelt, kunnen de pods die de back-end van een applicatie vormen, veranderen, maar de front-end hoeft daar niets van te weten of het te volgen. Diensten maken dit mogelijk.

Nog een paar interne stukken van Kubernetes maken het plaatje compleet. De planner deelt werklasten uit naar knooppunten, zodat ze worden verdeeld over bronnen en zodat implementaties voldoen aan de vereisten van de toepassingsdefinities. De controller manager zorgt ervoor dat de status van het systeem - applicaties, workloads, etc. - overeenkomt met de gewenste status die is gedefinieerd in de configuratie-instellingen van Etcd.

Houd er rekening mee dat geen van de low-level mechanismen die door containers worden gebruikt, zoals Docker zelf, wordt vervangen door Kubernetes. Kubernetes biedt eerder een grotere set abstracties voor het gebruik van deze mechanismen om apps op schaal te laten werken.

Kubernetes Ingress

Kubernetes-services worden beschouwd als actief binnen een cluster. Maar u wilt deze services van de buitenwereld kunnen benaderen. Kubernetes heeft verschillende componenten die dit mogelijk maken met verschillende mate van eenvoud en robuustheid, waaronder NodePort en LoadBalancer, maar het component met de meeste flexibiliteit is Ingress. Ingress is een API die externe toegang tot de services van een cluster beheert, meestal via HTTP.

Ingress vereist een beetje configuratie om correct op te zetten. Matthew Palmer, die een boek schreef over de ontwikkeling van Kubernetes, leidt je door het proces op zijn website.

Kubernetes-dashboard

Een Kubernetes-component die u helpt bij het bijhouden van al deze andere componenten, is Dashboard, een webgebaseerde gebruikersinterface waarmee u apps kunt implementeren en problemen kunt oplossen en clusterbronnen kunt beheren. Dashboard wordt niet standaard geïnstalleerd, maar het toevoegen is niet al te veel moeite.

Gerelateerde video: Wat is Kubernetes?

In deze video van 90 seconden leert u meer over Kubernetes, het open-source systeem voor het automatiseren van gecontaineriseerde applicaties, van een van de uitvinders van de technologie, Joe Beda, oprichter en CTO bij Heptio.

Kubernetes voordelen

Omdat Kubernetes nieuwe abstracties en concepten introduceert, en omdat de leercurve voor Kubernetes hoog is, is het normaal om te vragen wat de langetermijnopbrengsten zijn voor het gebruik van Kubernetes. Hier is een overzicht van enkele van de specifieke manieren waarop het uitvoeren van apps in Kubernetes eenvoudiger wordt.

Kubernetes beheert app-status, replicatie, taakverdeling en toewijzing van hardwareresources voor u

Een van de meest basale taken die Kubernetes u uit handen neemt, is het drukke werk om een ​​applicatie draaiende te houden en te laten reageren op de eisen van de gebruiker. Apps die "ongezond" worden of niet voldoen aan de definitie van gezondheid die u voor hen beschrijft, kunnen automatisch worden genezen.

Een ander voordeel dat Kubernetes biedt, is het maximaliseren van het gebruik van hardwarebronnen, waaronder geheugen, opslag-I / O en netwerkbandbreedte. Toepassingen kunnen zachte en harde limieten hebben voor hun resourcegebruik. Veel apps die minimale bronnen gebruiken, kunnen op dezelfde hardware worden samengepakt; apps die zich moeten uitstrekken, kunnen op systemen worden geplaatst waar ze ruimte hebben om te groeien. En nogmaals, het uitrollen van updates over een cluster, of het terugdraaien als updates breken, kan worden geautomatiseerd.

Kubernetes vereenvoudigt de implementatie van vooraf geconfigureerde applicaties met Helm-grafieken

Pakketbeheerders zoals Debian Linux's APT en Python's Pip besparen gebruikers de moeite van het handmatig installeren en configureren van een applicatie. Dit is vooral handig wanneer een applicatie meerdere externe afhankelijkheden heeft.

Helm is in wezen een pakketbeheerder voor Kubernetes. Veel populaire softwareapplicaties moeten in Kubernetes worden uitgevoerd als een groep onderling afhankelijke containers. Helm biedt een definitiemechanisme, een 'diagram', dat beschrijft hoe een applicatie of service kan worden uitgevoerd als een groep containers binnen Kubernetes.

U kunt vanuit het niets uw eigen helm-grafieken maken, en mogelijk moet u dit doen als u een aangepaste app bouwt die intern moet worden geïmplementeerd. Maar als u een populaire applicatie gebruikt met een gemeenschappelijk implementatiepatroon, is de kans groot dat iemand er al een Helm-chart voor heeft samengesteld en deze heeft gepubliceerd in de officiële Helm-charts-repository. Een andere plaats om te zoeken naar officiële Helm-grafieken is de Kubeapps.com-directory.

Kubernetes vereenvoudigt het beheer van opslag, geheimen en andere toepassingsgerelateerde bronnen

Containers zijn bedoeld om onveranderlijk te zijn; wat je erin stopt, mag niet veranderen. Maar applicaties hebben status nodig, wat betekent dat ze een betrouwbare manier nodig hebben om met externe opslagvolumes om te gaan. Dat wordt des te gecompliceerder door de manier waarop containers leven, sterven en herboren worden gedurende de levensduur van een app.

Kubernetes biedt abstracties om containers en apps op dezelfde ontkoppelde manier met opslag om te laten gaan als andere bronnen. Veel gangbare soorten opslag, van Amazon EBS-volumes tot gewone oude NFS-shares, zijn toegankelijk via Kubernetes-opslagstuurprogramma's, volumes genaamd. Normaal gesproken zijn volumes gebonden aan een specifieke pod, maar een volumesubtype, een "Persistent Volume" genaamd, kan worden gebruikt voor gegevens die onafhankelijk van een pod moeten blijven bestaan.

Containers moeten vaak werken met 'geheimen' - referenties zoals API-sleutels of servicewachtwoorden die u niet hard gecodeerd in een container of openlijk op een schijfvolume wilt bewaren. Hoewel hiervoor oplossingen van derden beschikbaar zijn, zoals Docker-geheimen en HashiCorp Vault, heeft Kubernetes zijn eigen mechanisme voor het native afhandelen van geheimen, hoewel het met zorg moet worden geconfigureerd. Etcd moet bijvoorbeeld worden geconfigureerd om SSL / TLS te gebruiken bij het verzenden van geheimen tussen knooppunten, in plaats van in platte tekst. 

Kubernetes-applicaties kunnen worden uitgevoerd in hybride en multi-cloudomgevingen

Een van de lang gekoesterde dromen van cloud computing is om elke app in elke cloud te kunnen draaien, of in een willekeurige mix van publieke of private clouds. Dit is niet alleen om vendor lock-in te voorkomen, maar ook om te profiteren van functies die specifiek zijn voor individuele clouds.

Kubernetes biedt een set primitieven, gezamenlijk bekend als federatie, om meerdere clusters met elkaar gesynchroniseerd te houden in meerdere regio's en clouds. Een bepaalde app-implementatie kan bijvoorbeeld consistent worden gehouden tussen meerdere clusters, en verschillende clusters kunnen service-detectie delen, zodat een back-end-resource vanuit elk cluster kan worden benaderd. Federatie kan ook worden gebruikt om zeer beschikbare of fouttolerante Kubernetes-implementaties te creëren, of u nu meerdere cloudomgevingen overspant of niet.

Federatie is nog relatief nieuw voor Kubernetes. Nog niet alle API-bronnen worden ondersteund voor federatieve instances en upgrades hebben nog geen automatische testinfrastructuur. Maar deze tekortkomingen zullen worden aangepakt in toekomstige versies van Kubernetes.

Waar Kubernetes te krijgen