Hur man skalar Dockerbehållare över servrar med Kubernetes

0
153

Docker är en utvecklarorienterad containeriseringsplattform som låter dig paketera applikationer som fristående behållare. De kör var som helst där en kompatibel behållartid är tillgänglig.

Dockers popularitet har gjort det nästan synonymt med behållare, men det är inte den perfekta tekniken för alla användningsfall. Att använda Docker as-is innebär utmaningar i produktionen eftersom dess CLI bara är utrustat för att hantera enskilda containrar.

Kubernetes är en orkestreringsplattform som hanterar staplar med containrar och skalar dem över flera servrar. Du kan distribuera över en maskinpark och förbättra din tjänsts redundans och motståndskraft. Så här kan du starta ditt eget kluster för att skala din “ Docker ” behållare.

Grunderna i Kubernetes

Att känna igen några viktiga Kubernetes -termer hjälper dig att förstå skillnaderna jämfört med Docker. Kubernetes -ordboken beskriver dussintals resurser du kan lägga till i ditt kluster. Endast de komponenter som styr behållarschemaläggning är relevanta för den här artikeln.

På en hög nivå är en Kubernetes -installation ett kluster av “ noder. ” Noder är oberoende fysiska maskiner som är värd för dina arbetsbelastningar. En enda “ mästare ” noden är ansvarig för att samordna (“ orkestrera ”) klusterets operationer genom att “ schemalägga ” nya behållare till den lämpligaste arbetsnoden.

Här är några viktiga termer:

  • Master – Huvudnoden driver klustret. Detta är maskinen som du installerar Kubernetes på. Den kör kontrollplanet och delegerar värd för containeriserade appar till arbetarnoder.
  • Kontrollplan – Kontrollplanet är mjukvarukomponenten i huvudnoden. Den innehåller flera tjänster, inklusive en API -server, konfigurationslager och containerplanerare.
  • Nod – En nod är en maskin som är värd för dina behållare. Varje arbetare kör en Kubernetes-komponent som heter Kubelet. Detta förblir i kontakt med kontrollplanet och får schemaläggningsinstruktioner som det agerar för att tillhandahålla nya containrar.
  • Pod – En pod är den minsta beräkningsenheten i ett Kubernetes -kluster, som representerar en grupp containerinstanser. Med Pod -abstraktionen kan du interagera med flera löpande behållare totalt.
  • Replica Set – Replika uppsättningar ansvarar för skalning av skida för att säkerställa att ett visst antal kopior finns tillgängliga. Om du ber om tre kopior av en pod, garanterar replikuppsättningen att tillgänglighetsbegränsningen uppfylls. Pods byts automatiskt ut om de misslyckas, så att du automatiserar behållarreplikering över servrar.

Annons

För att skapa ett skalbart kluster krävs en huvudnod, minst två arbetarnoder och en distribution som tillhandahåller flera repliker. Kubernetes kommer att kunna schemalägga dina Pods för alla tillgängliga noder, vilket ger dig motståndskraft om du får ett avbrott.

Skapa ditt kluster

Kubernetes är tillgängligt som ett hanterat erbjudande från de flesta stora molnleverantörer. Dessa ger ett enda klick för att skapa ditt kontrollplan och lägga till ett variabelt antal arbetarnoder.

Du kan köra ett kluster på din egen hårdvara med hjälp av en fristående Kubernetes-distribution som MicroK8s. Du behöver minst två isolerade fysiska eller virtuella maskiner om du vill ha redundant schemaläggningsstöd.

Installera MicroK8 på båda maskinerna. Utse en nod som master och använd kommandot add-node för att starta nodregistreringsprocessen:

microk8s add-node

Detta kommer att avge ett microk8s join -kommando. Byt till din sekundära nod och kör kommandot. Det kommer att ansluta sig till det första klustret som en ny arbetare. Nu är båda maskinerna redo att vara värd för dina containerbelastningar.

Definiera en horisontell skalningsdistribution

Ett program som körs på flera servrar beskrivs som “ horisontellt skalad. ” Det sprider sig i flera olika miljöer. Vertikal skalning av ett system innebär att man lägger till resurser i en befintlig miljö.

Annonsering

Det enklaste sättet att definiera en Kubernetes -arbetsbelastning är med en distribution. Denna resurstyp skapar Pods från en containeravbildning och ställer in offentliga nätverksrutter via en tjänst. Deployments är standard för en enda Pod -instans men kan konfigureras med flera repliker.

Här är ett enkelt distributionsmanifest:

apiVersion: apps/v1 kind: Distribution metadata: name: nginx spec: repliker: 3 väljare: matchLabels: app: nginx mall: metadata: etiketter: app: nginx spec: behållare: – namn: nginx bild: nginx: senaste portar: – containerPort: 80

Applicera manifestet på ditt kluster med Kubectl:

microk8s kubectl apply -f ./manifest.yaml

Kubernetes skapar tre Pods, var och en är värd för en NGINX -webbserver skapad från nginx: senaste bilden. Port 80 exponeras som en containerport för att möjliggöra inkommande trafik.

Pods distribueras automatiskt över klusterets noder. En nod kan vara värd för en pod om den kan tillhandahålla tillräckliga resurser.

Du kan uppdatera antalet kopior när som helst. Ändra replikfältet i ditt manifest och applicera det igen på ditt kluster. Kubernetes -schemaläggaren kommer att vidta åtgärder för att tillhandahålla nya poddar eller avsluta gamla efter behov. Om du skalar ner kopior till 0 kan du ta din app offline utan att faktiskt ta bort distributionen eller dess tillhörande resurser.

Dynamically Adding Nodes

Genom att uppdatera antalet repliker kan du använda de befintliga resurserna i ditt kluster. Så småningom kan du ta slut på din kombinerade nodkapacitet helt och hållet och förhindra att nya Pods schemaläggs. Kubernetes erbjuder en klusterautomatisk skalningsfunktion som kan skapa och förstöra noder, vilket effektivt ändrar antalet poddar som kan schemaläggas.

Att ställa in automatisk skalning är relativt involverat. Den exakta processen beror på ditt klustres värdmiljö. Det kräver integration med en Cluster Autoscaler som kan ansluta till din värd för att upptäcka förändringar i efterfrågan. Officiell dokumentation finns tillgänglig för Google Cloud; lösningar finns också tillgängliga från Amazon EKS och Microsoft AKS.

Annonsering

Automatisk skalning fungerar genom att upprätthålla en konstant kontroll av podningar som inte kan schemaläggas på grund av otillräcklig klusterkapacitet. Det bedömer också om de framgångsrikt schemalagda poddarna faktiskt kan samlokaliseras med ett reducerat nodtal. Auto-scaler använder sedan din molnleverantörs API för att lägga till och ta bort beräkningsinstanser och dynamiskt justera dina klustres resurser. Detta kan påverka din faktura eftersom det vanligtvis är en laddningsbar åtgärd att skapa en ny instans.

Sammanfattning

Kubernetes gör det enkelt att distribuera containerinstanser på flera servrar. Registrera dina maskiner som noder eller använd ett hanterat molnkluster och skapa sedan distributioner som har replikfältet inställt. Du kan skala din arbetsbelastning genom att uppdatera det begärda antalet kopior.

När allvarliga förändringar i efterfrågan förväntas, använd automatisk skalning för att dynamiskt utöka kapaciteten. Med den här funktionen kan du skapa nya noder direkt och lägga till extra resurser så att du kan fortsätta att öka antalet repliker.

När du skalar skalor måste du komma ihåg att någon form av inkommande trafik distribution krävs också. Om du exponerar port 80 måste Kubernetes kunna mappa förfrågningar till port 80 på någon av noderna. Detta fungerar automatiskt med distributioner och tjänster. Kubernetes skapar en Load Balancer som kontinuerligt övervakar Pods för att räkna ut vart trafik kan riktas.