Övervaka resurser i Kubernetes-kluster

Övervaka resurser i Kubernetes-kluster

Jag skapade Kube Eagle – en Prometheus-exportör. Det visade sig vara en fantastisk sak som hjĂ€lper till att förstĂ„ resurserna i smĂ„ och medelstora kluster bĂ€ttre. I slutĂ€ndan sparade jag flera hundra dollar eftersom jag valde rĂ€tt typ av maskiner och justerade begrĂ€nsningarna för resurserna till applikationerna utifrĂ„n arbetsbelastningen.

Jag kommer att berÀtta om fördelarna Kube Eagle, men först förklarar jag vad som ledde till problemet och varför kvalitetsmonitorering behövdes.

Jag hanterade flera kluster med 4 till 50 noder. I varje kluster fanns upp till 200 mikrotjĂ€nster och applikationer. För att effektivare anvĂ€nda den tillgĂ€ngliga hĂ„rdvaran var de flesta distribuerade med burstable RAM och CPU-resurser. SĂ„ poddar kan ta tillgĂ€ngliga resurser vid behov utan att störa andra applikationer pĂ„ den noden. Är det inte fantastiskt?

Och Àven om klustret förbrukade relativt lite CPU (8%) och minne (40%), hade vi stÀndigt problem med att poddar blev utdrivna nÀr de försökte ta mer minne Àn vad som fanns tillgÀngligt pÄ noden. DÄ hade vi bara en panel för att övervaka Kubernetes-resurser. SÄ hÀr sÄg den ut:

Övervaka resurser i Kubernetes-kluster
Grafana-panel med endast cAdvisor-metrik

Med en sÄdan panel Àr det enkelt att se noder som konsumerar mycket minne och CPU. Problemet Àr att förstÄ orsaken. För att poddarna skulle stanna kvar pÄ plats kunde vi sjÀlvklart stÀlla in garanterade resurser pÄ alla poddar (begÀrda resurser Àr lika med grÀnsen). Men det Àr inte det smartaste sÀttet att anvÀnda hÄrdvaran. Klustret hade flera hundra gigabyte minne, men vissa noder led av resursbrist medan andra hade 4 till 10 GB över.

Det visar sig att Kubernetes-planeraren fördelade arbetsbelastningen ojÀmnt över de tillgÀngliga resurserna. Kubernetes-planeraren tar hÀnsyn till olika konfigurationer: affinity-regler, taints och tolerations, nodselekterare som kan begrÀnsa tillgÀngliga noder. Men i mitt fall fanns inget sÄdant, och poddar planerades utifrÄn begÀrda resurser pÄ varje nod.

För en podd valdes en nod som hade mest lediga resurser och som uppfyllde begÀrans villkor. Vi fick en situation dÀr de begÀrda resurserna pÄ noderna inte matchade den faktiska anvÀndningen, och hÀr kom Kube Eagle in i bilden med sina övervakningsmöjligheter.

NÀstan alla mina Kubernetes-kluster övervakades endast med Node exporter och Kube State Metrics. Node Exporter ger statistik över in- och utdata samt anvÀndning av disk, CPU och RAM, medan Kube State Metrics visar metrik för Kubernetes-objekt, sÄsom resursförfrÄgningar och begrÀnsningar för CPU och minne.

Vi behöver kombinera anvÀndningsmetrik med resursförfrÄgningar och begrÀnsningar i Grafana, sÄ fÄr vi all information om problemet. Det lÄter enkelt, men i dessa tvÄ verktyg kallas ceptorna olika, och vissa metrik har helt enkelt inga metadata-taggar. Kube Eagle sköter allt automatiskt och instrumentpanelen ser ut sÄ hÀr:

Övervaka resurser i Kubernetes-kluster

Övervaka resurser i Kubernetes-kluster
Kube Eagle-mÀtpanel

Vi har lyckats lösa mÄnga resursproblem och spara utrustning:

  1. Vissa utvecklare visste inte hur mÄnga resurser mikrotjÀnsterna behövde (eller brydde sig helt enkelt inte). Vi hade inget sÀtt att hitta felaktiga resursförfrÄgningar - för detta behövs bÄde konsumtion och begÀrningar och begrÀnsningar. Nu ser de Prometheus-mÄtt, övervakar faktisk anvÀndning och justerar sina förfrÄgningar och begrÀnsningar.
  2. JVM-applikationer tar sÄ mycket RAM som möjligt. SkrÀpsamlaren frigör minne endast om mer Àn 75 % anvÀnds. Eftersom majoriteten av tjÀnsterna har burstable minne, upptogs det alltid av JVM. DÀrför Ät alla dessa Java-tjÀnster betydligt 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 verkligheten var ledigare Àn andra noder. En utvecklare rÄkade skriva in en extra siffra i sin begÀran och tog en stor del av RAM: 20 GB istÀllet för 2. Ingen mÀrkte nÄgot. Applikationen hade 3 repliker, sÄ det drabbade hela 3 noder.
  4. Vi införde resursbegrÀnsningar, omplanerade pods med rÀtt förfrÄgningar och fick en perfekt balans i hÄrdvaruanvÀndningen över alla noder. Ett par noder kunde till och med stÀngas ner. Och sedan sÄg vi att vi hade fel typ av maskiner (fokuserade pÄ CPU istÀllet för minne). Vi bytte typ och tog bort ytterligare nÄgra noder.

Sammanfattning

Med burstable resurser i klustret utnyttjar du den tillgÀngliga hÄrdvaran effektivare, men Kubernetes-schemalÀggaren planerar pods utifrÄn resursförfrÄgningar, vilket kan bli problematiskt. För att döda tvÄ flugor i en smÀll: undvika problem och maximera resursanvÀndningen, behövs bra övervakning. Det Àr hÀr Kube Eagle kommer in. Kube Eagle (exportör för Prometheus och Grafana övervakningspanel).

KĂ€lla: habr.com

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