Hvis replikantallet er indstillet til 100, og efterspørgslen er for lille, vil de 100 bælg også være i gang. Dette resulterer i spild af CPU- og hukommelsesressourcer. Ja, det giver pålidelighed, i den forstand at hvis en knude kolliderer og bælg i den dør, ville Replica Set-controlleren forsøge at bringe antallet af bælg tilbage til 100 ved at gyde bælg i andre noder. Ansøgningen forbliver online.
I en mere abstrakt forstand ville replikasættet forsøge at opnå en ønsket tilstand af klyngen og ville se på nuværende tilstand og find ud af, hvordan det kan opnå den ønskede tilstand.
Vi vil dog gerne have noget lidt mere følsomt over for den virkelige verdens efterspørgsel. Gå ind Vandret pod autoscaler. Det er Horisontal Pod Autoscaler's opgave at skalere applikationen op, når der er behov for den, og derefter skalere den ned igen, når arbejdsbelastningen falder.
Hvorfor bruge en Horisontal Pod Autoscaler?
Som navnet antyder, skal denne komponent automatisk skalere din applikation. I skyen kan dette virkelig hjælpe dig med at reducere de beregnings- og hukommelsesressourcer, du bliver faktureret for. Da Autoscaler er følsom over for ressourceudnyttelsen, når den ser, at mange bælg bare sidder inaktiv, skalerer den applikationen ned, og når efterspørgslen på disse bælg øges, skalerer den applikationen op ved at oprette nye bælg og belastningen distribueres til de der.
Det kan spare dig både værdifuld tid og beregningsressourcer. Du behøver ikke bekymre dig om, hvad replikantalet skal være for dine bælg, når du skriver en implementering, autoskaler vil klare det for dig.
Første opsætning
Først og fremmest er kravet, at du har en kørende Kubernetes-klynge. Brug Katacoda Playground, som er perfekt til eksperimenter og læring om Kubernetes. Den næste ting, du har brug for, er en metrisk server.
Denne tilføjelse til dit Kubernetes-system (kube-systemnavneområde) samler metrics såsom CPU og hukommelsesforbrug fra to forskellige perspektiver:
- Ressource, der bruges af hver pod
- Ressource forbrugt ved hver node
Mål fra både perspektivet er afgørende for at hjælpe Autoscaler med at beslutte, hvad det næste skridt skal være. Følg denne vejledning for at føje metrisk server til din Kubernetes-klynge. Nu er vi klar til at se Horisontal Pod Autoscaler i aktion.
Brug af Autoscaler
For at se Autoscaler fungerer, har vi brug for en testapplikation. Lad os oprette en simpel php-apache-server og udsætte den for en tjeneste.
$ kubectl kør php-apache - image = k8s.gcr.io / hpa-eksempel --forespørgsler = cpu = 200m --eksponere--port = 80
Billedet, der bruges her, er et af de prøvebilleder, der leveres af Kubernetes-projektet. Det udfører nogle CPU-intensive opgaver og gør processen meget mere tydelig ved at gøre det.
For at autoskalere denne implementering er vi nødt til at informere autoskaleren, hvad der er det mindste og maksimale antal pods, som vi tillader, og CPU-procenten, som de har lov til at bruge. Der er mange flere faktorer, som du også kan overveje som hukommelse, opbevaring og netværk.
$ kubectl autoskala implementeringer / php-apache --cpu-procent = 50 --min = 1 --max = 10I den nuværende tilstand, da ingen bruger denne service, vil det mest lide at forblive på minimumsværdien. Du kan kontrollere tilstanden for al autoskaleret implementering i standardnavneområdet ved at køre:
$ kubectl få hpaNAVN REFERENCE MÅL MINPODS MAXPODS REPLICAS ALDER
php-apache Implementering / php-apache 0% / 50% 1 10 1 2m
Generering af belastning og test af autoskala-funktionen
Du kan se, at antallet af replikaer stadig kun er en, og CPU-belastningen er ubetydelig lav. Vi kan oprette yderligere belastning og se, hvordan autoskaleren reagerer på den. Tjenesten, der udsætter vores php-apache-bælg, udsættes ikke for omverdenen, så vi opretter en midlertidig pod og åbner en interaktiv shell-session i den pod.
Dette giver os mulighed for at kommunikere med alle de tilgængelige tjenester i klyngen, inklusive php-apache-tjenesten.
$ kubectl run -i --tty busybox --image = busybox --restart = Aldrig - sh/ #
Du vil bemærke, at meddelelsen ændres, hvilket indikerer, at vi er inde i denne container. Lad os nu prøve at lægge noget på vores service ved gentagne gange at stille anmodninger. Lad os i den nye prompt køre følgende mens loop:
/ # mens det er sandt; gør wget -q -O- http: // php-apache.Standard.svc.klynge.lokal; FærdigÅbn en ny terminal, da vi ikke kan lade denne loop ende endnu. Efter inspektion af autoskaleren vil du se CPU-udnyttelsen, og når du viser listen over bælgene, vil du se, at der nu er flere forekomster af php-apache-server,
$ kubectl få hpaNAVN REFERENCE MÅL MINPODS MAXPODS REPLICAS ALDER
php-apache Implementering / php-apache 121% / 50% 1 10 4 1h
$ kubectl få bælg
NAVN KLAR STATUS OMSTARTER ALDER
busybox 1/1 Løb 0 6m
php-apache-8699449574-7qwxd 1/1 Kører 0 28s
php-apache-8699449574-c9v54 1/1 Kører 0 10h
php-apache-8699449574-h9s5f 1/1 Kører 0 28s
php-apache-8699449574-sg4hz 1/1 Kører 0 28s
Afslut mens løkken og antallet af bælg vil dø ned til en i løbet af få minutter.
Konklusion
Så det er en simpel demonstration af Horisontal Pod Autoscaler. Husk at have en funktionel metrics-server til din klynge, og hold replikantallet på 1, mens du opretter en implementering. Den vandrette podeautoskaler tager sig af resten.