Kubernetes klastrite jĂ€lgimine: ĂŒldine ĂŒlevaade ja tutvustus Prometheus'ega

Vaatame ĂŒle Kubernetes'i jĂ€lgimise kontseptsiooni, tutvume Prometheuse tööriistaga ja arutame hĂ€irete haldamist.

JĂ€lgimise teema on mahukas, ĂŒhes artiklis seda ei kĂ€sitle. Selle teksti eesmĂ€rk on anda ĂŒlevaade tööriistadest, kontseptsioonidest ja lĂ€henemisviisidest.

Artikli sisu — vĂ€ljaanne avatud loengust koolis "Slerm". Kui soovite saada tĂ€ielikku koolitust, registreeruge kursusele Kuberneteses infrastruktuuri jĂ€lgimise ja logimise kohta.

Kubernetes klastrite jĂ€lgimine: ĂŒldine ĂŒlevaade ja tutvustus Prometheus'ega

Mida jÀlgitakse Kubernetes'i klastris

Kubernetes klastrite jĂ€lgimine: ĂŒldine ĂŒlevaade ja tutvustus Prometheus'ega

FĂŒĂŒsilised serverid. Kui Kubernetes'i klaster on paigaldatud teie serveritesse, tuleb jĂ€lgida nende tervist. Sellega tegeleb Zabbix; kui te töötate Zabbixiga, siis ei pea te loobuma, konflikte ei tekki. Meie serverite seisukorda jĂ€lgib just Zabbix.

Liigume edasi klastri tasemel jÀlgimise juurde.

Control Plane'i komponendid: API, Scheduler ja teised. VÀhemalt tuleks jÀlgida, et API servereid vÔi etcd oleks rohkem kui 0. Etcd suudab anda palju mÔÔdikuid: diskide kohta, millel see töötab, oma klastritehingu tervise kohta ja palju muud.

Docker on ilmunud juba ammu ja selle probleemidest on kÔik hÀsti teadlikud: palju konteinerid pÔhjustavad hangumisi ja muid probleeme. SeetÔttu tasub ka Dockerit jÀlgida, vÀhemalt selle kÀttesaadavust.

DNS. Kui klastris lakkab DNS töötamast, lakkab töötamast ka kogu teenuse avastamine, peatub side podide vahel. Minu praktikas pole selliseid probleeme olnud, kuid see ei tĂ€henda, et DNS-i seisukorda ei peaks jĂ€lgima. KĂŒsimuste viivitusi ja mĂ”ned muud mÔÔdikud saab jĂ€lgida CoreDNS-i peal.

Ingress. JÀlgida tuleb ingresside (sealhulgas Ingress Controller) kÀttesaadavust, kuna need on projektis sissepÀÀsu punktid.

Peamised klastrikomponendid on lĂ€bi vaadatud - nĂŒĂŒd laskume madalamale, abstraktsioonide tasemele.

Tundub, et rakendused töövad podides, seega tuleb neid jĂ€lgida, kuid tegelikult ei ole see nii. Podid on efemeersed: tĂ€na töötavad ĂŒhel serveril, homme teisel; tĂ€na on neid 10, homme 2. Seega, lihtsalt podid ei ole kellegi jĂ€lgimise all. Mikroteenuste arhitektuuri raames on olulisem jĂ€lgida rakenduse kĂ€ttesaadavust tervikuna. Eriti tuleks kontrollida teenuse lĂ”pp-punktide kĂ€ttesaadavust: kas midagi ĂŒldse töötab? Kui rakendus on kĂ€ttesaadav, siis mis selle taga toimub, kui palju on praegu replikaid — need on teisejĂ€rgulised kĂŒsimused. Erinevate instantside jĂ€lgimine ei ole vajalik.

Viimasel tasemel tuleb jÀlgida rakenduse tööd, koguda ÀrimÔÔdikud: tellimuste arv, kasutajate kÀitumine jne.

Prometheus

Parim sĂŒsteem klastri jĂ€lgimiseks on Prometheus. Ma ei tea ĂŒhtegi tööriista, mis suudaks Prometheusega vĂ”rreldes kvaliteedi ja mugavuse poolest konkureerida. See on suurepĂ€rane paindlikule infrastruktuurile, seega kui rÀÀgitakse "Kubernetes'i jĂ€lgimisest", mĂ”eldakse tavaliselt just Prometheusele.

On paar vÔimalust, kuidas Prometheusega alustada: Helm'i abil saab installida tavapÀrast Prometheust vÔi Prometheus Operaatort.

  1. Tavaline Prometheus. Sellega on kĂ”ik korras, kuid ConfigMap'i ikkagi tuleb seadistada — pĂ”himĂ”tteliselt tuleb kirjutada tekstifailid, nagu me tegime varem, enne mikroteenuste arhitektuuri.
  2. Prometheus Operator on veidi keerukam, sisemise loogika poolest keerulisem, kuid selle kasutamine on lihtsam: seal on eraldi objektid, abstraktsioonid lisatakse klastri, seega on neid palju mugavam kontrollida ja seadistada.

Toote mĂ”istmiseks soovitan esmalt paigaldada tavalise Prometheuse. Peate kĂ”ik seadistama config'i kaudu, kuid see tuleb kasuks: saate aru, mis millele viitab ja kuidas seadistada. Prometheus Operaators tĂ”state te kohe abstraktsioonile, kuigi soovi korral on ka sĂŒgavamale kaevamine vĂ”imalik.

Prometheus on hĂ€sti integreeritud Kubernetesega: see saab ĂŒhendust API serveriga ja suhtleb sellega.

Prometheus on populaarne, seetÔttu toetab seda suur hulk rakendusi ja programmeerimiskeeli. Toetust on vaja, kuna Prometheusel on oma mÔÔdikute formaat, ja selle edastamiseks on vajalik kas rakenduse sees olev teek vÔi valmis eksportija. Ja selliseid eksportijaid on tÔeliselt palju. NÀiteks on olemas PostgreSQL Exporter: see vÔtab andmed PostgreSQL-st ja konverteerib need Prometheuse formaati, et Prometheus saaks nendega töötada.

Prometheuse arhitektuur

Kubernetes klastrite jĂ€lgimine: ĂŒldine ĂŒlevaade ja tutvustus Prometheus'ega

Prometheus Server — see on serveripool, Prometheuse aju. Siin hoitakse ja töödeldakse mÔÔdikud.

MÔÔdikud salvestatakse ajaseeria andmebaasi (TSDB). TSDB ei ole eraldi andmebaas, vaid Go keeles kirjutatud pakett, mis on sisseehitatud Prometheusesse. ÜkskĂ”ik, kĂ”ik asub ĂŒhes binaarses failis.

Ärge hoidke andmeid TSDB-s pikka aega.

Prometheuse infrastruktuur ei sobi pikaks ajaks meetmete salvestamiseks. Vaikimisi on sĂ€ilitusaeg 15 pĂ€eva. Seda piirangut on vĂ”imalik ĂŒletada, kuid tuleb silmas pidada: mida rohkem andmeid te TSDB-s sĂ€ilitate ja mida kauem te seda teete, seda rohkem ressursse ta tarvitab. Ajalooliste andmete hoidmist Prometheuses peetakse halbadeks praktikaks.

Kui teil on tohutu liiklus ja mÔÔtmeid on sadu tuhandeid sekundis, siis on parem piirata nende sĂ€ilitamist kas kettaruumi mahuga vĂ”i ajaliselt. Üldiselt hoitakse TSDB-s „kuumi andmeid“, mÔÔtmisi, mis on salvestatud vaid mĂ”ne tunni jooksul. Pikema sĂ€ilitamise jaoks kasutatakse vĂ€list hoidlat nendes andmebaasides, mis on selleks sobivad, nĂ€iteks InfluxDB, ClickHouse ja nii edasi. Olen nĂ€inud rohkem positiivseid arvustusi ClickHouse'i kohta.

Prometheus Server töötab mudelis pull: ta kĂ€ib ise mÔÔtmiste jĂ€rele nendes lĂ”pp-punktides, mille me talle edastasime. Ütlesime: „kĂ€i API Serveris“ ja ta kĂ€ib seal iga n-nda sekundi jĂ€rel ning tĂ”mbab mÔÔtmised.

LĂŒhiajalise elueaga objektide (job vĂ”i cron job) jaoks, mis vĂ”ivad ilmuda skaneerimise perioodide vahel, on olemas komponent Pushgateway. Sellesse saadetakse mÔÔtmed lĂŒhiajalistelt objektidelt: job tĂ”usis, tĂ€itis tegevuse, saatis mÔÔtmed Pushgateway-sse ja lĂ”petas. MĂ”ne aja pĂ€rast lĂ€heb Prometheus enda rĂŒtmis ja tĂ”mbab need mÔÔtmised Pushgateway-st.

Teavituste seadistamiseks Prometheuses on eraldi komponent — Alertmanager. Ja hĂ€irete seadistused — alerting rules. NĂ€iteks tuleb luua hĂ€ire olukorras, kui API serverid on 0. Kui sĂŒndmus aktiveeritakse, edastatakse hĂ€ire alert managerisse edasiseks saatmiseks. Alert manageris on piisavalt paindlikud marsruudistamise seadistused: ĂŒhe rĂŒhma hĂ€ireid saab saata administraatorite Telegrami-chat'i, teise arendajate chat'i, kolmanda infrastruktuuri töötajate chat'i. Teavitused vĂ”ivad tulla Slacki, Telegrami, e-posti ja teiste kanalite kaudu.

Ja lĂ”puks rÀÀgiks Prometheuse Killer-featuurist — Discovering. Prometheuse kasutamisel ei ole vaja nĂ€idata konkreetseid objekte, mida jĂ€lgida, piisab, kui mÀÀrata nende tĂŒĂŒp. See tĂ€hendab, et ei pea kirjutama: „siin on IP-aadress, siin on port — jĂ€lgi“, vaid tuleb mÀÀrata, milliste pĂ”himĂ”tete alusel neid objekte leida (targets — sihtmĂ€rk). Prometheus ise, olenevalt sellest, millised objektid on aktiivsed, toob vajalikud endaga kaasa ja lisab need jĂ€lgimisele.

See approach fits well with the structure of Kubernetes, where everything is also fluid: today 10 servers, tomorrow 3. Instead of specifying the server IP address each time, we write down how to find it once — and Discovering will take care of this.

The language of Prometheus is called PromQL. With this language, you can extract specific metric values and then transform them, creating analytical reports based on them.

https://prometheus.io/docs/prometheus/latest/querying/basics/

Simple query

    container_memory_usage_bytes

Mathematical operations

    container_memory_usage_bytes / 1024 / 1024

Built-in functions

    sum(container_memory_usage_bytes) / 1024 / 1024

Query refinement

    100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)

The Prometheus web interface

Prometheus has its own, quite minimalist web interface. It's only suitable for debugging or demonstrations.

Kubernetes klastrite jĂ€lgimine: ĂŒldine ĂŒlevaade ja tutvustus Prometheus'ega

In the Expression field, you can write queries in the PromQL language.

In the Alerts tab, there are alert rules - alerting rules, and they have three statuses:

  1. inactive — if the alert is currently inactive, meaning everything is fine, and it hasn’t triggered;
  2. pending — this is in the case that the alert has triggered, but the notification has not yet been sent. The delay is set to compensate for network flickers: if the specified service was restored within a minute, there’s no need to raise an alarm yet;
  3. firing — this is the third status, when the alert goes off and sends messages.

In the Status menu, you will find access to information about what Prometheus consists of. There is also a link to the targets we mentioned earlier.

Kubernetes klastrite jĂ€lgimine: ĂŒldine ĂŒlevaade ja tutvustus Prometheus'ega

For a more detailed overview of the Prometheus interface, see the Slurm lecture on Kubernetes cluster monitoring.

Integration with Grafana

In the Prometheus web interface, you won't find beautiful and clear graphs from which you can draw conclusions about the state of the cluster. To create them, Prometheus is integrated with Grafana. This results in dashboards like these.

Kubernetes klastrite jĂ€lgimine: ĂŒldine ĂŒlevaade ja tutvustus Prometheus'ega

Setting up the Prometheus and Grafana integration is quite simple; you will find instructions in the documentation: GRAFANA SUPPORT FOR PROMETHEUS, and I will conclude here.

In the following articles, we will continue the topic of monitoring: we will talk about collecting and analyzing logs using Grafana Loki and alternative tools.

Autor: Marsel Ibraev, sertifitseeritud Kubernetes administraator, praktiseeriv insener ettevÔttes Southbridge, speaker and course developer at Slurm.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster