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

Många valmöjligheter presenteras för IT-team (IT) när de kör containeriserade applikationer, som riktar sig till alla nivåer av teknisk expertis.

Det kan vara svårt att välja ett, med tanke på att du förmodligen inte kommer att migrera till ett annat alternativ när som helst snart.

Det här inlägget kontrasterar två tungt vägande alternativ: Amazon Elastic Container Service (ECS) och Kubernetes.

Båda är kapabla plattformar inom containerorkestrering och hantering av mikrotjänster. Och precis innan du går vidare skadar inte en uppfräschning på containrar. Behållare har blivit populärt för att underlätta kodutveckling, marknadsföring och distribution i många miljöer. De är abstraktioner i applikationslager, som lindar in kod med nödvändiga beroenden, bibliotek och miljöinställningar till ett körbart paket.

Medan huvudsyftet med att använda behållare är att förenkla koddistributionsprocessen, blir det alltmer utmanande att hantera tusentals av dem. En annan mekanism behövs för att implementera mycket tillförlitliga implementeringar, skala applikationer efter belastning, byta ohälsosamma behållare med nya, lastbalansering och exponera portar.

Det är där containerorkestrering kommer till hjälp. Bortsett från det, det finns ett behov av medel för att köra containrar och hantera deras övergripande infrastruktur. Många verktyg finns tillgängliga för att lösa detta problem, men låt oss begränsa fokus till några få.

Det här stycket jämför ECS och Kubernetes, belyser fördelarna med var och en, och avslutar med en vägledning om hur du väljer rätt baserat på ditt projekt.

Vad är Amazon ECS?

Amazon ECS är en containerorkestreringstjänst som effektiviserar distribution, hantering och skalning av containeriserade applikationer. I grund och botten definierar du din ansökan och dess nödvändiga resurser. Sedan lanserar, övervakar och skalar Amazon ECS din app över beräkningsalternativ samtidigt som den tillåter integrering av andra AWS-tjänster som behövs. Du kan till exempel kontrollera status och ändra dina kluster programmatiskt.

Med ECS kan du distribuera dina appar genom en grupp servrar, kallade kluster, med hjälp av uppgiftsdefinitioner och API-anrop (applikationsprogramgränssnitt).

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

Fördelar med Amazon ECS

  • Traditionell ECS – Denna version lanserades 2015 och drivs av Amazon EC2 för att enkelt köra Dockers-containrar i molnet. Traditionell ECS ger dig underliggande kontroll över EC2-alternativ vilket möjliggör flexibilitet. Det betyder att du väljer vilka typer av instanser du vill köra på din behållare. Modellen kopplar dig vidare till andra AWS-tjänster som du kan använda för att övervaka och logga aktivitet på EC2-instanserna.
  • Fargate ECS – Släpptes 2017 för att köra containrar utan att behöva hantera underliggande EC2-beräkningsalternativ. Fargate tar ett annat tillvägagångssätt genom att beräkna den nödvändiga processorn och minnet. Om du vill få igång arbetsbelastningen snabbt kan detta vara ditt bästa alternativ, eftersom du inte behöver oroa dig för de underliggande datoralternativen.
  • Förenklade applikationsarkitekturer – ECS är ett bra alternativ för applikationer med få mikrotjänster (de med få externa beroenden eller har några rörliga delar) som arbetar självständigt.
  • Enkel övervakning och loggning – Du kan enkelt 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 lätt att lära sig. Hosted Kubernetes vinner mer popularitet än traditionella modeller som KOPS smaker och Kubeadm.
  • Serverlös infrastruktur – ECS låter dig köra behållare utan att behöva hantera virtuella maskiner; placerar ut containrar utan mänsklig inblandning.
  • Inbyggd säkerhet – Som standard är Amazon ECS säkrat och kaskaderar säkerhetsåtgärderna genom en isolerad Virtual Private Cloud-nätverksmekanism.
  • Begränsningar av ECS

  • Begränsad lagring – Extern lagring är exklusivt begränsad till Amazon, upp till Amazon EBS.
  • Valideringsbegränsningar – ECS är en Amazon-baserad produkt, därför otillgänglig för offentliga distributioner utanför Amazon.
  • Leverantörslåsning – ECS är partisk; den kan bara hantera sina skapade behållare.
  • ECS-kod otillgänglighet – Mycket av ECS-koden är inte allmänt tillgänglig. Verktyg som AWS Blox (ett ramverk för att bygga anpassade schemaläggare) har en mycket liten del av sina kodbaser med öppen källkod.
  • Vad är Kubernetes?

    Kubernetes, vanligen kallad K8s, är en programvara med öppen källkod för automatisering av containeriserade applikationers distribution, skalning och administration.

    Med hjälp av 15 års erfarenhet av att köra Googles produktionsarbetsbelastningar (som kombinerar de bästa idéerna och gemenskapspraxis), grupperar K8s dina applikationsbehållare i logiska enheter som du enkelt kan upptäcka och hantera.

    Dessutom K8s primära funktioner, som lastbalansering, beständig lagring, automatisk återställning av appar i containers, hemligheter, självläkning för Kubernetes-kluster och konfigurationshantering.

    Läs också: Getting Started with Kubernetes: An Introduction for Beginners

    Fördelar med Kubernetes

  • Öppen källkod (ingen leverantörslåsning) – Oavsett om den körs på plats eller i molnet kan du använda Kubernetes utan att omarbeta orkestreringsstrategin. Till skillnad från traditionell programvara som medför vissa licensavgifter, är K8s gratis och öppen källkod. Som om det inte är nog kör K8s-kluster över offentliga och privata moln som tillhandahåller virtualiseringsresurser på båda enheterna.
  • 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. Denna egenskap är taktiskt användbar i applikationer som genererar höga inkomster. Enkelt uttryckt är det detaljerad kontroll över dina arbetsbelastningar. I de fall du vill byta dina applikationer till mer kraftfulla plattformar är K8s inte begränsad till leverantörslåsningar som ECS.
  • Hög tillgänglighet – Som nämnts ovan är K8s design inriktad på att tillhandahålla tillgängligheten av applikationer och deras nödvändiga infrastruktur vilket gör det till en nödvändig funktion för containrar under produktion. Under hög tillgänglighet finns det några tekniker:
    • Hälsokontroller och självläkning – Kubernetes skyddar dina applikationer från fel genom regelbundna inspektioner av noder. Om en kapsel eller behållare krossas på grund av ett fel, använder K8s automatiskt en ersättning.
    • Lastbalansering och trafikdirigering – När det gäller trafikdirigering kommer K8s endast att skicka förfrågningar till lämpliga containrar. Och med lastbalansering fördelar K8s laster över pods, och balanserar dina resurser för flera tillfällen som avbrott, tillfällig topptrafik eller batchbearbetning. Återigen, du kan också använda externa lastbalanserare om du vill.
  • Skalbarhet för arbetsbelastning – Även om det nämns ovan, låt oss dela upp det ytterligare. K8s använder sina resurser för att tillhandahålla effektiv skalning i följande kriterier.
    • Automatisk skalning – Med den här funktionen kan du automatiskt justera antalet körande behållare enligt CPU-användning och andra CPU-mått.
    • Manuell skalning – Med hjälp av den här funktionen kan du skala antalet körda behållare via kommandoraden eller gränssnittet.
    • Replikeringskontroller – Detta verktyg låter dig bestämma antalet pods som matchar din klusterspecifikation; om det är få, börjar det nytt, och om det är för många, avslutar det dem.
  • Designad för distribution – K8s är speciellt utformad för att påskynda processen att bygga, testa och skicka programvara. Här är några av dess funktioner:
    • Automatiserade återställningar och utrullningar – Du kanske vill rulla ut några nya konfigurationer eller programuppdateringar under utvecklingen. K8s låter dig genomföra processen utan applikationsstopp. I fallet med ett misslyckande rullar K8s robotiskt tillbaka 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 senaste versionen av appen samtidigt som du skalar upp den senaste versionen.
    • Mångsidigt stöd för programmeringsspråk och ramverk – Oavsett om du kommer från Go-, Java- eller .Net-programmeringsspråkbakgrunden, stöder Kubernetes många utvecklingsspråk och ramverk. Om en app kan köras på en container så körs den på K8s.
  • Service discovery – Varje utvecklare önskar att alla tillhandahållna tjänster har ett sätt att kommunicera med varandra. K8s operationsmodell involverar dock att skapa och förstöra containrar kontinuerligt, vilket gör vissa tjänster obefintliga på vissa platser. I traditionell utveckling skulle ett tjänsteregister anpassas för att spåra var dessa tjänster finns. K8s löser detta problem genom ett inbyggt tjänstekoncept för att gruppera poddar och upptäcka tjänster sömlöst. Så, K8s tillhandahåller IP-adresser för alla pods, tilldelar DNS-namn för varje podset och balanserar sedan belastningstrafiken på varje podset. Denna arkitektur genererar en miljö där tjänsteupptäckt abstraheras från varje behållare.
  • Vibrant Community – K8s backas upp av en levande community med tusentals utvecklare som utnyttjar dess tjänster. I skrivande stund använder över 100 miljoner utvecklare K8s för att upptäcka och bidrar med 330 miljoner projekt. Gemenskapen visar inga tecken på att sakta ner och uppmuntrar samarbete mellan utvecklare.
  • Begränsningar för Kubernetes

  • Brant inlärningskurva – För att komma igång med Kubernetes måste du förstå dess landskap. Att leverera en helhetslösning kräver dessutom inkludering av en mängd olika tekniker och tjänster. Och eftersom de kompletterande teknologierna varierar avsevärt (ibland, vissa lösningar går tillbaka till UNIX-dominerade medan andra är nya tekniker med låg användning), kan det vara hektiskt att ta reda på vilka som ska inkluderas. Du måste också ta reda på hur alla komponenter passar ihop för att ge en mer omfattande lösning för specifika problem. Dokumentationen är tillgänglig, men du måste förstå hur du levererar och hanterar dessa tjänster.
  • Särskilja funktioner och projekt – Att förstå skillnaderna mellan projekt och funktioner kan vara utmanande. Även om du enkelt kan få råd om hur du hanterar projekt, kanske du inte får en tydlig skillnad mellan funktioner och community-projekt.
  • Kunskap bortom Kubernetes – Kubernetes är en sofistikerad plattform. Med all denna komplexitet i att leverera lösningar kommer du sannolikt att stöta på viss förvirring, särskilt om du är ny på det. Ändå vill organisationer fortfarande tillhandahålla lösningar (som datalager-som-en-tjänst), vilket förstärker inlärningskurvan. Om du använder sådana tjänster på din produkt måste du bredda din kunskap bortom Kubernetes.
  • Att hantera Kubernetes är svårt – Att komma till produktion med K8s är en sak. Du måste tillhandahålla alla nödvändiga resurser för att dina applikationer ska kunna hantera det. Du måste också hantera all säkerhet och integrera den med din infrastruktur. Dessutom behöver du viss expertis på hög nivå för att bearbeta och använda dess verktyg effektivt. Du behöver få djupgående kunskaper för att hantera Kubernetes-kluster, övervaka och felsöka kluster och stödja dem i stor skala.
  • Jämför ECS och Kubernetes

    Här är en jämförelse sida vid sida som visar skillnaderna:

    Point of differenceKubernetesAmazon ECSA Application definition Applikationer distribueras genom att kombinera pods, noder och tjänster. Applikationsdistribution tar formen av uppgifter. Uppgifterna är containerinstanser – till exempel Docker-containrar som körs på ECS-instanser.DeploymentComplex eftersom du måste distribuera och konfigurera kluster manuellt.Enkel distribution via AWS-konsolen.Nodstöd (antal maskiner)5000 noder per kluster.1000 noder per kluster. .BehållareUpp till 300 000 containrar per kluster.Begränsad av utnyttjad infrastrukturkapacitet.Load BalancingPods exponeras genom tjänster som används som lastbalanserare bakom ingångskontroller.Två lastbalanserare tillgängliga; ELB-Application eller Network.PricingFree.ECS är gratis, men du måste betala för EC2-resurser.OptimeringVäl optimerad för ett enda stort kluster.Förkonfigurerad med krav och behållarkrav.AutoskalningDu definierar autoskalningsparametrar när du bygger implementeringar.Du använder övervakningstjänster som CloudWatch att automatiskt skala baserat på CPU, minne och anpassade parametrar.HälsokontrollTvå hälsokontroller är tillgängliga: beredskap och livlighet.Uppnås genom övervakningstjänster som CloudWatch.Service discoveryEnacted through environment variables eller DNS.Attatained through monitoring services – CloudWatch.Vendor-lock inNej.Ja.

    Användningsfall av ECS och Kubernetes

    Så här revolutionerar ECS och Kubernetes containeriseringsteknik industrier:

    ECS INC International lyfter fram många användningsfall där ECS-tekniken har implementerats. I modern medicinsk utrustning hittar du revolutionerade metoder för att behandla patienter och tekniker för läkemedelstillförsel. Det finns många verktyg, som elektroniska inhalatorer, medicinska autoinjektorer och infusionspumpar.

    Inom IoT-domänen har vi smarta hemenheter. Om du flyttar uppmärksamheten till bilindustrin har vi smarta elbilar med förbättrad körupplevelse och förbättrade säkerhetsåtgärder som assisterade bromssystem.

    Än så länge är det toppen av isberget; du kan kolla in fler applikationer av ECS som inte är begränsade till trådlös teknik, bärbara enheter och industriella användningsfall.

    Å andra sidan har Kubernetes sin del av praktiska tillämpningar. För det första erbjuder IBM-molnet privata, offentliga och hybridfunktioner över ett brett spektrum av körtider.

    Spotify, en jätte inom musikströmningsområdet, utnyttjar Kubernetes-teknik för att underlätta sömlösa operationer, upp till 10 miljoner förfrågningar per sekund. Även om dessa är verkliga användningsfall, tjänar K8s fler funktioner inom mikrotjänstarkitektur, molnbaserade nätverksfunktioner, maskininlärning och pivotering av mjukvaruutvecklingens livscykel.

    Slutord

    Efter att ha gått igenom den här guiden har du en solid översikt över fördelarna och nackdelarna med att välja antingen ECS eller K8s. Nyckeln till att välja rätt alternativ är baserad på några argument. Du måste väga mellan kostnader, servicebegränsningar och talangkostnader.

    Om du vill använda en gratistjänst kommer K8s att vara ditt första val. Men du behöver gedigen talang eller färdigheter för att hantera komplexiteten som kommer med det. Även om K8s inte har begränsningar för leverantörslåsning, kommer det att kräva en djupgående förståelse för hur plattformen fungerar. ECS, å andra sidan, fick snabba konfigurationer.

    Kolla sedan in den detaljerade guiden om Kubernetes vs. Docker.