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:
- Bron die door elke pod wordt gebruikt
- 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=10In 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 hpaNAAM 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; gedaanOpen 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 hpaNAAM 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.