Övervaka Kubernetes klusterresurser

Övervaka Kubernetes klusterresurser

Jag skapade Kube Eagle - en Prometheus-exportör. Det visade sig vara en cool grej som hjÀlper till att bÀttre förstÄ resurserna i smÄ och medelstora kluster. Till slut sparade jag hundratals dollar eftersom jag valde rÀtt maskintyper och konfigurerade applikationsresursgrÀnser för arbetsbelastningar.

Jag ska berÀtta om fördelarna Kube Eagle, men först ska jag förklara vad som orsakade uppstÄndelsen och varför övervakning av hög kvalitet behövdes.

Jag hanterade flera kluster med 4–50 noder. Varje kluster innehĂ„ller upp till 200 mikrotjĂ€nster och applikationer. För att bĂ€ttre utnyttja befintlig hĂ„rdvara konfigurerades de flesta distributioner med burstable RAM- och CPU-resurser. PĂ„ sĂ„ sĂ€tt kan pods ta tillgĂ€ngliga resurser om det behövs, och samtidigt inte störa andra applikationer pĂ„ denna nod. Tja, Ă€r det inte bra?

Och Àven om klustret förbrukade relativt lite CPU (8 %) och RAM (40 %), hade vi stÀndigt problem med att pods blev förebyggda nÀr de försökte allokera mer minne Àn vad som var tillgÀngligt pÄ noden. DÄ hade vi bara en instrumentpanel för att övervaka Kubernetes-resurser. SÄ hÀr:

Övervaka Kubernetes klusterresurser
Grafana instrumentpanel med endast cAdvisor-statistik

Med en sĂ„dan panel Ă€r det inga problem att se noder som Ă€ter mycket minne och CPU. Problemet Ă€r att ta reda pĂ„ vad orsaken Ă€r. För att hĂ„lla poddarna pĂ„ plats skulle man givetvis kunna sĂ€tta upp garanterade resurser pĂ„ alla poddar (begĂ€rda resurser lika med grĂ€nsen). Men detta Ă€r inte den smartaste anvĂ€ndningen av hĂ„rdvara. Klustret hade flera hundra gigabyte minne, medan vissa noder svalt, medan andra hade 4–10 GB kvar i reserv.

Det visar sig att Kubernetes-schemalÀggaren fördelade arbetsbelastningar ojÀmnt över tillgÀngliga resurser. Kubernetes-schemalÀggaren tar hÀnsyn till olika konfigurationer: regler för affinitet, flÀckar och tolerationer, nodvÀljare som kan begrÀnsa de tillgÀngliga noderna. Men i mitt fall fanns det inget liknande, och poddarna planerades beroende pÄ de begÀrda resurserna pÄ varje nod.

Den nod som har flest lediga resurser och som uppfyller förfrÄgningsvillkoren valdes för podden. Vi fann att de begÀrda resurserna pÄ noderna inte matchade den faktiska anvÀndningen, och det var hÀr Kube Eagle och dess resursövervakningsfunktioner kom till undsÀttning.

Jag har nÀstan alla Kubernetes-kluster endast övervakade med Nodexportör О Kube State Metrics. Node Exporter tillhandahÄller statistik om I/O och disk, CPU och RAM-anvÀndning, medan Kube State Metrics visar Kubernetes-objektmÄtt sÄsom förfrÄgningar och CPU- och minnesresursgrÀnser.

Vi mÄste kombinera anvÀndningsmÄtten med förfrÄgningar och grÀnsvÀrden i Grafana, och sedan fÄr vi all information om problemet. Detta lÄter enkelt, men de tvÄ verktygen namnger etiketterna pÄ olika sÀtt, och vissa mÀtvÀrden har inga metadataetiketter alls. Kube Eagle gör allt sjÀlv och panelen ser ut sÄ hÀr:

Övervaka Kubernetes klusterresurser

Övervaka Kubernetes klusterresurser
Kube Eagle Dashboard

Vi lyckades lösa mÄnga problem med resurser och spara utrustning:

  1. Vissa utvecklare visste inte hur mÄnga resurser mikrotjÀnster behövde (eller brydde sig helt enkelt inte). Det fanns inget sÀtt för oss att hitta felaktiga förfrÄgningar om resurser - för detta behöver vi veta konsumtion plus förfrÄgningar och grÀnser. Nu ser de Prometheus-mÄtt, övervakar faktisk anvÀndning och justerar förfrÄgningar och grÀnser.
  2. JVM-applikationer tar sÄ mycket RAM som de kan hantera. SophÀmtaren slÀpper minne endast nÀr mer Àn 75 % anvÀnds. Och eftersom de flesta tjÀnster har burstable minne, var det alltid ockuperat av JVM. DÀrför Ät alla dessa Java-tjÀnster upp mycket mer RAM Àn vÀntat.
  3. Vissa applikationer begÀrde för mycket minne, och Kubernetes-schemalÀggaren gav inte dessa noder till andra applikationer, Àven om de i sjÀlva verket var friare Àn andra noder. En utvecklare lade av misstag till en extra siffra i begÀran och tog en stor bit RAM: 20 GB istÀllet för 2. Ingen mÀrkte det. Applikationen hade 3 repliker, sÄ sÄ mÄnga som 3 noder pÄverkades.
  4. Vi introducerade resursbegrÀnsningar, omplanerade pods med rÀtt förfrÄgningar och fick en idealisk balans mellan hÄrdvaruanvÀndning över alla noder. Ett par noder kunde ha stÀngts helt och hÄllet. Och sÄ sÄg vi att vi hade fel maskiner (CPU-orienterade, inte minnesorienterade). Vi Àndrade typen och tog bort flera noder till.

Resultat av

Med sprÀngbara resurser i klustret anvÀnder du den tillgÀngliga hÄrdvaran mer effektivt, men Kubernetes schemalÀggare schemalÀgger poddar baserat pÄ förfrÄgningar om resurser, och det Àr fullt ut. För att slÄ tvÄ flugor i en smÀll: för att undvika problem och för att utnyttja resurserna fullt ut behöver du bra övervakning. Det Àr dÀrför det kommer att vara anvÀndbart Kube Eagle (Prometheus exportör och Grafana instrumentpanel).

KĂ€lla: will.com

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster