Kubernetes vs Docker Swarm: Vilken ska du använda?

0
143

Kubernetes och Docker's Swarm -läge är två containerorkesteringsverktyg som låter dig skala arbetsbelastningsreplikor över flera fysiska maskiner. Även om Kubernetes är det mer populära valet, har Docker Swarm några unika fördelar som också är värda att överväga.

Här är en titt på hur dessa två tekniker jämförs mellan deras nyckelfunktioner. Båda har samma slutmål – låter dig skala behållare – men uppnå det på ibland ganska olika sätt. Oavsett vilket du väljer kommer du att kunna starta och skala behållare som skapats från bilder som är byggda med Docker eller en annan populär containermotor.

Översikt

Kubernetes utvecklades ursprungligen som ett projekt med öppen källkod på Google. Det finns nu på Cloud Native Computing Foundation (CNCF), ett branschövergripande arbete för att marknadsföra och underhålla mycket använda molnbyggda projekt.

Att komma igång med Kubernetes kräver att du skapar ett kluster av fysiska maskiner som heter knutpunkter. Dessa maskiner kör dina behållare och styrs av en centraliserad primär nod som utfärdar instruktioner för containerplanering. Arbetarnoder fungerar enligt dessa instruktioner för att hämta bilder från registren och starta dina behållare.

Kubernetes är tänkt att vara företagsklassat och produktionsklart. Dess schemaläggningsmöjligheter inkluderar autoskalning, automatisk placering, belastningsfördelning och kontinuerlig övervakning av containeravslutningar och omstarter.

Annonsering

Swarm-läge är Docker ’ s inbyggda orkestrator, ingår som del av standard Docker -distribution. Varje maskin med dockare installerad kan skapa eller gå med i ett svärmskluster.

Med Swarm kan du också länka flera oberoende fysiska maskiner till ett kluster. Det förenar effektivt en uppsättning Docker -värdar till en enda virtuell värd. Det finns en relativt grund inlärningskurva och användare som är bekanta med Docker med en värd kan i allmänhet snabbt ta sig an Swarm-läget.

Precis som Kubernetes är en enda Swarm-chefsnod ansvarig för schemaläggning och övervakning av behållare. Chefen kan reagera på incidenter i klustret, till exempel att en nod går offline och omplanera behållare i enlighet därmed. Det stöder också rullande uppdateringar, så att du kan skala arbetsbelastningar utan att påverka tillgängligheten.

Lägga till nya arbetsbelastningar

Kubernetes applikationer distribueras genom att skapa en deklarativ representation av stackens resurser i en YAML -fil. YAML är “ tillämpad ” till ditt kluster, vanligtvis med hjälp av ett CLI som kubectl, sedan påverkat av Kubernetes -kontrollplanet som körs på den primära noden.

Ytterligare verktyg via projekt som Helm låter dig “ installera ” applikationer som använder förkonfigurerade “ diagram. ” Det här är samlingar av YAML -filer som har paketerats för att enkelt kunna läggas till i ditt kluster.

Kubernetes erbjuder dussintals resurstyper som abstrakta klusterfunktioner som nätverk, lagring och containerdistributioner. Att lära sig de olika resurstyperna och deras roller presenterar en ganska brant inlärningskurva för en nykomling. Du uppmuntras att titta på systemets övergripande arkitektur, inte bara muttrar och bultar på enskilda behållare.

Annonsering

Docker Swarm använder också YAML -filer men enkla distributioner kan skapas utan dem. Swarm CLI erbjuder tvingande kommandon som ett alternativ så att du kan starta en trio NGINX -behållare genom att köra:

dockerstjänst skapa –replicas 3 –namn nginx nginx: senaste

När YAML -filer används är formatet fortfarande mycket mer koncist än Kubernetes -resurser. Swarm stack -definitioner liknar mycket Docker Compose -filer; Swarm kan distribuera de flesta Compose-filer som de är, vilket gör att du enkelt kan överföra dina befintliga Dockerized-arbetsbelastningar till skalad drift i ett Swarm-kluster med flera noder.

Kubernetes arbetar med abstraktioner som ligger långt över dina faktiska behållare . Du måste förstå termer som Replica Set, Deployment och Pod, och hur de relaterar till behållarna du kör. Däremot kommer definiering av Swarm-tjänster att känna sig bekant för alla som redan har använt Docker och Docker Compose.

Skalningsbehållare

Kubernetes och Docker Swarm är båda byggda med skalbarhet som huvudmål. På en grundläggande nivå låter de dig replikera dina behållare över flera isolerade arbetarnoder, vilket förbättrar din motståndskraft mot maskinvarufel och låter dig lägga till nya containerinstanser för att möta efterfrågan.

Kubernetes ger starka garantier kring replikering, konsistens och distribution. Det kan automatiskt skala dina tjänster baserat på externa faktorer, vilket säkerställer att dina arbetsbelastningar förblir tillgängliga även under tider med hög efterfrågan. Denna automatisering kan vara en avgörande faktor för upptagna driftsteam.

Docker Swarm kräver att skalning utförs manuellt, antingen genom att uppdatera din stack -komponentfil eller använda ett CLI kommando för att ändra antalet repliker. Det är enkelt men effektivt: ändringar gäller mycket snabbare än Kubernetes, eftersom Swarm är ett mindre komplicerat system. Det betyder att det kan vara det bättre valet om du behöver extremt lyhördhet.

Annonsering

Båda orkestrarna är också effektiva för att upprätthålla hög tillgänglighet. Kubernetes och Docker Swarm kommer att omplanera behållare om en misslyckas eller om en arbetsnod går offline. Detta beteende bibehåller automatiskt ditt angivna antal repliker, förutsatt att tillräckliga resurser finns tillgängliga på dina andra noder.

Nätverk och lastbalansering

Kubernetes avslöjar arbetsbelastning via “ tjänster ” som fungerar som inklusterlastbalanserare. Trafik når vanligtvis tjänsten via en Ingress, en resurs som låter dig filtrera inkommande förfrågningar baserat på egenskaper som deras värdnamn och webbadress.

Som vanligt med Kubernetes betyder det att det finns flera steg och abstraktioner att lära sig. Dina container Pods måste referera till en tjänst, som i sig refereras av en Ingress som definierar dina dirigeringsregler. Uppåtsidan är att allt detta är inbyggt i Kubernetes; den enda förutsättningen är en extern belastningsutjämnare som pekar på klusterets primära IP -adress. Hanterade Kubernetes molnleverantörer erbjuder vanligtvis en ett-klick-metod för att skapa en sådan lastbalanserare.

Nätverk uppför sig annorlunda i Docker Swarm . På samma sätt som vanliga Docker -containrar kan du enkelt publicera portar till ett intrångsnätverk som är tillgängligt för alla värdar i svärmen. Detta innehåller ett routningsnät som säkerställer att inkommande förfrågningar når en instans av din behållare på någon av de tillgängliga noder. Swarm erbjuder också ett nätverksläge per värd där portar bara öppnas på de enskilda värdar som behållare körs på.

Vad Swarm saknar är ett inbyggt sätt att dirigera trafik till behållare baserat på begärningsegenskaper som värdnamn och URL. För att uppnå detta brukar du lägga till en omvänd proxy som NGINX, Traefik eller HAProxy som fungerar som ingångspunkt till din svärm, matchar inkommande förfrågningar och vidarebefordrar dem till lämplig behållare. Att lägga till en ytterligare infrastrukturkomponent för att avslöja tjänster bakom olika domännamn kan göra Swarm mindre lämplig för flera produktionsarbetsbelastningar.

Observability

Kubernetes och Docker Swarm båda har inbyggda loggnings- och övervakningsverktyg som låter dig inspektera containerloggar och resursförbrukning. När det gäller Kubernetes kan du observera ditt kluster med hjälp av populära CLI-verktyg som kubectl, eller byta till ett webbaserat gränssnitt som den officiella instrumentpanelen. Swarm exponerar loggar genom sin CLI på samma sätt som vanliga Docker container loggar – använd dockningstjänstloggar för att strömma från en tjänst.

Annonsering

Var Kubernetes ’ observerbarhetsstöd sträcker sig bortom Swarm ’ s är i sina integrationer med tredjepartsverktyg. Om du lägger till ett övervakningssystem som Prometheus kan du söka, visualisera och lagra mätvärden och varningar, medan aggregatorer som Fluentd tillhandahåller liknande funktioner för loggar. Dessa hjälper dig att utveckla ett mycket observerbart kluster som du enkelt kan inspektera utifrån.

Dessa verktyg kan fortfarande användas med Docker Swarm men du måste konfigurera dina egna procedurer för att flytta data från din svärm till dina aggregeringsplattformar. Kubernetes ger en mer sömlös upplevelse där verktygen körs inuti ditt kluster och inspekterar det inifrån.

Slutsats

Kubernetes och Docker Swarm är två containerorkestrar som du kan använda för att skala dina tjänster. Vilken du ska använda beror på storleken och komplexiteten på din tjänst, dina mål kring replikering och eventuella särskilda krav du har för nätverk och observerbarhet.

Kubernetes är ett system av produktionsklass som inkluderar automatisk skalning, nätverksinträde och enkla integrationer för observerbarhet i standardinstallationen. Den installationen kan vara svårare att uppnå eftersom du kommer att behöva underhålla ditt eget kluster eller skapa ett med en offentlig molnleverantör. Självhantering av kontrollplanet kan vara ganska involverat, med Kubernetes-administration som nu vanligtvis ses som en jobbtitel i sig.

Att distribuera till Kubernetes kräver en förståelse av de bakomliggande begreppen, hur de abstraherar behållargrunder, och resurstypen du bör använda i varje scenario. Detta ger en relativt brant inlärningskurva; Kubernetes har ryktet om sin komplexitet och orsakar förvirring hos nykomlingar, vilket är värt att tänka på om du inte har ett dedikerat driftsteam.

Docker Swarm är mycket enklare att köra. Om du har installerat Docker har du redan allt du behöver. Swarm kan horisontellt distribuera dina behållare, planera om dem i en failover-situation och skala dem på begäran.

Annonsering

Daglig användning liknar mycket etablerade Docker-arbetsflöden. Kärnkommandona CLI påminner om vanliga Docker -containeroperationer och det finns kompatibilitet med dina befintliga Docker Compose -filer. Detta gör Swarm perfekt för snabb användning i interna miljöer och utvecklarsandlådor som redan är kraftigt dockade.

Du behöver inte lägga allt i en plattform: många team använder både Swarm och Kubernetes för olika system så att fördelarna med båda kan realiseras. Swarm är enklare, lättare att underhålla, mer bekant för utvecklare och snabbare att skala dina tjänster. Kubernetes är mer krävande att använda och bygger på sina egna abstraktioner men ger dig automatisering, en helt integrerad nätverkslösning och tillgång till ett växande ekosystem av stödverktyg.