Poznámka. překlad: Toto je překlad veřejné pitvy z inženýrského blogu společnosti Preferujte. Popisuje problém s conntrackem v clusteru Kubernetes, který vedl k částečnému výpadku některých produkčních služeb.
Tento článek může být užitečný pro ty, kteří se chtějí dozvědět něco více o pitvě nebo předejít některým potenciálním problémům s DNS v budoucnu.
Toto není DNS
Nemůže to být DNS
Byl to DNS
Něco málo o pitvách a procesech v Preply
Postmortem popisuje poruchu nebo nějakou událost ve výrobě. Postmortem zahrnuje časovou osu událostí, dopad na uživatele, hlavní příčinu, přijatá opatření a poučení.
Na týdenních schůzkách s pizzou mezi technickým týmem sdílíme různé informace. Jednou z nejdůležitějších částí takových setkání jsou pitvy, které jsou nejčastěji doprovázeny prezentací s diapozitivy a hlubší analýzou incidentu. I když po posmrtných akcích netleskáme, snažíme se rozvíjet kulturu „bez viny“ (bezúhonná kultura). Věříme, že psaní a předkládání posmrtných zpráv nám (i ostatním) může pomoci předcházet podobným incidentům v budoucnu, a proto je sdílíme.
Jednotlivci zapojení do incidentu by měli mít pocit, že mohou mluvit podrobně bez strachu z trestu nebo odplaty. Žádná vina! Psaní pitvy není trestem, ale příležitostí k učení pro celou společnost.
Stručně: Částečná nedostupnost DNS (26 min) pro některé služby v clusteru Kubernetes
Dopad: 15000 XNUMX ztracených událostí pro služby A, B a C
Příčina: Kube-proxy nedokázal správně odstranit starou položku z tabulky conntrack, takže se některé služby stále pokoušely připojit k neexistujícím modulům
Spoušť: Kvůli nízké zátěži uvnitř clusteru Kubernetes snížil CoreDNS-autoscaler počet modulů v nasazení ze tří na dva.
řešení: Další nasazení aplikace iniciovalo vytváření nových uzlů, CoreDNS-autoscaler přidal další moduly pro obsluhu clusteru, což vyvolalo přepsání tabulky conntrack.
Detekce: Monitoring Prometheus zjistil velký počet chyb 5xx pro služby A, B a C a inicioval volání techniků ve službě
5xx chyb v Kibaně
Činnost
účinek
Typ
Odpovědný
Úkol
Zakázat automatické škálování pro CoreDNS
zabráněno
Amet U.
DEVOPS-695
Nastavte server DNS pro ukládání do mezipaměti
pokles
Max V.
DEVOPS-665
Nastavte sledování conntrack
zabráněno
Amet U.
DEVOPS-674
Ponaučení
Co se povedlo:
Monitoring fungoval dobře. Odezva byla rychlá a organizovaná
U uzlů jsme nenarazili na žádné limity
Co bylo špatně:
Stále neznámá skutečná základní příčina, podobná konkrétní chyba v conntrack
Všechny akce opravují pouze následky, nikoli hlavní příčinu (chybu)
Věděli jsme, že dříve nebo později můžeme mít problémy s DNS, ale nestanovili jsme priority
Kde jsme měli štěstí:
Další nasazení spustil CoreDNS-autoscaler, který přepsal tabulku conntrack
Tato chyba ovlivnila pouze některé služby
Časová osa (EET)
čas
účinek
22:13
CoreDNS-autoscaler snížil počet modulů ze tří na dva
22:18
Inženýři ve službě začali přijímat hovory z monitorovacího systému
22:21
Inženýři ve službě začali zjišťovat příčinu chyb.
22:39
Inženýři ve službě začali jednu z nejnovějších služeb vrátit na předchozí verzi
22:40
Chyby 5xx se přestaly objevovat, situace se stabilizovala
Čas do detekce: 4 minut
Čas před akcí: 21 minut
Čas na opravu: 1 minut
doplňující informace
Protokoly CoreDNS:
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
Aby se minimalizovalo využití CPU, používá linuxové jádro něco, co se nazývá conntrack. Ve zkratce se jedná o utilitu, která obsahuje seznam NAT záznamů, které jsou uloženy ve speciální tabulce. Když další paket dorazí ze stejného modulu do stejného modulu jako předtím, konečná IP adresa nebude přepočítána, ale bude převzata z tabulky conntrack.
Jak conntrack funguje
Výsledky
Toto byl příklad jedné z našich pitev s několika užitečnými odkazy. Konkrétně v tomto článku sdílíme informace, které mohou být užitečné pro jiné společnosti. Proto se nebojíme dělat chyby a proto zveřejňujeme jednu z našich pitev. Zde jsou některé další zajímavé veřejné pitvy: