Hvis replikantallet er satt til 100, og etterspørselen er for liten, vil også 100 pods være i gang. Dette resulterer i sløsing med CPU og minne ressurser. Ja, det gir pålitelighet, i den forstand at hvis en node krasjer og pods i den dør, ville Replica Set-kontrolleren prøve å bringe tilbake antallet pods tilbake til 100 ved å gyte pods i andre noder. Søknaden forblir online.
I en mer abstrakt forstand ville Replikasettet prøve å oppnå et ønsket tilstand av klyngen og ville se på nåværende tilstand og finne ut hvordan den kan oppnå ønsket tilstand.
Imidlertid ønsker vi noe litt mer følsomt for den virkelige etterspørselen. Tast inn Horisontal Pod Autoscaler. Det er jobben til Horizontal Pod Autoscaler å skalere applikasjonen når det er behov for den, og deretter skalere den ned når arbeidsmengden synker.
Hvorfor bruke en Horisontal Pod Autoscaler?
Som navnet antyder, vil denne komponenten automatisk skalere applikasjonen din. I skyen kan dette virkelig hjelpe deg med å redusere beregnings- og minneressursene du blir fakturert for. Siden Autoscaler er følsom overfor ressursutnyttelsen, når den ser at mange pods bare sitter inaktiv, skalerer den applikasjonen ned, og når behovet på disse podene øker, skalerer den applikasjonen opp ved å lage nye pods og belastningen blir distribuert til de.
Det kan spare deg både verdifull tid og beregningsressurser. Du trenger ikke å bekymre deg for hva replikatallet skal være for podene dine når du skriver en distribusjon, autoskaler vil klare det for deg.
Førstegangs oppsett
Først og fremst vil kravet være at du har en løpende Kubernetes-klynge. Bruk Katacoda Playground som er perfekt for eksperimentering og læring om Kubernetes. Det neste du trenger er en metrisk server.
Dette tillegget til Kubernetes-systemet ditt (kube-systemnavnområde) vil samle beregninger som CPU og minnebruk fra to forskjellige perspektiv:
- Ressurs brukt av hver pod
- Ressursforbruk på hver node
Målinger fra begge perspektiver er avgjørende for å hjelpe Autoscaler med å bestemme hva det neste trekket skal være. Følg denne veiledningen for å legge til metriske servere i Kubernetes-klyngen. Nå er vi klare til å se Horizontal Pod Autoscaler i aksjon.
Bruke Autoscaler
For å se Autoscaler fungerer, trenger vi en testapplikasjon. La oss lage en enkel php-apache-server og avsløre den som en tjeneste.
$ kubectl kjør php-apache - image = k8s.gcr.io / hpa-eksempel - forespørsler = cpu = 200m --eksponere--port = 80
Bildet som brukes her er et av eksemplene på bilder fra Kubernetes-prosjektet. Den utfører noen CPU-intensive oppgaver og gjør prosessen mye tydeligere ved å gjøre det.
For å autoskalere denne distribusjonen, må vi informere autoskaleren om hva som er det minste og maksimale antall pods som vi tillater og CPU-prosentandelen de har lov til å bruke. Det er mange flere faktorer du kan vurdere som minne, lagring og nettverk også.
$ kubectl autoscale distribusjoner / php-apache --cpu-prosent = 50 --min = 1 --max = 10I den nåværende tilstanden, siden ingen bruker denne tjenesten, vil de mest ligge på minimumsverdien. Du kan sjekke tilstanden til all autoskalert distribusjon i standard navneområdet ved å kjøre:
$ kubectl få hpaNAVN REFERANSE MÅL MINPODER MAKSPODER REPLIKASJONSALDER
php-apache Deployment / php-apache 0% / 50% 1 10 1 2m
Generere belastning og teste funksjonen for autoskala
Du kan se at antall replikaer fremdeles bare er én og CPU-belastningen er ubetydelig lav. Vi kan skape ekstra belastning og se hvordan autoskaleren reagerer på den. Tjenesten som avslører våre php-apache pods er ikke utsatt for omverdenen, så vi vil lage en midlertidig pod og åpne en interaktiv shell-økt i den pod.
Dette vil tillate oss å kommunisere med alle tjenestene som er tilgjengelige i klyngen, inkludert php-apache-tjenesten.
$ kubectl run -i --tty busybox - image = busybox - restart = Aldri - sh/ #
Du vil legge merke til at ledeteksten endres, noe som indikerer at vi er inne i denne containeren. La oss nå prøve å legge litt på tjenesten vår ved å gjenta forespørsler gjentatte ganger. I den nye ledeteksten, la oss kjøre følgende mens sløyfe:
/ # mens det er sant; gjør wget -q -O- http: // php-apache.misligholde.svc.klynge.lokal; ferdigÅpne en ny terminal, siden vi ikke kan la denne sløyfen avslutte ennå. Ved inspeksjon av autoskaleren vil du se CPU-bruken, og når du viser listene, vil du se at det nå er flere forekomster av php-apache-server,
$ kubectl få hpaNAVN REFERANSE MÅL MINPODER MAKSPODER REPLIKASJONSALDER
php-apache Distribusjon / php-apache 121% / 50% 1 10 4 1t
$ kubectl få pods
NAVN KLAR STATUS RESTARTER ALDER
busybox 1/1 Løping 0 6m
php-apache-8699449574-7qwxd 1/1 Kjører 0 28s
php-apache-8699449574-c9v54 1/1 Kjører 0 10h
php-apache-8699449574-h9s5f 1/1 Kjører 0 28s
php-apache-8699449574-sg4hz 1/1 Kjører 0 28s
Avslutt mens sløyfen, og antall belter vil dø ned til en i løpet av få minutter.
Konklusjon
Så det er en enkel demonstrasjon av Horizontal Pod Autoscaler. Husk å ha en funksjonell beregningsserver for klyngen din, og hold replikatallet på 1 mens du oppretter en distribusjon. Den horisontale pod-autoskaleren tar seg av resten.