Prublemi cù DNS in Kubernetes. Post mortem publicu
Nota. traduzzione: Questa hè una traduzzione di un postmortem publicu da u blog di l'ingegneria di a cumpagnia Preferenze. Descrive un prublema cù conntrack in un cluster Kubernetes, chì hà purtatu à un downtime parziale di certi servizii di produzzione.
Questu articulu pò esse utile per quelli chì volenu amparà un pocu di più nantu à i postmortems o impediscenu qualchi prublemi DNS potenziali in u futuru.
Questu ùn hè micca DNS
Ùn pò micca esse DNS
Era DNS
Un pocu nantu à l'autopsia è i prucessi in Preply
Un postmortem descrive un malfunzionamentu o qualchì avvenimentu in a produzzione. U postmortem include una cronologia di l'avvenimenti, l'impattu di l'utilizatori, a causa radicale, l'azzioni pigliate è e lezioni amparate.
À i scontri settimanali cù a pizza, trà a squadra tecnica, spartemu diverse infurmazioni. Una di e parti più impurtanti di tali riunioni hè post-mortems, chì sò più spessu accumpagnati da una presentazione cù slides è un analisi più approfonditu di l'incidentu. Ancu s'ellu ùn ci battemu micca dopu à l'autopsia, pruvemu di sviluppà una cultura di "senza culpa" (cultura irreprensibile). Cridemu chì a scrittura è a presentazione di l'autopsia pò aiutà à noi (è à l'altri) prevene incidenti simili in u futuru, chì hè per quessa chì li spartemu.
L'individui implicati in un incidente anu da sente chì ponu parlà in dettagliu senza teme di punizioni o retribuzione. Nisuna culpa ! Scrivite un postmortem ùn hè micca una punizione, ma una opportunità di apprendimentu per tutta a cumpagnia.
Tempu brevi: Indisponibilità parziale di DNS (26 min) per certi servizii in u cluster Kubernetes
Impact: 15000 avvenimenti persi per i servizii A, B è C
Causa radica: Kube-proxy ùn hà micca pussutu sguassà currettamente una vechja entrata da a tavola di cuntrack, cusì certi servizii anu sempre pruvatu à cunnette cù pods inesistenti.
Trigger: A causa di a bassa carica in u cluster Kubernetes, CoreDNS-autoscaler hà riduciutu u numeru di pods in a distribuzione da trè à dui.
suluzione: A prossima implementazione di l'applicazione hà iniziatu a creazione di novi nodi, CoreDNS-autoscaler hà aghjustatu più pods per serve u cluster, chì pruvucò una riscrittura di a tavola conntrack.
Detezzione: U monitoraghju di Prometheus hà rilevatu un gran numaru di errori 5xx per i servizii A, B è C è hà iniziatu una chjama à l'ingegneri di serviziu.
Errori 5xx in Kibana
Actions
effettu
Type
Responsabile
Objettivu
Disattiva l'autoscaler per CoreDNS
impeditu
Amet U.
DEVOPS-695
Configurate un servitore DNS di cache
diminuite
Max V.
DEVOPS-665
Configurate u monitoraghju conttrack
impeditu
Amet U.
DEVOPS-674
Lezioni amparate
Chì hè andatu bè:
U monitoraghju hà travagliatu bè. A risposta hè stata rapida è organizata
Ùn avemu micca culpitu nisun limite nantu à i nodi
Chì era sbagliatu:
Ancora scunnisciuta vera causa vera, simile à bug specificu in cuntrariu
Tutte l'azzioni curreghjanu solu e cunsequenze, micca a causa radicali (bug)
Sapemu chì prima o dopu pudemu avè prublemi cù DNS, ma ùn avemu micca priurità i travaglii
Induve avemu avutu a furtuna:
A prossima implementazione hè stata attivata da CoreDNS-autoscaler, chì hà sovrascrittu a tabella di cuntrack.
Stu bug hà affettatu solu certi servizii
Timeline (EET)
Время
effettu
22:13
CoreDNS-autoscaler hà riduciutu u numeru di pods da trè à dui
22:18
L'ingegneri di turnu cuminciaru à riceve chjamate da u sistema di surviglianza
22:21
L'ingegneri di turnu cuminciaru à scopre a causa di l'errori.
22:39
L'ingegneri di turnu cuminciaru à ritruvà unu di l'ultimi servizii à a versione precedente
22:40
L'errori 5xx anu cessatu di appare, a situazione hè stabilizzata
Tempu di deteczione: 4 min
Tempu prima di l'azzione: 21 min
U tempu di riparà: 1 min
applicàrisi nantu à u corsu
logs 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
Per minimizzà l'usu di CPU, u kernel Linux usa qualcosa chjamatu conntrack. In corta, questa hè una utilità chì cuntene una lista di registri NAT chì sò guardati in una tavola speciale. Quandu u prossimu pacchettu ghjunghje da u stessu pod à u stessu pod cum'è prima, l'indirizzu IP finali ùn serà micca ricalculatu, ma serà pigliatu da a tavola conntrack.
Cumu funziona conttrack
Risultati
Questu era un esempiu di unu di i nostri postmortems cù qualchi ligami utili. In particulare in questu articulu, spartemu infurmazioni chì ponu esse utili à altre imprese. Hè per quessa chì ùn avemu micca paura di sbaglià è hè per quessa chì facemu publicu unu di i nostri post-mortems. Eccu alcuni più interessanti post mortem publichi: