Docker-containers op verschillende servers schalen met Kubernetes

0
176

Docker is een op ontwikkelaars gericht containerisatieplatform waarmee u applicaties als standalone kunt verpakken containers. Ze draaien overal waar een compatibele containerruntime beschikbaar is.

De populariteit van Docker heeft het bijna synoniem gemaakt met containers, maar het is niet de perfecte technologie voor alle gebruiksscenario's. Het gebruik van Docker zoals het is, biedt uitdagingen in de productie, aangezien de CLI alleen is uitgerust om individuele containers te beheren.

Kubernetes is een orkestratieplatform dat stapels containers beheert en schaalt over meerdere servers. U kunt implementeren op een hele reeks fysieke machines, waardoor de redundantie en veerkracht van uw service wordt verbeterd. Hier leest u hoe u uw eigen cluster kunt starten om uw “Docker” containers.

Kubernetes Basis

Als u enkele belangrijke Kubernetes-termen herkent, kunt u de verschillen met Docker begrijpen. Het Kubernetes-woordenboek beschrijft tientallen bronnen die u aan uw cluster kunt toevoegen. Alleen de componenten die de containerplanning regelen, zijn relevant voor dit artikel.

Op een hoog niveau is een Kubernetes-installatie een cluster van “nodes.” Knooppunten zijn onafhankelijke fysieke machines die uw workloads hosten. Een enkele “master” node is verantwoordelijk voor het coördineren (“orkestreren”) van de operaties van het cluster door middel van “planning” nieuwe containers naar de meest geschikte worker-node.

Hier zijn enkele kritische termen:

  • Meester – Het hoofdknooppunt bedient het cluster. Dit is de machine waarop u Kubernetes installeert. Het voert het controlevlak uit en delegeert de hosting van gecontaineriseerde apps aan werkknooppunten.
  • Besturingsvlak – Het besturingsvlak is de softwarecomponent van het hoofdknooppunt. Het bevat verschillende services, waaronder een API-server, configuratiearchief en containerplanner.
  • Node– Een node is een machine die uw containers host. Elke worker voert een Kubernetes-component uit met de naam Kubelet. Deze blijft in contact met het controlevliegtuig en ontvangt planningsinstructies waarop het reageert om nieuwe containers te leveren.
  • Pod – Een pod is de kleinste rekeneenheid in een Kubernetes-cluster, die een groep containerinstanties vertegenwoordigt. Met de Pod-abstractie kunt u samenwerken met meerdere actieve containers in totaal.
  • Replicaset– Replicasets zijn verantwoordelijk voor het schalen van Pods om ervoor te zorgen dat een bepaald aantal replica's beschikbaar is. Als u om drie replica's van een pod vraagt, garandeert de replicaset dat aan de beschikbaarheidsbeperking wordt voldaan. Pods worden automatisch vervangen als ze falen, zodat u containerreplicatie over servers kunt automatiseren.

Advertentie

Het maken van een schaalbaar cluster vereist een hoofdknooppunt, ten minste twee werkknooppunten en een implementatie die meerdere replica's inricht. Kubernetes kan uw pods plannen voor alle beschikbare knooppunten, waardoor u veerkrachtig bent in het geval dat er een uitvalt.

Uw cluster maken

Kubernetes is beschikbaar als beheerd aanbod van de meeste grote cloudproviders. Deze bieden een manier om met één klik uw controlevlak te maken en een variabel aantal werkknooppunten toe te voegen.

U kunt een cluster op uw eigen hardware uitvoeren met behulp van een op zichzelf staande Kubernetes-distributie zoals MicroK8s. Je hebt ten minste twee geïsoleerde fysieke of virtuele machines nodig als je redundante planningsondersteuning wilt hebben.

Installeer MicroK8s op beide machines. Wijs één node aan als master en gebruik de opdracht add-node om het registratieproces van de node te starten:

microk8s add-node

Dit zal een microk8s join-opdracht uitzenden. Schakel over naar uw secundaire knooppunt en voer de opdracht uit. Het voegt zich bij het eerste cluster als een nieuwe werknemer. Nu zijn beide machines klaar om uw gecontaineriseerde workloads te hosten.

Een horizontaal geschaalde implementatie definiëren

Een applicatie die op meerdere servers draait wordt beschreven als “horizontaal geschaald.” Het verspreidt zich over verschillende verschillende omgevingen. Verticaal schalen van een systeem omvat het toevoegen van bronnen aan een bestaande omgeving.

Advertentie

De eenvoudigste manier om een ​​Kubernetes-workload te definiëren, is met een implementatie. Dit resourcetype maakt pods van een containerimage en stelt openbare netwerkroutes in via een service. Implementaties zijn standaard ingesteld op een enkele Pod-instantie, maar kunnen worden geconfigureerd met meerdere replica's.

Hier is een eenvoudig implementatiemanifest:

apiVersion: apps/v1 soort: Metadata van implementatie: naam: nginx spec: replica's: 3 selector: matchLabels: app: nginx sjabloon: metadata: labels: app: nginx spec: containers: – naam: nginx afbeelding: nginx:laatste poorten: – containerPort: 80

Pas het manifest op uw cluster toe met Kubectl:

microk8s kubectl apply -f ./manifest.yaml

Kubernetes maakt drie Pods, die elk een NGINX-webserver hosten die is gemaakt op basis van de nginx:latest-afbeelding. Poort 80 wordt weergegeven als een containerpoort om inkomend verkeer mogelijk te maken.

Pods worden automatisch verdeeld over de knooppunten van uw cluster. Een node komt in aanmerking voor het hosten van een Pod als deze voldoende middelen kan leveren.

U kunt het aantal replica's op elk gewenst moment bijwerken. Wijzig het veld replica's in uw manifest en pas het opnieuw toe op uw cluster. De Kubernetes-planner onderneemt actie om nieuwe Pods in te richten of oude te beëindigen indien nodig. Als u replica's naar 0 schaalt, kunt u uw toepassing offline halen zonder de implementatie of de bijbehorende bronnen daadwerkelijk te verwijderen.

Dynamisch knooppunten toevoegen

Door het aantal replica's bij te werken, kunt u de bestaande resources binnen uw cluster gebruiken. Uiteindelijk kan het zijn dat u uw gecombineerde knooppuntcapaciteit helemaal uitput, waardoor er geen nieuwe Pods kunnen worden gepland. Kubernetes biedt een faciliteit voor automatisch schalen van clusters die nodes kan maken en vernietigen, waardoor het aantal pods dat kan worden gepland, effectief wordt gewijzigd.

Het instellen van auto-scaling is relatief ingewikkeld. Het exacte proces is afhankelijk van de hostingomgeving van uw cluster. Het vereist integratie met een Cluster Autoscaler die in staat is om aan te sluiten op uw host om veranderingen in de vraag te detecteren. Officiële documentatie is beschikbaar voor Google Cloud; oplossingen zijn ook verkrijgbaar bij Amazon EKS en Microsoft AKS.

Advertentie

Automatisch schalen werkt door een constante controle te houden op Pods die niet kunnen worden gepland vanwege onvoldoende clustercapaciteit. Het beoordeelt ook of de succesvol geplande Pods daadwerkelijk kunnen worden gecoloceerd met een verminderd aantal nodes. De auto-scaler gebruikt vervolgens de API van uw cloudprovider om rekeninstances toe te voegen en te verwijderen, waarbij de resources van uw cluster dynamisch worden aangepast. Dit kan van invloed zijn op uw factuur, aangezien het maken van een nieuwe instantie meestal een handeling is die in rekening wordt gebracht.

Samenvatting

Kubernetes maakt het gemakkelijk om containerinstanties over meerdere servers te distribueren. Registreer uw machines als knooppunten of gebruik een beheerd cloudcluster en maak vervolgens implementaties met de replica's-veldset. U kunt uw werklast schalen door het aantal aangevraagde replica's bij te werken.

Als er grote veranderingen in de vraag worden verwacht, kunt u automatisch schalen gebruiken om de capaciteit dynamisch uit te breiden. Met deze functie kun je on-the-fly nieuwe nodes maken en extra bronnen toevoegen, zodat je het aantal replica's kunt blijven verhogen.

Als je Pods schaalt, moet je rekening houden met een vorm van inkomend verkeer distributie is ook nodig. Als u poort 80 vrijgeeft, moet Kubernetes verzoeken kunnen toewijzen aan poort 80 op elk van de knooppunten. Dit werkt automatisch met implementaties en services. Kubernetes maakt een Load Balancer die Pods continu controleert om te bepalen waar het verkeer naartoe kan worden geleid.