Kubernetes

Kubernetes Horizontale Pod Autoscaler

Kubernetes Horizontale Pod Autoscaler
Pods kunnen worden gemaakt als zelfstandige objecten, of als onderdeel van een schaalbare replicaset of een implementatie. Elk van de laatste twee objecten wordt gebruikt om niet slechts één pod in te zetten, maar een groot aantal ervan. Het doel hier is dat de pods fungibel kunnen zijn als er te veel verkeer is, er nog twee kunnen spawnen en de extra last op zich nemen. Een belangrijk ding om hier op te merken is echter dat zowel replicaset- als implementatieobjecten een hard gecodeerd aantal pod-replica's hebben die ze willen uitvoeren.

Als het aantal replica's is ingesteld op 100 en de vraag is te klein, zelfs dan zijn de 100 pods actief. Dit resulteert in verspilling van CPU- en geheugenbronnen. Ja, het biedt betrouwbaarheid, in die zin dat als een knooppunt crasht en pods erin sterven, de Replica Set-controller zou proberen het aantal pods terug te brengen naar 100 door pods in andere knooppunten te spawnen. De applicatie blijft online.

In een meer abstracte zin zou de Replica Set proberen een gewenste status van het cluster en zou kijken naar de huidige toestand en erachter te komen hoe het de gewenste staat kan bereiken.

We willen echter iets dat iets gevoeliger is voor de vraag in de echte wereld. Enter Horizontale pod-autoscaler. Het is de taak van Horizontal Pod Autoscaler om de toepassing op te schalen wanneer dat nodig is en deze vervolgens weer terug te schalen zodra de werklast daalt.

Waarom een ​​Horizontale Pod Autoscaler gebruiken??

Zoals de naam al doet vermoeden, zou dit onderdeel uw toepassing automatisch schalen. In de cloud kan dit u echt helpen de reken- en geheugenbronnen te verminderen waarvoor u in rekening wordt gebracht. Aangezien de Autoscaler gevoelig is voor het gebruik van bronnen, schaalt hij de toepassing naar beneden wanneer hij ziet dat veel pods gewoon inactief zijn en wanneer de vraag naar die pods toeneemt, wordt de toepassing opgeschaald door nieuwe pods te maken en wordt de belasting gedistribueerd naar die.

Het kan u zowel kostbare tijd als computerbronnen besparen. U hoeft zich geen zorgen te maken over wat het aantal replica's voor uw pods moet zijn bij het schrijven van een implementatie, autoscaler regelt dat voor u.

Initiële setup

De eerste en belangrijkste vereiste is dat u een actief Kubernetes-cluster heeft. Gebruik Katacoda Playground die perfect is om te experimenteren en te leren over Kubernetes. Het volgende dat u nodig heeft, is een metrische server.

Deze add-on voor uw Kubernetes-systeem (kube-systeemnaamruimte) verzamelt metrische gegevens zoals CPU- en geheugengebruik vanuit twee verschillende perspectieven:

  1. Bron die door elke pod wordt gebruikt
  2. Bron verbruikt op elk knooppunt

Metrieken vanuit beide perspectief zijn cruciaal om Autoscaler te helpen beslissen wat de volgende stap moet zijn. Volg deze handleiding om een ​​metrische server toe te voegen aan uw Kubernetes-cluster:. Nu zijn we klaar om Horizontal Pod Autoscaler in actie te zien.

De autoscaler gebruiken

Om de Autoscaler te zien werken, hebben we een testtoepassing nodig. Laten we een eenvoudige php-apache-server maken en deze als een service aanbieden.

$ kubectl voer php-apache uit --image=k8s.gcr.io/hpa-voorbeeld --requests=cpu=200m --expose
--poort=80

De afbeelding die hier wordt gebruikt, is een van de voorbeeldafbeeldingen van het Kubernetes-project. Het voert een aantal CPU-intensieve taken uit en maakt het proces daardoor veel duidelijker.

Om deze implementatie automatisch te schalen, moeten we de autoscaler laten weten wat het minimum en maximum aantal pods is dat we toestaan ​​en het CPU-percentage dat ze mogen gebruiken. Er zijn nog veel meer factoren waar u rekening mee kunt houden, zoals geheugen, opslag en netwerk.

$ kubectl implementaties voor automatisch schalen/php-apache --cpu-percent=50 --min=1 --max=10

In de huidige staat, aangezien niemand deze service gebruikt, zal deze het liefst op de minimumwaarde blijven. U kunt de status van alle automatisch geschaalde implementaties in de standaardnaamruimte controleren door het volgende uit te voeren:

$ kubectl krijg hpa
NAAM         REFERENTIE               DOELEN   MINPODS   MAXPODS   REPLICAS   LEEFTIJD
php-apache   Implementatie/php-apache   0%/50%    1         10        1          2m

Belasting genereren en de functie voor automatisch schalen testen

Je kunt zien dat het aantal replica's nog steeds maar één is en dat de CPU-belasting onbeduidend laag is. We kunnen extra belasting creëren en zien hoe de autoscaler erop reageert. De service die onze php-apache-pods blootlegt, is niet blootgesteld aan de buitenwereld, dus we zullen een tijdelijke pod maken en een interactieve shell-sessie openen in die pod.

Hierdoor kunnen we communiceren met alle services die beschikbaar zijn in het cluster, inclusief de php-apache-service.

$ kubectl run -i --tty busybox --image=busybox --restart=Nooit -- sh
/ #

U zult merken dat de prompt zal veranderen om aan te geven dat we ons in deze container bevinden. Laten we nu proberen onze service wat te belasten door herhaaldelijk verzoeken te doen. Laten we in de nieuwe prompt de volgende while-lus uitvoeren:

/ # terwijl waar; doe wget -q -O- http://php-apache.standaard.svc.TROS.lokaal; gedaan

Open een nieuwe terminal, aangezien we deze lus nog niet kunnen laten eindigen. Bij het inspecteren van de autoscaler ziet u het CPU-gebruik en bij het vermelden van de pods zult u zien dat er nu meerdere exemplaren van de php-apache-server zijn,

$ kubectl krijg hpa
NAAM         REFERENTIE               DOELEN    MINPODS   MAXPODS   REPLICA'S   LEEFTIJD
php-apache   Implementatie/php-apache   121%/50%   1         10        4          1 uur
 
$ kubectl krijg pods
NAAM                          GEREED     STATUS    HERSTART   LEEFTIJD
busybox                       1/1       In bedrijf   0          6m
php-apache-8699449574-7qwxd   1/1       Actief   0          28s
php-apache-8699449574-c9v54   1/1       Actief   0          10u
php-apache-8699449574-h9s5f   1/1       Actief   0          28s
php-apache-8699449574-sg4hz   1/1       Actief   0          28s

Beëindig de while-lus en het aantal pods zal binnen een paar minuten worden teruggebracht tot één.

Conclusie

Dus dat is een eenvoudige demonstratie van Horizontal Pod Autoscaler. Vergeet niet om een ​​functionele metrische-server voor uw cluster te hebben en houd tijdens het maken van een implementatie het aantal replica's op 1. De horizontale pod-autoscaler doet de rest.

Top 5 Game Capture-kaarten
We hebben allemaal gezien en genoten van streaming gameplays op YouTube. PewDiePie, Jakesepticye en Markiplier zijn slechts enkele van de beste gamers...
Hoe een spel op Linux te ontwikkelen
Tien jaar geleden zouden niet veel Linux-gebruikers voorspellen dat hun favoriete besturingssysteem ooit een populair spelplatform voor commerciële vi...
Open source-poorten van commerciële game-engines
Gratis, open source en platformonafhankelijke game-engine-recreaties kunnen worden gebruikt om zowel oude als enkele van de vrij recente gametitels te...