Vad är Kubernetes? Din nästa applikationsplattform

Kubernetes är en populär öppen källkodsplattform för orkestrering av containrar - det vill säga för hantering av applikationer byggda av flera, till stor del fristående driftstider som kallas containrar. Behållare har blivit alltmer populära sedan Docker-containeriseringsprojektet lanserades 2013, men stora, distribuerade containerapplikationer kan bli allt svårare att samordna. Genom att göra containeriserade applikationer dramatiskt enklare att hantera i stor skala har Kubernetes blivit en viktig del av containerrevolutionen.

Vad är containerorkestrering?

Behållare stöder VM-liknande separering av bekymmer men med mycket mindre omkostnader och mycket större flexibilitet. Som ett resultat har containrar omformat hur människor tänker på att utveckla, distribuera och underhålla programvara. I en containeriserad arkitektur packas de olika tjänsterna som utgör en applikation i separata behållare och distribueras över ett kluster av fysiska eller virtuella maskiner. Men detta ger upphov till behovet av containerorkestrering - ett verktyg som automatiserar distribution, hantering, skalning, nätverk och tillgänglighet av containerbaserade applikationer.

Vad är Kubernetes?

Kubernetes är ett projekt med öppen källkod som har blivit ett av de mest populära verktygen för containerorkestrering; det låter dig distribuera och hantera applikationer med flera containrar i stor skala. Medan i praktiken Kubernetes oftast används med Docker, den mest populära containeriseringsplattformen, kan den också fungera med vilket containersystem som överensstämmer med Open Container Initiative (OCI) standarder för containerbildformat och driftstider. Och eftersom Kubernetes är öppen källkod, med relativt få begränsningar för hur den kan användas, kan den användas fritt av alla som vill köra containrar, var som helst de vill köra dem - lokalt, i det offentliga molnet eller båda .

Google och Kubernetes

Kubernetes började livet som ett projekt inom Google. Det är en efterträdare till - men inte en direkt ättling till - Google Borg, ett tidigare containerhanteringsverktyg som Google använde internt. Google öppnade Kubernetes 2014, delvis på grund av att de distribuerade mikrotjänsterarkitekturerna som Kubernetes underlättar gör det enkelt att köra applikationer i molnet. Google ser antagandet av containrar, mikrotjänster och Kubernetes som potentiellt driver kunder till sina molntjänster (även om Kubernetes verkligen fungerar med Azure och AWS också). Kubernetes underhålls för närvarande av Cloud Native Computing Foundation, som själv ligger under paraplyet av Linux Foundation.

Kubernetes vs. Docker och Kubernetes mot Docker Swarm

Kubernetes ersätter inte Docker utan förstärker det. Men Kubernetes inte ersätta en del av de tekniker högre nivå som har framkommit kring Docker.

En sådan teknik är Docker Swarm, en orkestrator medföljd Docker. Det är fortfarande möjligt att använda Docker Swarm istället för Kubernetes, men Docker Inc. har valt att göra Kubernetes en del av Docker Community och Docker Enterprise-utgåvorna framöver.

Inte för att Kubernetes är en ersättare för Docker Swarm. Kubernetes är betydligt mer komplex än Swarm och kräver mer arbete att distribuera. Men återigen är arbetet avsett att ge en stor utdelning på lång sikt - en mer hanterbar, motståndskraftig applikationsinfrastruktur. För utvecklingsarbete och mindre containerkluster presenterar Docker Swarm ett enklare val. 

Kubernetes vs. Mesos

Ett annat projekt du kanske har hört talas om som en konkurrent till Kubernetes är Mesos. Mesos är ett Apache-projekt som ursprungligen kom från utvecklare på Twitter; det sågs faktiskt som ett svar på Google Borg-projektet.

Mesos erbjuder faktiskt containertjänster, men dess ambitioner går långt utöver det: det syftar till att vara ett slags molnoperativsystem som kan samordna både containeriserade och icke-containeriserade komponenter. För detta ändamål kan många olika plattformar köras inom Mesos - inklusive Kubernetes själv.

Kubernetes arkitektur: Hur Kubernetes fungerar

Kubernetes arkitektur använder sig av olika begrepp och abstraktioner. Några av dessa är variationer på befintliga, bekanta föreställningar, men andra är specifika för Kubernetes.

Kubernetes kluster

Kubernetes-abstraktion på högsta nivå, klustret , hänvisar till gruppen maskiner som kör Kubernetes (i sig själv ett klustrat program) och behållarna som hanteras av det. Ett Kubernetes-kluster måste ha en master , systemet som styr och styr alla andra Kubernetes-maskiner i klustret. Ett mycket tillgängligt Kubernetes-kluster replikerar befälhavarens anläggningar över flera maskiner. Men bara en mästare i taget kör jobbet schemaläggare och controller-manager.

Kubernetes noder och skida

Varje kluster innehåller Kubernetes- noder . Noder kan vara fysiska maskiner eller virtuella datorer. Återigen är tanken abstraktion: Oavsett vilken app som körs, hanterar Kubernetes distribution på det substratet. Kubernetes gör det till och med möjligt att säkerställa att vissa containrar bara körs på virtuella datorer eller bara på ren metall.

Noder kör pods , de mest grundläggande Kubernetes-objekten som kan skapas eller hanteras. Varje pod representerar en enda instans av en applikation eller en körprocess i Kubernetes och består av en eller flera behållare. Kubernetes startar, stoppar och replikerar alla behållare i en pod som en grupp. Pods håller användarens uppmärksamhet på applikationen, snarare än på själva behållarna. Detaljer om hur Kubernetes behöver konfigureras, från läget för pods och uppåt, förvaras i Etcd , en distribuerad nyckel-värdebutik.

Pods skapas och förstörs på noder efter behov för att överensstämma med det önskade tillstånd som anges av användaren i poddefinitionen. Kubernetes tillhandahåller en abstraktion som kallas en styrenhet för att hantera logistiken för hur pods snurras upp, rullas ut och snurras ner. Kontroller finns i några olika smaker beroende på vilken typ av applikation som hanteras. Till exempel används den nyligen introducerade "StatefulSet" -kontrollen för att hantera applikationer som behöver beständigt tillstånd. En annan typ av kontroller, distributionen , används för att skala en app upp eller ner, uppdatera en app till en ny version eller rulla tillbaka en app till en känd version om det finns ett problem.

Kubernetes tjänster

Eftersom skida lever och dör efter behov behöver vi en annan abstraktion för att hantera applikationens livscykel. En applikation ska vara en beständig enhet, även när de skivor som kör behållarna som innehåller applikationen inte själva är beständiga. För detta ändamål tillhandahåller Kubernetes en abstraktion som kallas en tjänst.

En tjänst i Kubernetes beskriver hur en viss grupp pods (eller andra Kubernetes-objekt) kan nås via nätverket. Som Kubernetes-dokumentationen uttrycker det, kan de pods som utgör en applikations baksida ändras, men front-enden behöver inte veta om det eller spåra det. Tjänster gör detta möjligt.

Några fler delar inuti Kubernetes rundar ut bilden. De schemaläggare skiften ut arbetsbelastning till noder så att de är balanserade mellan resurser och så att installationer uppfyller kraven i applikations definitioner. De controller manager säkerställer att tillståndet hos systemet-applikationer, arbetsbelastningar, etc.-matcher det önskade tillståndet som definieras i ETCD konfigurationsinställningar.

Det är viktigt att komma ihåg att ingen av de lågnivåmekanismer som används av containrar, till exempel Docker, ersätts av Kubernetes. Snarare tillhandahåller Kubernetes en större uppsättning abstraktioner för att använda dessa mekanismer för att hålla appar igång i skala.

Kubernetes Ingress

Kubernetes tjänster betraktas som körs inom ett kluster. Men du vill ha tillgång till dessa tjänster från omvärlden. Kubernetes har flera komponenter som underlättar detta med varierande grad av enkelhet och robusthet, inklusive NodePort och LoadBalancer, men komponenten med mest flexibilitet är Ingress. Ingress är ett API som hanterar extern åtkomst till ett kluster tjänster, vanligtvis via HTTP.

Ingress kräver lite konfiguration för att kunna konfigureras ordentligt - Matthew Palmer, som skrev en bok om Kubernetes utveckling, leder dig igenom processen på sin webbplats.

Kubernetes Dashboard

En Kubernetes-komponent som hjälper dig att hålla koll på alla dessa andra komponenter är Dashboard, ett webbaserat gränssnitt med vilket du kan distribuera och felsöka appar och hantera klusterresurser. Dashboard är inte installerat som standard, men att lägga till det är inte för mycket besvär.

Relaterad video: Vad är Kubernetes?

Lär dig mer om Kubernetes, det öppna källkodssystemet för automatisering av containeriserade applikationer, från en av teknikens uppfinnare, Joe Beda, grundare och CTO på Heptio.

Kubernetes fördelar

Eftersom Kubernetes introducerar nya abstraktioner och begrepp, och eftersom inlärningskurvan för Kubernetes är hög, är det bara normalt att fråga vad de långsiktiga utdelningarna är för att använda Kubernetes. Här är en genomgång av några av de specifika sätten att köra appar i Kubernetes blir lättare.

Kubernetes hanterar apphälsa, replikering, belastningsbalansering och tilldelning av maskinvaruresurser för dig

En av de mest grundläggande uppgifterna som Kubernetes tar av dig är det hektiska arbetet med att hålla en applikation igång, köra och svara på användarkraven. Appar som blir ”ohälsosamma” eller inte överensstämmer med den definition av hälsa som du beskriver för dem kan läka automatiskt.

En annan fördel som Kubernetes ger är att maximera användningen av hårdvaruresurser inklusive minne, lagring I / O och nätverksbandbredd. Tillämpningar kan ha mjuka och hårda gränser för deras resursanvändning. Många appar som använder minimala resurser kan packas ihop på samma hårdvara; appar som behöver sträckas ut kan placeras på system där de har utrymme att växa. Och igen kan rulla ut uppdateringar över ett kluster eller rulla tillbaka om uppdateringar går sönder automatiseras.

Kubernetes underlättar distributionen av förkonfigurerade applikationer med Helm-diagram

Pakethanterare som Debian Linux APT och Pythons Pip sparar användare besväret med att manuellt installera och konfigurera ett program. Detta är särskilt praktiskt när ett program har flera externa beroenden.

Helm är i grunden en pakethanterare för Kubernetes. Många populära program måste köras i Kubernetes som en grupp av ömsesidigt beroende behållare. Helm tillhandahåller en definitionsmekanism, ett "diagram", som beskriver hur en applikation eller tjänst kan köras som en grupp containrar i Kubernetes.

Du kan skapa dina egna Helm-diagram från grunden, och det kan du behöva om du bygger en anpassad app som ska distribueras internt. Men om du använder ett populärt program som har ett gemensamt distributionsmönster, finns det en god chans att någon redan har komponerat ett Helm-diagram för det och publicerat det i det officiella Helm-diagramförvaret. En annan plats att leta efter officiella Helm-diagram är Kubeapps.com-katalogen.

Kubernetes förenklar hantering av lagring, hemligheter och andra applikationsrelaterade resurser

Behållare är avsedda att vara oföränderliga; vad du än lägger i dem ska inte förändras. Men applikationer behöver status, vilket innebär att de behöver ett tillförlitligt sätt att hantera externa lagringsvolymer. Det görs desto mer komplicerat av hur containrar lever, dör och återföds under en apps livstid.

Kubernetes tillhandahåller abstraktioner så att containrar och appar kan hantera lagring på samma frikopplade sätt som andra resurser. Många vanliga typer av lagring, från Amazon EBS-volymer till vanliga gamla NFS-aktier, kan nås via Kubernetes lagringsdrivrutiner, kallade volymer. Normalt är volymer bundna till en specifik pod, men en volymundertyp som kallas "Persistent Volume" kan användas för data som behöver leva oberoende av vilken pod som helst.

Behållare behöver ofta arbeta med "hemligheter" - referenser som API-nycklar eller servicelösenord som du inte vill ha hårdkodad i en container eller stashed öppet på en diskvolym. Medan tredjepartslösningar är tillgängliga för detta, som Docker-hemligheter och HashiCorp Vault, har Kubernetes sin egen mekanism för nativ hantering av hemligheter, även om den behöver konfigureras med omsorg. Till exempel måste Etcd konfigureras för att använda SSL / TLS när du skickar hemligheter mellan noder, snarare än i vanlig text. 

Kubernetes-applikationer kan köras i hybrid- och multi-cloud-miljöer

En av de långvariga drömmarna om cloud computing är att kunna köra vilken app som helst i vilket moln som helst, eller i en blandning av moln offentligt eller privat. Detta är inte bara för att undvika leverantörslås, utan också för att dra nytta av funktioner som är specifika för enskilda moln.

Kubernetes tillhandahåller en uppsättning primitiv, gemensamt känd som federation, för att hålla flera kluster synkroniserade med varandra över flera regioner och moln. Till exempel kan en given appdistribution hållas konsekvent mellan flera kluster och olika kluster kan dela tjänsteupptäckten så att en back-end-resurs kan nås från vilket kluster som helst. Federation kan också användas för att skapa mycket tillgängliga eller feltoleranta Kubernetes-distributioner, oavsett om du spänner över flera molnmiljöer eller inte.

Federation är fortfarande relativt ny för Kubernetes. Inte alla API-resurser stöds i federerade instanser ännu, och uppgraderingar har ännu inte automatisk testinfrastruktur. Men dessa brister är planerade för att åtgärdas i framtida versioner av Kubernetes.

Var kan man få Kubernetes