Problemi s DNS-om u Kubernetesu. Javna obdukcija

Bilješka prijevod: Ovo je prijevod javne obdukcije s inženjerskog bloga tvrtke Pripremite se. Opisuje problem s conntrackom u Kubernetes klasteru, koji je doveo do djelomičnog prekida rada nekih proizvodnih usluga.

Ovaj bi članak mogao biti koristan onima koji žele naučiti nešto više o postmortemima ili spriječiti neke potencijalne DNS probleme u budućnosti.

Problemi s DNS-om u Kubernetesu. Javna obdukcija
Ovo nije DNS
Ne može biti DNS
Bio je to DNS

Malo o obdukcijama i procesima u Preplyju

Obdukcija opisuje kvar ili neki događaj u proizvodnji. Obdukcija uključuje vremenski slijed događaja, utjecaj korisnika, glavni uzrok, poduzete radnje i naučene lekcije.

Traženje SRE

Na tjednim sastancima uz pizzu, među tehničkim timom, dijelimo razne informacije. Jedan od najvažnijih dijelova ovakvih sastanaka su obdukcije koje su najčešće popraćene prezentacijom sa slajdovima i dubljom analizom događaja. Iako ne plješćemo nakon obdukcije, pokušavamo razviti kulturu "bez krivnje" (besprijekorna kultura). Vjerujemo da pisanje i prezentiranje obdukcija može pomoći nama (i drugima) u sprječavanju sličnih incidenata u budućnosti, zbog čega ih dijelimo.

Pojedinci uključeni u incident trebaju osjećati da mogu govoriti o detaljima bez straha od kazne ili odmazde. Bez zamjerke! Pisanje obdukcije nije kazna, već prilika za učenje cijele tvrtke.

Keep CALMS & DevOps: S je za dijeljenje

Problemi s DNS-om u Kubernetesu. Postmortalno

Дата: 28.02.2020

Autori: Amet U., Andrej S., Igor K., Aleksej P.

Status: Gotovo

ukratko: Djelomična nedostupnost DNS-a (26 min) za neke usluge u Kubernetes klasteru

Vliânie: 15000 XNUMX izgubljenih događaja za usluge A, B i C

Glavni uzrok: Kube-proxy nije mogao ispravno ukloniti stari unos iz conntrack tablice, pa su se neki servisi i dalje pokušavali povezati s nepostojećim podovima

E0228 20:13:53.795782       1 proxier.go:610] Failed to delete kube-system/kube-dns:dns endpoint connections, error: error deleting conntrack entries for UDP peer {100.64.0.10, 100.110.33.231}, error: conntrack command returned: ...

Okidač: Zbog niskog opterećenja unutar Kubernetes klastera, CoreDNS-autoscaler smanjio je broj podova u implementaciji s tri na dva

rješenje: Sljedeća implementacija aplikacije pokrenula je stvaranje novih čvorova, CoreDNS-autoscaler dodao je više podova za opsluživanje klastera, što je izazvalo ponovno pisanje tablice conntrack

Otkrivanje: Prometheus monitoring otkrio je veliki broj 5xx grešaka za servise A, B i C i pokrenuo poziv dežurnim inženjerima

Problemi s DNS-om u Kubernetesu. Javna obdukcija
5xx grešaka u Kibani

Djelatnost

posljedica
Vrsta
Odgovoran
Zadatak

Onemogući autoscaler za CoreDNS
spriječeno
Amet U.
DEVOPS-695

Postavite DNS poslužitelj za predmemoriju
smanjenje
Max V.
DEVOPS-665

Postavite praćenje conntrack-a
spriječeno
Amet U.
DEVOPS-674

Naučene lekcije

Što je dobro prošlo:

  • Praćenje je dobro funkcioniralo. Odaziv je bio brz i organiziran
  • Nismo dostigli nikakva ograničenja na čvorovima

Što nije bilo u redu:

  • Još uvijek nepoznat pravi uzrok, sličan specifična greška u conntracku
  • Sve radnje ispravljaju samo posljedice, a ne glavni uzrok (bug)
  • Znali smo da bismo prije ili kasnije mogli imati problema s DNS-om, ali nismo davali prioritete zadacima

Gdje smo imali sreće:

  • Sljedeću implementaciju pokrenuo je CoreDNS-autoscaler, koji je prebrisao tablicu conntrack
  • Ova pogreška utjecala je samo na neke usluge

Vremenska traka (EET)

vrijeme
posljedica

22:13
CoreDNS-autoscaler smanjio je broj podova s ​​tri na dva

22:18
Inženjeri na dužnosti počeli su primati pozive iz sustava za nadzor

22:21
Dežurni inženjeri počeli su otkrivati ​​uzrok grešaka.

22:39
Dežurni inženjeri počeli su vraćati jednu od najnovijih usluga na prethodnu verziju

22:40
5xx greške su se prestale pojavljivati, situacija se stabilizirala

  • Vrijeme do otkrivanja: 4 minuta
  • Vrijeme prije akcije: 21 minuta
  • Vrijeme za popravak: 1 minuta

dodatne informacije

Kako bi smanjio korištenje CPU-a, Linux kernel koristi nešto što se zove conntrack. Ukratko, ovo je uslužni program koji sadrži popis NAT zapisa koji su pohranjeni u posebnoj tablici. Kada sljedeći paket stigne iz istog modula u isti modul kao i prije, konačna IP adresa neće se ponovno izračunati, već će se uzeti iz conntrack tablice.
Problemi s DNS-om u Kubernetesu. Javna obdukcija
Kako radi conntrack

Rezultati

Ovo je bio primjer jedne od naših obdukcija s korisnim poveznicama. Konkretno, u ovom članku dijelimo informacije koje mogu biti korisne drugim tvrtkama. Zato se ne bojimo pogriješiti i zato jednu od naših obdukcija objavljujemo javno. Evo još nekoliko zanimljivih javnih obdukcija:

Izvor: www.habr.com

Dodajte komentar