Kubernetes är den ledande tekniken inom moderna mikrotjänster. Det har utvecklats för att göra hantering av mikrotjänster i kluster av containeriserade applikationer enklare och mer automatiserat. Men bakom denna enkla princip döljer sig en komplicerad värld. I denna artikel vill vi ge en ingående beskrivning av hur Kubernetes fungerar.

Ett praktiskt sätt att se på Kubernetes är att tänka sig det som ett distribuerat operativsystem för containrar. Det tillhandahåller de verktyg och instruktioner som behövs för att orkestrera interaktion och skalning av containrar (oftast Docker-containrar) och den infrastruktur som containrarna körs på. Eftersom det är ett universalverktyg som ska fungera i många olika scenarier är Kubernetes mycket flexibelt – och komplext.

Kubernetes arbetarnoder och styrplanet

Kubernetes har två sidor: arbetarnoderna (worker nodes) och styrplanet (control plane). Det är i arbetarnoderna som de faktiska containeriserade applikationerna finns, tillsammans med de Kubernetsverktyg som behövs. I styrplanet finns verktygen för att hantera det klustret. I figur 1 finns en översiktsbild av den arkitekturen.

Figur 1. Kubernetes arbetarnoder och styrplanet

kubernetes

Som du ser i figur 1 är arkitekturen uppdelad i arbetarnoder och huvudnoder. Deras uppgift är att köra jobb respektive att köra verktyg. I båda fallen är noderna maskiner – virtuella eller materiella. 

Skalning av Kubernetesnoder kontra laster

Det är viktigt att komma ihåg att Kubernetes är medvetet om den underliggande infrastrukturen, alltså de resurser (beräkningskraft, arbetsminne, disk/SSD och nätverk) som det har till förfogande för att köra jobben i arbetarnoderna – men det kan inte styra dem direkt. Kubernetes ansvarar för att skala lasterna, men en mekanism på högre nivå (som automatisk skalning i molnet eller manuella inställningar) sköter anpassningen av nodernas tillgänglighet. En styrenhet (controller), som du får veta mer om strax, finns att tillgå för interaktion med externa system i det syftet.

Komponenterna i Kubernetes arbetarnoder

Figur 2 visar de viktigaste delarna av Kubernetes arbetarnoder. Vi tar en titt på var och en av komponenterna.

Figur 2. Kubernetes arbetarnoder i detalj

kubernetes

Kubelet

En kubelet är ett ”litet” program som körs på arbetarnoden och som har till uppgift att sköta förhandlingarna mellan styrplanet och noden. Dess huvuduppgift är att verkställa de direktiv som kommer från huvudnodklustret ovanför poddarna (se här nedanför) och att rapportera tillbaka om arbetarnodernas laster och deras tillstånd.

Kubeproxy

En kubeproxy har till uppgift att se till att nätverksreglerna följs i noden och att reglera trafiken till och från noden.

Kubeproxyn är något annat än ingress, som fungerar på klusternivån och som fastställer regler för nätverkets kommunikation med klustret.

Poddar

Poddar är diskreta jobbenheter på noden. De är på replikeringsnivån. Poddar är abstraktioner som förpackar en eller flera containeriserade applikationer. Poddar ger möjlighet att logiskt gruppera och isolera containrar som körs tillsammans, samtidigt som de möjliggör kommunikation mellan poddar på samma maskin. Förhållandet mellan containrar och poddar styrs av Kubernetes utplaceringsdeskriptorer.

Utplaceringar och ReplicaSets

Vanligtvis konfigurerar och utplaceras poddar som delar av ReplicaSets. En ReplicaSet definierar de önskade exekveringsegenskaperna för podden och får Kubernetes att jobbar för att bibehålla det tillståndet. ReplicaSets definieras vanligtvis av en Utplacering (Deployment), som både anger parametrarna för det aktuella ReplicaSet och den strategi som ska användas (det vill säga ifall poddar ska uppdateras eller nyskapas) vid hantering av klustret.

Sidovagnar

På poddnivån kan man tillföra extra funktioner genom tillägg som kallas för sidovagnar (sidecars). Sidovagnarna sköter uppgifter som loggning på poddnivå och insamling av statistik.

I figur 3 får du en mer ingående bild av poddarna i en arbetarnod.

Figur 3. Kubernetespodd i detalj

kubernets

Kubernetes styrplan

Hittills har vi ägnat oss åt arbetarsidan av det hela. Nu ska vi ta en titt på styrsidan och lära oss en del om hur Kubernetes gör för att sköta driften av ett kluster.

I figur 4 får du en detaljerad bild av komponenterna i en huvudnod.

Figur 4. En Kuberneteshuvudnod i detalj

kubernets

Etcd

Den komponent som är lättast att förstå är etcd (uttalas ”et-ce-de”). Etcd är ett distribuerat objektförråd som fungerar som databas för hela klustrets konfiguration och tillstånd.

API-server

Som framgår av figur 4 är API-servern den centrala kommunikationsmekanismen för klustret. Den förhandlar fram interaktionen mellan styrplanet, arbetarnoderna och administratörerna när de gör förändringar av konfigurationen genom Kubernetes kommandoradsverktyg (som kubectl) eller andra användargränssnitt.

Schemaläggare

Schemaläggaren (the scheduler) har till uppgift att fastställa vilken nod som poddar ska köras på. Exakt hur detta bestäms varierar, beroende på poddarna egenskaper och de tillgängliga nodernas tillstånd. Strategin för hur schemaläggaren fattar det beslutet kan fininställas hela vägen upp till att man skriver skräddarsydda schemaläggare. Schemaläggaren samverkar med API-servern när den jobbar.

Styrenheten

Styrenheten (the controller) är den komponent som ser till att klustret förblir i det tillstånd som konfigurerats och som återför det till det tillståndet om det börjar glida bort. Styrenheten fungerar som ett slags termostat som anger ett önskat tillstånd och sedan strävar efter att bibehålla det.

Med Kubernetes terminologi så skapar man ett objekt, som är en beständig entitet som loggats i etcd. Objektet är en beskrivning av hur saker bör vara. Styrenheten agerar därefter för att se till att objektet har de önskade specarna, eller egenskaperna.

Till exempel kan ett ReplicaSet (se här ovanför) ange hur många poddar som bör vara i gång baserad på användningskriterier. Ett sådant ReplicaSet är objektet, och det angivna poddantalet är specen. Klustrets faktiska tillstånd i förhållande till sitt ReplicaSet är status. Styrenheten får ständiga rapporter från klustret om dess status och vidtar sedan åtgärder för att få status att stämma med specen genom att lägga till eller ta bort poddar.

Containeravbildsförråd

Slutligen finns en komponent som man bör känna till, nämligen avbildsförrådet, även känt som avbildsregistret. Det är en komponent som finns utanför klustret och som är tillgängligt för administratörer och styrplanet för nerladdning av containerdefinitioner. Registren är inhysta hos olika organisationer, däribland Docker Hub, och de kan vara offentliga eller privata. De ledande molnoperatörerna tillhandahåller förråd som funktionstjänster för företag.

Kubernetes härskar över containrarna

Nu vet du en del om Kubernetesarkitekturen och om hur Kubernetes fungerar för att nå uppställda mål. Det är inget enkelt system, men det beror på att utplacering, hantering och skalning av containerbaserade program inte är något enkelt mål. Kubernetes är mycket konfigurerbart och tillräckligt flexibelt för att kunna hantera alla de olika slags containerbaserade scenarier som förekommer i det fria.

Kubernetes är den ledande tekniken i dagens mjukvaruarkitektur. Därför är kunskaper om Kubernetes obligatoriska för atta med intresse för Devops, containrar, molnäkta applikationer och mikrotjänstarkitekturer.