Transizzjoni Tinder għal Kubernetes

Nota. transl.: Impjegati tas-servizz Tinder famuż fid-dinja reċentement qasmu xi dettalji tekniċi tal-migrazzjoni tal-infrastruttura tagħhom għal Kubernetes. Il-proċess ħa kważi sentejn u rriżulta fit-tnedija ta 'pjattaforma fuq skala kbira ħafna fuq K8s, li tikkonsisti f'200 servizz ospitat fuq 48 elf kontenitur. Liema diffikultajiet interessanti ltaqgħu magħhom l-inġiniera Tinder u liema riżultati waslu? Aqra din it-traduzzjoni.

Transizzjoni Tinder għal Kubernetes

Għaliex?

Kważi sentejn ilu, Tinder iddeċidiet li tmexxi l-pjattaforma tagħha għal Kubernetes. Kubernetes kien jippermetti lit-tim ta' Tinder li jdaħħal f'kontejners u jimxi għall-produzzjoni bi sforz minimu permezz ta' skjerament immutabbli (skjerament immutabbli). F'dan il-każ, l-assemblaġġ tal-applikazzjonijiet, l-iskjerament tagħhom, u l-infrastruttura nnifisha jkunu definiti b'mod uniku bil-kodiċi.

Konna wkoll infittxu soluzzjoni għall-problema tal-iskalabbiltà u l-istabbiltà. Meta l-iskala saret kritika, ħafna drabi kellna nistennew diversi minuti biex istanzi EC2 ġodda jduru. L-idea li tniedi kontenituri u nibdew naqdu t-traffiku f'sekondi minflok minuti saret attraenti ħafna għalina.

Il-proċess irriżulta li kien diffiċli. Matul il-migrazzjoni tagħna kmieni fl-2019, il-cluster Kubernetes laħaq massa kritika u bdejna niltaqgħu ma' diversi problemi minħabba l-volum tat-traffiku, id-daqs tal-cluster, u d-DNS. Tul it-triq, solvejna ħafna problemi interessanti relatati mal-migrazzjoni ta '200 servizz u ż-żamma ta' cluster Kubernetes li jikkonsisti minn 1000 node, 15000 pods u 48000 kontenitur li jaħdem.

Kif?

Minn Jannar 2018, għaddejna minn diversi stadji tal-migrazzjoni. Bdejna billi ikkontejnizzajna s-servizzi kollha tagħna u nħaddmuhom fl-ambjenti tal-cloud tat-test Kubernetes. Minn Ottubru, bdejna metodikament nemigraw is-servizzi eżistenti kollha lejn Kubernetes. Sa Marzu tas-sena ta’ wara, lestejna l-migrazzjoni u issa l-pjattaforma Tinder taħdem esklussivament fuq Kubernetes.

Stampi tal-bini għal Kubernetes

Għandna aktar minn 30 repożitorju tal-kodiċi tas-sors għal mikroservizzi li jaħdmu fuq cluster Kubernetes. Il-kodiċi f'dawn ir-repożitorji huwa miktub f'lingwi differenti (per eżempju, Node.js, Java, Scala, Go) b'diversi ambjenti runtime għall-istess lingwa.

Is-sistema tal-bini hija mfassla biex tipprovdi "kuntest tal-bini" kompletament personalizzabbli għal kull mikroservizz. Normalment jikkonsisti minn Dockerfile u lista ta 'kmandi tal-qoxra. Il-kontenut tagħhom huwa kompletament customizable, u fl-istess ħin, dawn il-kuntesti tal-bini kollha huma miktuba skont format standardizzat. L-istandardizzazzjoni tal-kuntesti tal-bini tippermetti li sistema waħda tal-bini tittratta l-mikroservizzi kollha.

Transizzjoni Tinder għal Kubernetes
Figura 1-1. Proċess tal-bini standardizzat permezz tal-kontenitur tal-Bennej

Biex tinkiseb konsistenza massima bejn runtimes (ambjenti runtime) l-istess proċess tal-bini jintuża waqt l-iżvilupp u l-ittestjar. Iffaċċjajna sfida interessanti ħafna: kellna niżviluppaw mod kif niżguraw il-konsistenza tal-ambjent tal-bini madwar il-pjattaforma kollha. Biex jinkiseb dan, il-proċessi kollha ta 'assemblaġġ jitwettqu ġewwa kontenitur speċjali. Bennej.

L-implimentazzjoni tal-kontejners tiegħu kienet teħtieġ tekniki Docker avvanzati. Il-bennej jiret l-ID tal-utent lokali u s-sigrieti (bħalma huma ċ-ċavetta SSH, il-kredenzjali tal-AWS, eċċ.) meħtieġa biex jaċċessaw repożitorji privati ​​ta’ Tinder. Jimmunta direttorji lokali li fihom sorsi biex jaħżnu b'mod naturali l-artifacts tal-bini. Dan l-approċċ itejjeb il-prestazzjoni minħabba li jelimina l-ħtieġa li tikkopja l-artifacts tal-bini bejn il-kontenitur tal-Bennej u l-ospitant. Artifacts tal-bini maħżuna jistgħu jerġgħu jintużaw mingħajr konfigurazzjoni addizzjonali.

Għal xi servizzi, kellna noħolqu kontenitur ieħor biex immappja l-ambjent tal-kumpilazzjoni mal-ambjent tar-runtime (pereżempju, il-librerija bcrypt Node.js tiġġenera artifacts binarji speċifiċi għall-pjattaforma waqt l-installazzjoni). Matul il-proċess ta 'kumpilazzjoni, ir-rekwiżiti jistgħu jvarjaw bejn is-servizzi, u l-Dockerfile finali huwa kkompilat fuq il-fly.

Kubernetes cluster arkitettura u migrazzjoni

Ġestjoni tad-daqs tal-cluster

Iddeċidejna li nużaw kube-aws għall-iskjerament awtomatizzat tal-clusters fuq istanzi ta' Amazon EC2. Fil-bidu nett, kollox ħadem f'grupp wieħed komuni ta 'nodi. Malajr irrealizzajna l-ħtieġa li nisseparaw il-piżijiet tax-xogħol skont id-daqs u t-tip ta’ istanza biex nagħmlu użu aktar effiċjenti tar-riżorsi. Il-loġika kienet li t-tħaddim ta 'diversi imżiewed b'ħafna ħajt mgħobbi rriżulta li kien aktar prevedibbli f'termini ta' prestazzjoni mill-koeżistenza tagħhom ma 'numru kbir ta' mżiewed b'ħajt wieħed.

Fl-aħħar ikkonċentraw fuq:

  • m5.4xlarge — għall-monitoraġġ (Prometheus);
  • c5.4xlarge - għal xogħol Node.js (xogħol b'ħajt wieħed);
  • c5.2xlarge - għal Java u Go (xogħol multithreaded);
  • c5.4xlarge — għall-pannell tal-kontroll (3 nodi).

Migrazzjoni

Wieħed mill-passi preparatorji għall-migrazzjoni mill-infrastruttura l-antika għal Kubernetes kien li terġa 'tidderieġi l-komunikazzjoni diretta eżistenti bejn is-servizzi għall-bilanċjanti tat-tagħbija l-ġodda (Elastic Load Balancers (ELB). Dawn inħolqu fuq subnet speċifiku ta 'sħab privat virtwali (VPC). Din is-subnet kienet konnessa ma' Kubernetes VPC. Dan ippermetta li nimigraw il-moduli gradwalment, mingħajr ma nikkunsidraw l-ordni speċifika tad-dipendenzi tas-servizz.

Dawn l-endpoints inħolqu bl-użu ta' settijiet peżati ta' rekords DNS li kellhom CNAMEs li jindikaw kull ELB ġdid. Biex taqleb, żidna entrata ġdida li tipponta lejn l-ELB il-ġdid tas-servizz Kubernetes b'piż ta '0. Imbagħad issettjajna l-Time To Live (TTL) tad-dħul issettjat għal 0. Wara dan, il-piżijiet qodma u ġodda ġew aġġustat bil-mod, u eventwalment 100% tat-tagħbija intbagħtet lil server ġdid. Wara li tlesta l-bidla, il-valur TTL reġa' lura għal livell aktar adegwat.

Il-moduli Java li kellna setgħu jlaħħqu ma 'DNS TTL baxx, iżda l-applikazzjonijiet Node ma setgħux. Wieħed mill-inġiniera kiteb mill-ġdid parti mill-kodiċi tal-pool tal-konnessjoni u geżwer f'maniġer li aġġorna l-pools kull 60 sekonda. L-approċċ magħżul ħadem tajjeb ħafna u mingħajr ebda degradazzjoni notevoli tal-prestazzjoni.

Il-lezzjonijiet

Il-Limiti tat-Tessili tan-Netwerk

Fil-għodu kmieni tat-8 ta’ Jannar 2019, il-pjattaforma Tinder ħabtet bla mistenni. Bi tweġiba għal żieda mhux relatata fil-latency tal-pjattaforma aktar kmieni dakinhar filgħodu, in-numru ta 'miżwed u nodi fil-cluster żdied. Dan wassal biex il-cache ARP jiġi eżawrit fuq in-nodi kollha tagħna.

Hemm tliet għażliet Linux relatati mal-cache ARP:

Transizzjoni Tinder għal Kubernetes
(sors)

gc_thresh3 - dan huwa limitu iebes. Id-dehra ta '"neighbour table overflow" daħliet fil-log fissret li anke wara l-ġbir sinkroniku taż-żibel (GC), ma kienx hemm biżżejjed spazju fil-cache ARP biex taħżen id-dħul ġirien. F'dan il-każ, il-qalba sempliċement warrab il-pakkett kompletament.

Aħna nużaw Flannel bħala drapp tan-netwerk fil-Kubernetes. Il-pakketti huma trażmessi fuq VXLAN. VXLAN hija mina L2 imqajma fuq netwerk L3. It-teknoloġija tuża MAC-in-UDP (MAC Address-in-User Datagram Protocol) inkapsulament u tippermetti espansjoni tas-segmenti tan-netwerk Layer 2. Il-protokoll tat-trasport fuq in-netwerk fiżiku taċ-ċentru tad-dejta huwa IP flimkien ma 'UDP.

Transizzjoni Tinder għal Kubernetes
Figura 2–1. Dijagramma tal-flanella (sors)

Transizzjoni Tinder għal Kubernetes
Figura 2–2. Pakkett VXLAN (sors)

Kull nodu tal-ħaddiema Kubernetes jalloka spazju ta 'indirizz virtwali b'maskra /24 minn blokka /9 akbar. Għal kull nodu dan huwa ifisser entrata waħda fit-tabella tar-rotta, entrata waħda fit-tabella ARP (fuq l-interface flannel.1), u entrata waħda fit-tabella tal-iswiċċjar (FDB). Jiġu miżjuda l-ewwel darba li jinbeda nodu tal-ħaddiem jew kull darba li jiġi skopert nodu ġdid.

Barra minn hekk, il-komunikazzjoni node-pod (jew pod-pod) fl-aħħar mill-aħħar tgħaddi mill-interface eth0 (kif muri fid-dijagramma Flannel hawn fuq). Dan jirriżulta f'entrata addizzjonali fit-tabella ARP għal kull sors korrispondenti u ospitanti tad-destinazzjoni.

Fl-ambjent tagħna, dan it-tip ta 'komunikazzjoni huwa komuni ħafna. Għal oġġetti ta' servizz f'Kubernetes, jinħoloq ELB u Kubernetes jirreġistra kull nodu mal-ELB. L-ELB ma jaf xejn dwar il-miżwed u n-nodu magħżul jista 'ma jkunx id-destinazzjoni finali tal-pakkett. Il-punt huwa li meta node jirċievi pakkett mill-ELB, iqis li jqis ir-regoli iptables għal servizz speċifiku u tagħżel b'mod każwali pod fuq node ieħor.

Fiż-żmien tal-falliment, kien hemm 605 node fil-cluster. Għar-raġunijiet imsemmija hawn fuq, dan kien biżżejjed biex jingħeleb is-sinifikat gc_thresh3, li hija l-inadempjenza. Meta jiġri dan, mhux biss jibdew jitwaqqgħu l-pakketti, iżda l-ispazju kollu tal-indirizzi virtwali tal-Flannel b'maskra /24 jisparixxi mit-tabella ARP. Il-komunikazzjoni node-pod u l-mistoqsijiet DNS huma interrotti (DNS huwa ospitat fi cluster; aqra aktar tard f'dan l-artikolu għad-dettalji).

Biex issolvi din il-problema, għandek bżonn iżżid il-valuri gc_thresh1, gc_thresh2 и gc_thresh3 u terġa 'tibda Flannel biex terġa' tirreġistra n-netwerks neqsin.

Skalar DNS mhux mistenni

Matul il-proċess tal-migrazzjoni, użajna b'mod attiv id-DNS biex niġġestixxu t-traffiku u gradwalment nittrasferixxu s-servizzi mill-infrastruttura l-antika għal Kubernetes. Aħna waqqafna valuri TTL relattivament baxxi għal RecordSets assoċjati f'Route53. Meta l-infrastruttura l-antika kienet qed taħdem fuq istanzi EC2, il-konfigurazzjoni tar-resolver tagħna indikat Amazon DNS. Ħadna dan bħala fatt u l-impatt tat-TTL baxx fuq is-servizzi tagħna u s-servizzi tal-Amazon (bħal DynamoDB) baqa’ fil-biċċa l-kbira inosservat.

Hekk kif emigrajna s-servizzi lejn Kubernetes, sibna li d-DNS kien qed jipproċessa 250 elf talba kull sekonda. Bħala riżultat, l-applikazzjonijiet bdew jesperjenzaw timeouts kostanti u serji għal mistoqsijiet DNS. Dan ġara minkejja sforzi inkredibbli biex jiġi ottimizzat u jaqilbu l-fornitur tad-DNS għal CoreDNS (li fl-ogħla tagħbija laħaq 1000 pods li jaħdmu fuq 120 core).

Filwaqt li rriċerkajna kawżi u soluzzjonijiet oħra possibbli, skoprejna oġġett, li jiddeskrivi l-kundizzjonijiet tar-razza li jaffettwaw il-qafas tal-filtrazzjoni tal-pakketti filtru nett fil-Linux. Il-timeouts li osservajna, flimkien ma 'counter dejjem jiżdied insert_failed fl-interface Flannel kienu konsistenti mas-sejbiet tal-artikolu.

Il-problema sseħħ fl-istadju tat-Traduzzjoni tal-Indirizz tan-Netwerk tas-Sors u tad-Destinazzjoni (SNAT u DNAT) u d-dħul sussegwenti fit-tabella conttrack. Waħda mill-workarounds diskussi internament u ssuġġerit mill-komunità kienet li tmexxi d-DNS lejn in-nodu tal-ħaddiem innifsu. F'dan il-każ:

  • SNAT mhux meħtieġ minħabba li t-traffiku jibqa' ġewwa n-node. M'għandux għalfejn jiġi mgħoddi mill-interface eth0.
  • DNAT mhuwiex meħtieġ peress li l-IP tad-destinazzjoni huwa lokali għan-nodu, u mhux pod magħżul b'mod każwali skont ir-regoli iptables.

Iddeċidejna li nżommu ma' dan l-approċċ. CoreDNS ġie skjerat bħala DaemonSet f'Kubernetes u implimentajna server DNS ta' nodi lokali f' isolvi.konf kull pod billi tistabbilixxi bandiera --cluster-dns timijiet kubelet . Din is-soluzzjoni rriżulta li kienet effettiva għal timeouts tad-DNS.

Madankollu, xorta rajna telf ta 'pakketti u żieda fil-counter insert_failed fl-interface Flannel. Dan kompla wara li ġiet implimentata l-soluzzjoni għax stajna neliminaw SNAT u/jew DNAT għat-traffiku DNS biss. Il-kundizzjonijiet tat-tellieqa ġew ippreservati għal tipi oħra ta’ traffiku. Fortunatament, il-biċċa l-kbira tal-pakketti tagħna huma TCP, u jekk isseħħ problema huma sempliċement trażmessi mill-ġdid. Għadna qed nippruvaw insibu soluzzjoni xierqa għal kull tip ta’ traffiku.

L-użu ta' Envoy għal Ibbilanċjar Aħjar tat-Tagħbija

Hekk kif emigrajna s-servizzi backend lejn Kubernetes, bdejna nsofru minn tagħbija żbilanċjata bejn il-miżwed. Sibna li HTTP Keepalive ikkawża konnessjonijiet ELB biex jiddendlu fuq l-ewwel imżiewed lesti ta 'kull skjerament rolled out. Għalhekk, il-biċċa l-kbira tat-traffiku għaddiet minn persentaġġ żgħir ta 'miżwed disponibbli. L-ewwel soluzzjoni li ttestjajna kienet li nissettjaw MaxSurge għal 100% fuq skjeramenti ġodda għall-agħar xenarji. L-effett irriżulta li kien insinifikanti u mhux promettenti f'termini ta 'skjeramenti akbar.

Soluzzjoni oħra li użajna kienet li nżidu artifiċjalment it-talbiet tar-riżorsi għal servizzi kritiċi. F'dan il-każ, imżiewed imqiegħda fil-qrib ikollhom aktar spazju biex jimmanuvraw meta mqabbla ma 'miżwed tqal oħra. Mhux se jaħdem fit-tul lanqas għax ikun ħela ta’ riżorsi. Barra minn hekk, l-applikazzjonijiet Node tagħna kienu b'ħajt wieħed u, għaldaqstant, setgħu jużaw qalba waħda biss. L-unika soluzzjoni reali kienet li tuża bilanċ aħjar tat-tagħbija.

Ilna ridna napprezzaw bis-sħiħ mibgħut. Is-sitwazzjoni attwali ppermettietna niskjerawha b'mod limitat ħafna u niksbu riżultati immedjati. Envoy huwa proxy ta' prestazzjoni għolja, open-source, saff-XNUMX iddisinjat għal applikazzjonijiet kbar ta' SOA. Jista 'jimplimenta tekniki avvanzati ta' bilanċjar tat-tagħbija, inklużi provi mill-ġdid awtomatiċi, circuit breakers, u l-limitazzjoni tar-rata globali. (Nota. transl.: Tista' taqra aktar dwar dan fi Dan l-artikolu dwar Istio, li hija bbażata fuq Envoy.)

Ħriġna bil-konfigurazzjoni li ġejja: ikollna sidecar Envoy għal kull pod u rotta waħda, u qabbad il-cluster mal-kontenitur lokalment permezz tal-port. Biex innaqqsu l-kaskata potenzjali u nżommu raġġ ta’ hit żgħir, użajna flotta ta’ pods ta’ quddiem Envoy, wieħed għal kull Żona ta’ Disponibbiltà (AZ) għal kull servizz. Huma bbażaw ruħhom fuq magna ta 'skoperta ta' servizz sempliċi miktuba minn wieħed mill-inġiniera tagħna li sempliċement irritornat lista ta 'miżwed f'kull AZ għal servizz partikolari.

Il-Mibgħuta ta' quddiem tas-servizz imbagħad użaw dan il-mekkaniżmu ta' skoperta tas-servizz b'grupp u rotta upstream wieħed. Stabbilijna timeouts adegwati, żidna l-issettjar kollha tal-interruttur, u żidna konfigurazzjoni minima tal-prova mill-ġdid biex ngħinu f'fallimenti singoli u niżguraw skjeramenti bla xkiel. Poġġejna TCP ELB quddiem kull wieħed minn dawn il-Mibgħuta ta' quddiem tas-servizz. Anke jekk il-keepalive mis-saff ewlieni tal-prokura tagħna kien imwaħħal fuq xi mżiewed tal-Envoy, xorta kienu kapaċi jimmaniġġjaw it-tagħbija ħafna aħjar u kienu kkonfigurati biex jibbilanċjaw permezz ta' least_request fil-backend.

Għall-iskjerament, użajna l-ganċ preStop kemm fuq il-miżwed tal-applikazzjoni kif ukoll fuq il-miżwed sidecar. Il-ganċ wassal għal żball fil-verifika tal-istatus tal-endpoint tal-amministratur li jinsab fuq il-kontenitur tal-sidecar u mar jorqod għal xi żmien biex jippermetti li jintemmu konnessjonijiet attivi.

Waħda mir-raġunijiet li stajna nimxu daqshekk malajr hija minħabba l-metriċi dettaljati li stajna nintegraw faċilment f'installazzjoni tipika ta' Prometheus. Dan ippermettilna naraw eżattament x'kien qed jiġri waqt li aħna aġġustajna l-parametri tal-konfigurazzjoni u tqassam mill-ġdid it-traffiku.

Ir-riżultati kienu immedjati u ovvji. Bdejna bl-aktar servizzi żbilanċjati, u bħalissa topera quddiem it-12-il servizz l-aktar importanti fil-cluster. Din is-sena qed nippjanaw transizzjoni għal malji ta 'servizz sħiħ b'skoperta ta' servizz aktar avvanzata, circuit breaking, detezzjoni ta 'outlier, limitazzjoni tar-rata u traċċar.

Transizzjoni Tinder għal Kubernetes
Figura 3–1. Konverġenza tas-CPU ta' servizz wieħed matul it-tranżizzjoni għal Envoy

Transizzjoni Tinder għal Kubernetes

Transizzjoni Tinder għal Kubernetes

Riżultat finali

Permezz ta’ din l-esperjenza u riċerka addizzjonali, bnejna tim ta’ infrastruttura b’saħħtu b’ħiliet b’saħħithom fit-tfassil, l-iskjerament u l-operat ta’ clusters kbar ta’ Kubernetes. L-inġiniera kollha ta' Tinder issa għandhom l-għarfien u l-esperjenza biex jippakkjaw il-kontenituri u jużaw applikazzjonijiet għal Kubernetes.

Meta qamet il-ħtieġa għal kapaċità addizzjonali fuq l-infrastruttura l-antika, kellna nistennew diversi minuti biex iniedu istanzi EC2 ġodda. Issa l-kontenituri jibdew jaħdmu u jibdew jipproċessaw it-traffiku fi ftit sekondi minflok minuti. L-iskedar ta' kontenituri multipli fuq istanza EC2 waħda tipprovdi wkoll konċentrazzjoni orizzontali mtejba. Bħala riżultat, aħna qed inbassru tnaqqis sinifikanti fl-ispejjeż tal-EC2019 fl-2 meta mqabbel mas-sena li għaddiet.

Il-migrazzjoni ħadet kważi sentejn, iżda lestejna f'Marzu 2019. Bħalissa, il-pjattaforma Tinder taħdem esklussivament fuq cluster Kubernetes li jikkonsisti minn 200 servizz, 1000 nodu, 15 pod u 000 kontenitur li jaħdem. L-infrastruttura m'għadhiex l-uniku qasam tat-timijiet tal-operazzjonijiet. L-inġiniera tagħna kollha jaqsmu din ir-responsabbiltà u jikkontrollaw il-proċess tal-bini u l-iskjerament tal-applikazzjonijiet tagħhom bl-użu tal-kodiċi biss.

PS minn traduttur

Aqra wkoll sensiela ta’ artikli fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment