Προβλήματα με το DNS στο Kubernetes. Δημόσια νεκροψία

Σημείωση. μετάφραση: Αυτή είναι μια μετάφραση μιας δημόσιας νεκροψίας από το ιστολόγιο μηχανικής της εταιρείας Προεπιλογή. Περιγράφει ένα πρόβλημα με το contrack σε ένα σύμπλεγμα Kubernetes, το οποίο οδήγησε σε μερικό χρόνο διακοπής λειτουργίας ορισμένων υπηρεσιών παραγωγής.

Αυτό το άρθρο μπορεί να είναι χρήσιμο για όσους θέλουν να μάθουν λίγα περισσότερα για τις νεκροψίες ή να αποτρέψουν κάποια πιθανά προβλήματα DNS στο μέλλον.

Προβλήματα με το DNS στο Kubernetes. Δημόσια νεκροψία
Αυτό δεν είναι DNS
Δεν μπορεί να είναι DNS
Ήταν DNS

Λίγα λόγια για τις νεκροψίες και τις διαδικασίες στο Preply

Μια νεκροψία περιγράφει μια δυσλειτουργία ή κάποιο συμβάν στην παραγωγή. Το μεταθανάτιο περιλαμβάνει ένα χρονοδιάγραμμα γεγονότων, τον αντίκτυπο του χρήστη, τη βασική αιτία, τις ενέργειες που έγιναν και τα διδάγματα που αντλήθηκαν.

Αναζήτηση SRE

Στις εβδομαδιαίες συναντήσεις με την πίτσα, μεταξύ της τεχνικής ομάδας, μοιραζόμαστε διάφορες πληροφορίες. Ένα από τα πιο σημαντικά μέρη τέτοιων συναντήσεων είναι οι νεκροψίες, οι οποίες τις περισσότερες φορές συνοδεύονται από παρουσίαση με διαφάνειες και πιο εις βάθος ανάλυση του περιστατικού. Παρόλο που δεν χειροκροτάμε μετά τη νεκροψία, προσπαθούμε να αναπτύξουμε μια κουλτούρα "χωρίς φταίξιμο" (άψογος πολιτισμός). Πιστεύουμε ότι η συγγραφή και η παρουσίαση νεκροτομών μπορεί να βοηθήσει εμάς (και άλλους) να αποτρέψουμε παρόμοια περιστατικά στο μέλλον, γι' αυτό και τα κοινοποιούμε.

Τα άτομα που εμπλέκονται σε ένα περιστατικό θα πρέπει να αισθάνονται ότι μπορούν να μιλήσουν με λεπτομέρειες χωρίς φόβο τιμωρίας ή τιμωρίας. Καμία ευθύνη! Η συγγραφή μιας νεκροψίας δεν είναι τιμωρία, αλλά μια ευκαιρία μάθησης για ολόκληρη την εταιρεία.

Keep CALMS & DevOps: Το S είναι για κοινή χρήση

Προβλήματα με το DNS στο Kubernetes. Μετά θάνατον

Дата: 28.02.2020

Συγγραφείς: Amet U., Andrey S., Igor K., Alexey P.

Κατάσταση: Πεπερασμένος

Εν συντομία: Μερική μη διαθεσιμότητα DNS (26 λεπτά) για ορισμένες υπηρεσίες στο σύμπλεγμα Kubernetes

Βαθμολογία: Χάθηκαν 15000 αγώνες για τις υπηρεσίες Α, Β και Γ

Βασική αιτία: Το Kube-proxy δεν μπόρεσε να αφαιρέσει σωστά μια παλιά καταχώρηση από τον πίνακα conntrack, επομένως ορισμένες υπηρεσίες εξακολουθούσαν να προσπαθούν να συνδεθούν σε ανύπαρκτα pod

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: ...

Δώσει το έναυσμα για: Λόγω του χαμηλού φορτίου μέσα στο σύμπλεγμα Kubernetes, το CoreDNS-autoscaler μείωσε τον αριθμό των pod στην ανάπτυξη από τρία σε δύο

λύση: Η επόμενη ανάπτυξη της εφαρμογής ξεκίνησε τη δημιουργία νέων κόμβων, ο CoreDNS-autoscaler πρόσθεσε περισσότερα pods για να εξυπηρετήσει το σύμπλεγμα, γεγονός που προκάλεσε την επανεγγραφή του πίνακα conntrack

Ανίχνευση: Η παρακολούθηση του Προμηθέα εντόπισε μεγάλο αριθμό σφαλμάτων 5xx για τις υπηρεσίες Α, Β και Γ και ξεκίνησε μια κλήση στους επί καθήκοντι μηχανικούς

Προβλήματα με το DNS στο Kubernetes. Δημόσια νεκροψία
Σφάλματα 5xx στο Kibana

Δραστηριότητα

επίδραση
Τύπος
Υπεύθυνος
Έργο

Απενεργοποίηση αυτόματης κλίμακας για CoreDNS
αποτραπεί
Αμέτ Ου.
DEVOPS-695

Ρυθμίστε έναν διακομιστή DNS προσωρινής αποθήκευσης
μείωση
Max V.
DEVOPS-665

Ρυθμίστε την παρακολούθηση contrack
αποτραπεί
Αμέτ Ου.
DEVOPS-674

Διδάγματα

Τι πήγε καλά:

  • Η παρακολούθηση λειτούργησε καλά. Η ανταπόκριση ήταν γρήγορη και οργανωμένη
  • Δεν πετύχαμε κανένα όριο στους κόμβους

Τι ήταν λάθος:

  • Ακόμα άγνωστη πραγματική αιτία, παρόμοια με συγκεκριμένο σφάλμα σε αντίθεση
  • Όλες οι ενέργειες διορθώνουν μόνο τις συνέπειες, όχι τη βασική αιτία (σφάλμα)
  • Γνωρίζαμε ότι αργά ή γρήγορα μπορεί να είχαμε προβλήματα με το DNS, αλλά δεν δώσαμε προτεραιότητα στις εργασίες

Που σταθήκαμε τυχεροί:

  • Η επόμενη ανάπτυξη ενεργοποιήθηκε από το CoreDNS-autoscaler, το οποίο αντικατέστησε τον πίνακα conntrack
  • Αυτό το σφάλμα επηρέασε μόνο ορισμένες υπηρεσίες

Χρονολόγιο (EET)

ώρα
επίδραση

22:13
Το CoreDNS-autoscaler μείωσε τον αριθμό των pods από τρία σε δύο

22:18
Οι μηχανικοί που βρίσκονταν σε υπηρεσία άρχισαν να δέχονται κλήσεις από το σύστημα παρακολούθησης

22:21
Οι μηχανικοί της υπηρεσίας άρχισαν να ανακαλύπτουν την αιτία των λαθών.

22:39
Οι μηχανικοί σε υπηρεσία άρχισαν να επαναφέρουν μια από τις πιο πρόσφατες υπηρεσίες στην προηγούμενη έκδοση

22:40
Τα σφάλματα 5xx σταμάτησαν να εμφανίζονται, η κατάσταση έχει σταθεροποιηθεί

  • Ώρα για ανίχνευση: 4 λεπτά
  • Χρόνος πριν από τη δράση: 21 λεπτά
  • Ώρα για διόρθωση: 1 λεπτά

Επιπλέον χαρακτηριστικά

Για να ελαχιστοποιηθεί η χρήση της CPU, ο πυρήνας του Linux χρησιμοποιεί κάτι που ονομάζεται conntrack. Εν ολίγοις, αυτό είναι ένα βοηθητικό πρόγραμμα που περιέχει μια λίστα με εγγραφές NAT που είναι αποθηκευμένες σε έναν ειδικό πίνακα. Όταν το επόμενο πακέτο φτάσει από το ίδιο pod στο ίδιο pod όπως πριν, η τελική διεύθυνση IP δεν θα υπολογιστεί εκ νέου, αλλά θα ληφθεί από τον πίνακα conntrack.
Προβλήματα με το DNS στο Kubernetes. Δημόσια νεκροψία
Πώς λειτουργεί το contrack

Αποτελέσματα της

Αυτό ήταν ένα παράδειγμα μιας από τις νεκροψίες μας με μερικούς χρήσιμους συνδέσμους. Συγκεκριμένα σε αυτό το άρθρο, κοινοποιούμε πληροφορίες που μπορεί να είναι χρήσιμες σε άλλες εταιρείες. Γι' αυτό δεν φοβόμαστε να κάνουμε λάθη και γι' αυτό δημοσιοποιούμε ένα από τα μεταθανάτιά μας. Ακολουθούν μερικές ακόμη ενδιαφέρουσες δημόσιες νεκροτομές:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο