Bilješka. prijevod: Ovo je prijevod javne obdukcije sa inženjerskog bloga kompanije Predgovor. Opisuje problem s conntrack-om u Kubernetes klasteru, koji je doveo do djelomičnog zastoja nekih proizvodnih usluga.
Ovaj članak može biti koristan za one koji žele naučiti nešto više o obdukcijama ili spriječiti neke potencijalne DNS probleme u budućnosti.
Ovo nije DNS
To ne može biti DNS
Bio je to DNS
Malo o obdukcijama i procesima u Preply-u
Obdukcija opisuje kvar ili neki događaj u proizvodnji. Obdukcija uključuje vremensku liniju događaja, uticaj korisnika, osnovni uzrok, preduzete radnje i naučene lekcije.
Na sedmičnim sastancima sa pizza, 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 incidenta. Iako ne plješćemo nakon obdukcije, pokušavamo razviti kulturu "bez krivice" (besprekorna kultura). Vjerujemo da pisanje i predstavljanje obdukcija može pomoći nama (i drugima) da spriječimo slične incidente u budućnosti, zbog čega ih dijelimo.
Pojedinci uključeni u incident treba da osjećaju da mogu govoriti u detalje bez straha od kazne ili odmazde. Bez krivice! Pisanje obdukcije nije kazna, već prilika za učenje za cijelu kompaniju.
Ukratko: Djelomična nedostupnost DNS-a (26 min) za neke usluge u Kubernetes klasteru
Utjecaj: 15000 događaja izgubljeno za usluge A, B i C
Izvorni razlog: Kube-proxy nije mogao ispravno ukloniti stari unos iz tabele conntrack, tako da su se neke usluge još uvijek pokušavale povezati s nepostojećim podovima
okidač: Zbog malog opterećenja unutar Kubernetes klastera, CoreDNS-autoscaler je smanjio broj podova u implementaciji sa tri na dva
rješenje: Sljedeća implementacija aplikacije pokrenula je kreiranje novih čvorova, CoreDNS-autoscaler je dodao više podova za opsluživanje klastera, što je izazvalo ponovno pisanje tabele conntrack
Detekcija: Prometheus monitoring je otkrio veliki broj 5xx grešaka za servise A, B i C i pokrenuo poziv dežurnim inženjerima
5xx greške u Kibani
Akcije
efekt
Tip
Odgovoran
Cilj
Onemogući autoscaler za CoreDNS
sprečeno
Amet U.
DEVOPS-695
Podesite DNS server za keširanje
smanjiti
Max V.
DEVOPS-665
Podesite nadzor veze
sprečeno
Amet U.
DEVOPS-674
Naučene lekcije
Šta je dobro prošlo:
Monitoring je dobro funkcionisao. Odgovor je bio brz i organizovan
Nismo postigli nikakva ograničenja na čvorovima
šta nije u redu:
Još uvijek nepoznat pravi osnovni uzrok, slično specifična greška in conntrack
Sve radnje ispravljaju samo posledice, a ne i osnovni uzrok (bug)
Znali smo da bismo prije ili kasnije mogli imati problema s DNS-om, ali nismo davali prioritet zadacima
Gdje nam se posrećilo:
Sljedeću implementaciju pokrenuo je CoreDNS-autoscaler, koji je prepisao conntrack tablicu
Ova greška je uticala samo na neke usluge
Vremenska traka (EET)
Время
efekt
22:13
CoreDNS-autoscaler smanjio je broj podova sa tri na dva
22:18
Dežurni inženjeri su počeli da primaju pozive iz sistema za nadzor
22:21
Dežurni inženjeri počeli su da otkrivaju uzroke 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 prestale da se pojavljuju, situacija se stabilizovala
Vrijeme do detekcije: 4 minuta
Vrijeme prije akcije: 21 minuta
Vrijeme je za popravku: 1 minuta
dodatne informacije
CoreDNS zapisnici:
I0228 20:13:53.507780 1 event.go:221] Event(v1.ObjectReference{Kind:"Deployment", Namespace:"kube-system", Name:"coredns", UID:"2493eb55-3dc0-11ea-b3a2-02bb48f8c230", APIVersion:"apps/v1", ResourceVersion:"132690686", FieldPath:""}): type: 'Normal' reason: 'ScalingReplicaSet' Scaled down replica set coredns-6cbb6646c9 to 2
Da bi se smanjila upotreba CPU-a, Linux kernel koristi nešto što se zove conntrack. Ukratko, ovo je uslužni program koji sadrži listu NAT zapisa koji su pohranjeni u posebnoj tabeli. Kada sljedeći paket stigne iz istog pod u isti pod kao i prije, konačna IP adresa neće biti ponovo izračunata, već će biti uzeta iz tabele conntrack.
Kako funkcioniše conntrack
Ishodi
Ovo je bio primjer jedne od naših obdukcija s nekim korisnim linkovima. Konkretno, u ovom članku dijelimo informacije koje mogu biti korisne drugim kompanijama. Zato se ne bojimo pogriješiti i zato jednu od naših obdukcija objavljujemo javno. Evo još nekih zanimljivih javnih obdukcija: