Vilken containerorkestering är bäst för dig?

By rik

Ett flertal alternativ öppnar sig för IT-team när de implementerar containerbaserade applikationer, och dessa alternativ tilltalar olika nivåer av teknisk kompetens.

Att välja rätt kan vara en utmaning, särskilt med tanke på att ett byte till ett annat alternativ sällan är aktuellt på kort sikt.

Denna artikel jämför två framträdande alternativ: Amazon Elastic Container Service (ECS) och Kubernetes.

Båda dessa är kapabla plattformar för containerorkestrering och hantering av mikrotjänster. Innan vi går vidare kan det vara bra med en kort repetition om containrar. Containrar har vunnit popularitet tack vare deras förmåga att förenkla kodutveckling, driftsättning och distribution i en mängd olika miljöer. De fungerar som abstraktioner på applikationsnivå och paketerar kod tillsammans med nödvändiga beroenden, bibliotek och miljöinställningar till ett körbart format.

Medan det primära syftet med att använda containrar är att underlätta distributionsprocessen för kod, blir det allt mer komplext att hantera tusentals av dem. Det krävs därför en annan mekanism för att möjliggöra mycket tillförlitliga implementeringar, skala applikationer efter belastning, byta ut felaktiga containrar mot nya, balansera belastning och exponera portar.

Det är här containerorkestrering kommer in i bilden. Utöver detta behövs verktyg för att köra containrar och administrera deras övergripande infrastruktur. Det finns många verktyg som kan lösa dessa problem, men vi kommer här att fokusera på ett par av dem.

Denna artikel jämför ECS och Kubernetes, lyfter fram fördelarna med respektive plattform, och avslutas med vägledning i hur man väljer den som passar bäst för det aktuella projektet.

Vad är Amazon ECS?

Amazon ECS är en tjänst för containerorkestrering som effektiviserar distribution, hantering och skalning av containerbaserade applikationer. I grund och botten definierar du din applikation och de resurser som krävs. Amazon ECS tar sedan hand om att starta, övervaka och skala din applikation över olika beräkningsalternativ, samtidigt som den möjliggör integration med andra AWS-tjänster som kan behövas. Det är exempelvis möjligt att programmatiskt kontrollera status och ändra dina kluster.

Med ECS kan du driftsätta dina applikationer med hjälp av en grupp servrar, så kallade kluster, med hjälp av uppgiftsdefinitioner och API-anrop (Application Programming Interface).

Läs även: Vilka AWS EC2-instanser ska du använda?

Fördelar med Amazon ECS

  • Traditionell ECS – Denna version, som lanserades 2015, använder Amazon EC2 för att enkelt köra Docker-containrar i molnet. Traditionell ECS ger dig detaljerad kontroll över EC2-alternativ och därmed flexibilitet. Det innebär att du själv väljer vilka typer av instanser du vill använda för din container. Modellen kopplar dig även till andra AWS-tjänster som kan användas för att övervaka och logga aktivitet på EC2-instanserna.
  • Fargate ECS – Släpptes 2017 och låter dig köra containrar utan att behöva hantera de underliggande EC2-beräkningsalternativen. Fargate tar ett annat grepp genom att beräkna den CPU och det minne som krävs. Om du snabbt vill komma igång med din arbetsbelastning kan detta vara det bästa valet, eftersom du inte behöver bekymra dig om de underliggande beräkningsalternativen.
  • Förenklade applikationsarkitekturer – ECS är ett bra alternativ för applikationer med ett mindre antal mikrotjänster (de med få externa beroenden eller få rörliga delar) som arbetar självständigt.
  • Enkel övervakning och loggning – Det är enkelt att integrera ECS med AWS loggnings- och övervakningsverktyg, som CloudWatch. Du behöver inte konfigurera synlighet i containerarbetsbelastningar, vilket sparar tid.
  • Enkel inlärningskurva – ECS är relativt enkelt att lära sig. Hosted Kubernetes vinner dock mer mark jämfört med traditionella modeller som KOPS och Kubeadm.
  • Serverlös infrastruktur – Med ECS kan du köra containrar utan att behöva hantera virtuella maskiner; placera ut containrar utan mänsklig inblandning.
  • Inbyggd säkerhet – Amazon ECS är som standard säkrat och säkerhetsåtgärderna sprids genom en isolerad Virtual Private Cloud-nätverksmekanism.

Begränsningar av ECS

  • Begränsad lagring – Extern lagring är i praktiken begränsad till Amazon, upp till Amazon EBS.
  • Valideringsbegränsningar – ECS är en produkt baserad på Amazon och kan därför inte användas i publika distributioner utanför Amazon.
  • Leverantörslåsning – ECS är partisk; den kan enbart hantera egna containrar.
  • ECS-kodens otillgänglighet – En stor del av ECS-koden är inte allmänt tillgänglig. Verktyg som AWS Blox (ett ramverk för att bygga anpassade schemaläggare) har endast en mycket liten del av sin kodbas med öppen källkod.

Vad är Kubernetes?

Kubernetes, ofta förkortat K8s, är en programvara med öppen källkod för att automatisera distribution, skalning och administration av containerbaserade applikationer.

Med utgångspunkt i 15 års erfarenhet av att köra Googles produktionsarbetsbelastningar (som kombinerar de bästa idéerna och praxis inom communityn), grupperar K8s dina applikationscontainrar i logiska enheter som är enkla att identifiera och hantera.

Dessutom erbjuder K8s primära funktioner som lastbalansering, persistent lagring, automatisk återställning av appar i containrar, hantering av hemligheter, självläkning för Kubernetes-kluster samt konfigurationshantering.

Läs även: Komma igång med Kubernetes: En introduktion för nybörjare

Fördelar med Kubernetes

  • Öppen källkod (ingen leverantörslåsning) – Oavsett om du kör dina applikationer lokalt eller i molnet, kan du använda Kubernetes utan att behöva ändra din orkestreringsstrategi. Till skillnad från traditionell programvara som medför licenskostnader, är K8s gratis och öppen källkod. Dessutom kan K8s-kluster köras över publika och privata moln som tillhandahåller virtualiseringsresurser på båda typer av enheter.
  • Kraftfull flexibilitet – K8s är en utmärkt lösning om dina applikationer behöver hög tillgänglighet samtidigt som de stöder effektivitet och skalbarhet. Den här egenskapen är särskilt värdefull för applikationer som genererar stora intäkter. Enkelt uttryckt ger det detaljerad kontroll över dina arbetsbelastningar. I de fall du vill flytta dina applikationer till mer kraftfulla plattformar, är K8s inte begränsat av leverantörslåsning som ECS.
  • Hög tillgänglighet – Som nämnts ovan är K8s utformat för att garantera tillgängligheten för applikationer och deras nödvändiga infrastruktur, vilket gör det till en viktig funktion för containrar i produktion. För att uppnå hög tillgänglighet används några tekniker:
    • Hälsokontroller och självläkning – Kubernetes skyddar dina applikationer från fel genom regelbundna inspektioner av noder. Om en podd eller container kraschar på grund av ett fel, använder K8s automatiskt en ersättning.
    • Lastbalansering och trafikdirigering – När det gäller trafikdirigering skickar K8s endast förfrågningar till lämpliga containrar. Och med lastbalansering fördelar K8s laster över poddar och balanserar dina resurser vid händelser som avbrott, tillfällig hög trafik eller batchbearbetning. Det är också möjligt att använda externa lastbalanserare.
  • Skalbarhet för arbetsbelastning – Även om det nämndes ovan, kan vi gå in lite djupare på det. K8s använder sina resurser för att tillhandahålla effektiv skalning baserat på följande kriterier:
    • Automatisk skalning – Med den här funktionen kan du automatiskt justera antalet containrar som körs, baserat på CPU-användning och andra CPU-mått.
    • Manuell skalning – Med den här funktionen kan du skala antalet containrar som körs via kommandoraden eller gränssnittet.
    • Replikeringskontroller – Med det här verktyget kan du ange antalet poddar som ska matcha din klusterspecifikation; om det finns för få, startas nya och om det finns för många avslutas de.
  • Designad för distribution – K8s är specifikt utformat för att påskynda processen med att bygga, testa och skicka mjukvara. Här är några av dess funktioner:
    • Automatiserade återställningar och utrullningar – Du kan vilja rulla ut nya konfigurationer eller programuppdateringar under utvecklingen. K8s låter dig genomföra den här processen utan avbrott i applikationen. Om det uppstår ett fel återgår K8s automatiskt till den tidigare versionen.
    • Canary-distributioner – Du kan dra nytta av den här funktionen genom att testa nya distributioner i produktion, parallellt med den tidigare versionen. K8s låter dig skala ner den tidigare versionen av appen samtidigt som du skalar upp den nya versionen.
    • Mångsidigt stöd för programmeringsspråk och ramverk – Oavsett om du kommer från en bakgrund i Go, Java eller .Net, stöder Kubernetes många utvecklingsspråk och ramverk. Om en app kan köras i en container kan den köras på K8s.
  • Tjänsteupptäckt – Alla utvecklare vill att alla tjänster ska kunna kommunicera med varandra. K8s operativa modell innebär att skapa och ta bort containrar kontinuerligt, vilket innebär att vissa tjänster inte längre är tillgängliga på vissa platser. I traditionell utveckling skulle ett tjänsteregister användas för att spåra var dessa tjänster finns. K8s löser det här problemet genom att erbjuda ett inbyggt tjänstekoncept för att gruppera poddar och upptäcka tjänster sömlöst. K8s tillhandahåller IP-adresser för alla poddar, tilldelar DNS-namn för varje poddset och balanserar sedan lasttrafiken på varje poddset. Den här arkitekturen skapar en miljö där tjänsteupptäckt är abstraherad från varje container.
  • Engagerat community – K8s stöds av ett livligt community med tusentals utvecklare som använder dess tjänster. I skrivande stund använder över 100 miljoner utvecklare K8s och bidrar med 330 miljoner projekt. Communityn fortsätter att växa och uppmuntrar samarbetet mellan utvecklare.

Begränsningar för Kubernetes

  • Brant inlärningskurva – För att komma igång med Kubernetes måste du förstå dess struktur. För att leverera en komplett lösning krävs också en mängd olika tekniker och tjänster. Och eftersom de kompletterande teknologierna varierar stort (vissa lösningar är baserade på UNIX medan andra är nya tekniker med begränsad användning), kan det vara svårt att bestämma vilka som ska inkluderas. Du måste även ta reda på hur alla komponenter samverkar för att skapa en mer omfattande lösning för specifika problem. Dokumentationen är visserligen tillgänglig, men du behöver förstå hur du levererar och hanterar dessa tjänster.
  • Att skilja på funktioner och projekt – Att förstå skillnaden mellan projekt och funktioner kan vara en utmaning. Även om det är enkelt att hitta råd om hur du hanterar projekt, får du kanske inte en tydlig bild av skillnaden mellan funktioner och community-projekt.
  • Kunskap utöver Kubernetes – Kubernetes är en avancerad plattform. Med all komplexitet i att leverera lösningar kommer du sannolikt att stöta på viss förvirring, särskilt om du är nybörjare. Organisationer vill dock fortfarande leverera lösningar (som datalagring som tjänst), vilket gör inlärningskurvan brantare. Om du använder sådana tjänster i din produkt måste du utöka dina kunskaper bortom Kubernetes.
  • Att hantera Kubernetes är svårt – Att komma till produktion med K8s är en sak. Du måste tillhandahålla alla resurser som krävs för att dina applikationer ska kunna fungera. Du måste också hantera all säkerhet och integrera den med din infrastruktur. Dessutom krävs expertis på hög nivå för att bearbeta och använda dess verktyg effektivt. Du behöver djupgående kunskaper för att hantera Kubernetes-kluster, övervaka och felsöka kluster samt ge support i stor skala.

Jämför ECS och Kubernetes

Här följer en tabell som jämför skillnaderna:

Skillnad Kubernetes Amazon ECS
Applikationsdefinition Applikationer distribueras genom att kombinera poddar, noder och tjänster. Applikationsdistribution sker i form av uppgifter. Uppgifterna är containerinstanser, t.ex. Docker-containrar, som körs på ECS-instanser.
Distribution Komplex eftersom du måste distribuera och konfigurera kluster manuellt. Enkel distribution via AWS-konsolen.
Nodstöd (antal maskiner) 5 000 noder per kluster. 1 000 noder per kluster.
Containrar Upp till 300 000 containrar per kluster. Begränsat av tillgänglig infrastrukturkapacitet.
Lastbalansering Poddar exponeras genom tjänster som används som lastbalanserare bakom ingångskontroller. Två lastbalanserare är tillgängliga: ELB-Application eller Network.
Prissättning Gratis. ECS är gratis, men du måste betala för EC2-resurser.
Optimering Väl optimerad för ett enda stort kluster. Förkonfigurerad med krav och containerkrav.
Automatisk skalning Du definierar autoskalningsparametrar när du bygger implementeringar. Du använder övervakningstjänster som CloudWatch för att automatiskt skala baserat på CPU, minne och anpassade parametrar.
Hälsokontroll Två hälsokontroller är tillgängliga: beredskap och livlighet. Uppnås genom övervakningstjänster som CloudWatch.
Tjänsteupptäckt Genomförs med hjälp av miljövariabler eller DNS. Uppnås med hjälp av övervakningstjänster som CloudWatch.
Leverantörslåsning Nej. Ja.

Användningsfall av ECS och Kubernetes

Så här revolutionerar ECS och Kubernetes containeriseringsteknik i olika branscher:

ECS INC International lyfter fram många användningsfall där ECS-tekniken har använts. Inom modern medicinsk utrustning finns revolutionerande metoder för behandling av patienter och teknik för läkemedelsleverans. Det finns många verktyg som elektroniska inhalatorer, medicinska autoinjektorer och infusionspumpar.

Inom IoT-området finns smarta hemprodukter. Och om vi tittar på bilindustrin finns det smarta elbilar med förbättrad körupplevelse och förbättrade säkerhetsåtgärder, t.ex. assisterande bromssystem.

Detta är bara toppen av isberget. Du kan hitta fler exempel på ECS-användningsområden som inte är begränsade till trådlös teknik, bärbara enheter och industriella applikationer.

Kubernetes har å sin sida också ett brett spektrum av praktiska tillämpningar. IBM Cloud erbjuder privata, publika och hybridfunktioner över ett brett spektrum av miljöer.

Spotify, en stor aktör inom musikströmning, använder Kubernetes-teknik för att möjliggöra sömlösa operationer, med upp till 10 miljoner förfrågningar per sekund. Även om detta är verkliga användningsfall har K8s många fler funktioner inom mikrotjänstarkitektur, molnbaserade nätverksfunktioner, maskininlärning samt omformning av mjukvaruutvecklingslivscykeln.

Slutord

Efter att ha läst denna guide har du en bra överblick över fördelarna och nackdelarna med att välja antingen ECS eller K8s. Det viktigaste för att välja rätt alternativ är att ta hänsyn till ett antal faktorer. Du måste väga mellan kostnader, begränsningar och kostnad för kompetens.

Om du vill använda en gratistjänst är K8s ett bra val. Du behöver dock djupgående kompetens för att hantera komplexiteten. K8s har inga begränsningar för leverantörslåsning, men det krävs djupgående kunskap om hur plattformen fungerar. ECS ger å andra sidan snabba konfigurationer.

Läs även den detaljerade guiden om Kubernetes kontra Docker.