Tinder transitus ad Kubernetes

Nota. transl.: Employees mundi famosi muneris Tinder nuper communicaverunt quaedam singula technicae migrandi infrastructuram suam ad Kubernetes. Processus prope duos annos interfuit et consecutus est in deductione amplissimarum suggestuum K8s, ex 200 servitiis qui in 48 milia continentibus erant. Quas difficultates interretiales machinarum Tindere convenerunt et quos eventus invenerunt? Lege hanc translationem.

Tinder transitus ad Kubernetes

Quid?

Prope duos annos Tinder tribunal suum ad Kubernetes movere constituit. Kubernetes permitteret equos fomes continens et movere ad productionem minimo conatu per immutabilem instruere (Immutabilis instruere). Hoc in casu, conventus applicationum, instruere, ac ipsa infrastructura a codice unice definiri debet.

Etiam solutionem quaestionis scalability ac stabilitatis quaerebamus. Cum scalae criticae factae sunt, saepe debebamus exspectare plura momenta pro novis EC2 instantiis ad fila faciendum. Idea vasorum deducendi et incipiens negotiationis in secundis loco minutis serviens nobis valde venustissima facta est.

Processus difficilis evasit. Per migrationem nostram ineunte MMXIX, botrus Kubernetes massam criticam attigit et varias difficultates obvenire incepimus ob volumen mercaturae, magnitudine botri, et DNS. In via multum solvimus problemata interesting quae ad 2019 officia migrandi et conservanda Kubernetes botrum 200 nodis constans, 1000 siliquarum et 15000 vasorum currentium.

Quid?

Cum Ianuarii 2018 per varias migrationis gradus transivimus. Nos omnia officia nostra continendo coepimus easque explicando ad Kubernetes ut nubes experirentur. Incipientes mense Octobri incepimus methodice migrare omnia officia in Kubernetes existentes. A Martio anni sequentis migrationem absolvimus et nunc suggestum Tinder solum in Kubernetes decurrit.

Imagines ad Kubernetes

Supra 30 fontem codicem repositoria habemus pro microservices repositoria in botro Kubernetes currentium. Codex in his repositoriis variis linguis scriptus est (exempli gratia Node.js, Java, Scala, Go) multis runtime ambitus eiusdem linguae.

Systema constructum ordinatur ad plene customizable "contextum construendum" pro singulis microserviis. Solet constat ex Dockerfile et indicem testarum imperat. Contentum earum omnino customizabile est, et simul omnes contextus constructio secundum formam normatum scribentur. Contextus normae aedificandi permittit unum systema fabricandi unum ad omnia microservices tractanda.

Tinder transitus ad Kubernetes
Figurae 1-1. Standardized constructum processus per conditor continens

Ad consequi maximam constantiam inter runtimes (Runtime ambitus) processus aedificandi idem adhibetur in evolutione et probatione. Nos ante valde interesting provocatio: viam habuimus evolvere ad constantiam aedificandi environment per totum suggestum. Ad hoc obtinendum, omnes conventus processus intra peculiare receptaculum peraguntur. Builder.

Eius continens exsecutionem ars Docker excogitavit provecta. Conditor usorem localem ID possidet et secreta (ut clavem SSH, AWS documentorum, etc.) ad repositoria privata accedere requiritur. Directoria localia in quibus fontes ascendit ad naturaliter fabricanda artificia reponunt. Hic aditus effectus melioris facit quod excludit necessitatem effingendi artificia fabricandi inter conditorem continens et exercitum. Artificia constructa condita sine addita configuratione reddi possunt.

Aliquot officia, aliud vas creare debebamus ut ambitum ambitum compilationem describendam ad ambitus temporis currentis (exempli gratia, bibliotheca Node.js bcrypt generat suggestum artificiatorum binariorum specialium durante institutione). Per processum compilationem, requisita inter officia variari possunt, et ultima Dockerfile in musca compilata est.

Architectura botri Kubernetes et migratio

Botri magnitudine administratione

Nos uti placuit kube-aws pro automated botrum instruere in instantiis Amazonum EC2. Principio omnia in uno communi nodis lacu operata sunt. Cito intelleximus necessitatem laboris separandi per magnitudinem et instantiam generis ad usum facultatum magis efficacem. Logica erat, quod plures stantes siliquae multi- linae onustae currendo evaserunt plus praevideri in terminis effectus effectionis quam earum coexistentia cum magno numero siliquae unius filamentis.

Tandem consedimus:

  • m5.4xlarge β€” vigilantia (Prometheus);
  • c5.4xlarge - for Node.js quod inposuit (singula inposuit);
  • c5.2xlarge - pro Java et Go (multiplicatum quod inposuit);
  • c5.4xlarge β€” pro panelli potestate (3 nodes).

migratum

Una e gradibus praeparatoriis ad migrandum ex veteri infrastructura ad Kubernetes erat directam communicationem existentium inter officia ad novum onus librariorum (ELB) elasticorum (ELB) reducere. In subnet specifica nubes privatae virtualis factae sunt (VPC). Hoc subnet iunctus fuit Kubernetes VPC. Hoc modulos gradatim migrare nobis licuit, non considerato certo servitiorum ordine.

Fines hae creatae sunt utens gravitates tabularum DNS quae habebat CNAMEs demonstrans unicuique ELB novum. Ad transeundum accessimus novam ingressum demonstrans novum ELB Kubernetorum servitii pondus 0. Tunc constituimus Tempus Vivendi (TTL) introitus ad 0. Post haec vetera et nova pondera erant lente adaequatum, et tandem 100% oneris novo servo missum est. Post commutatione completa, valor TTL ad planiorem aequiorem rediit.

Moduli Javae moduli crepidines TTL DNS tolerare possemus, sed Node applicationes non potuerunt. Unus e fabrum rescripsit partem e nexus codicei piscinae et eum involvit in praeposito qui piscinas singulis 60 secundis renovavit. Accedunt electi valde bene laboraverunt et sine aliqua notabili turpitudine.

lessons

Fines Network Fabricae

Mane primo VIII mensis Ianuarii anno MMXIX, suggestum Tinder subito concrepuit. Propter latency in suggestu auctum finitimum mane mane, numerus siliquarum et nodum in botro auctus est. Hoc fecit ARP cache ad omnes nodos nostros exhauriendos.

Tres optiones Linux cum ARP cache cognatae sunt:

Tinder transitus ad Kubernetes
(fons)

gc_thresh3 β€” Durus hic modus est. Species "mensae viciniae redundantiae" introitus in trunco ​​significaverunt quod etiam post synchronum purgamentum collectionis (GC), in ARP cache spatium non satis erat ad vicinitatem ingressum condere. In hoc casu, nucleus plane fasciculum penitus abdicavit.

Utimur flannel ut fabricae retis in Kubernetes. Fasciculi VXLAN transmittuntur. VXLAN est L2 cuniculum supra retis L3 elevatum. Technologia utitur MAC-in-UDP (MAC Oratio-in-usoris Datagram Protocollum) encapsulationis et dilatationem iacuit 2 segmentorum retis permittit. Protocollum onerariis in retis materialibus centrum data IP plus UDP est.

Tinder transitus ad Kubernetes
Figure 2-1. Flannel diagram (fons)

Tinder transitus ad Kubernetes
Figura 2-2. VXLAN sarcina (fons)

Singuli nodi Kubernetes operarii virtualem electronicae spatium cum /24 larva ex stipite maiore /9 collocant. Nam quisque nodi hoc est modo unum introitum in mensa fusura, unum ingressum in mensa ARP (super flannel.1 interface), et unum ingressum in mensa mutandi (FDB). Adduntur primum nodi operarius inceptus vel singulis diebus novus nodi inventus est.

Accedit vasculum nodi (seu pod-pod-) communicatio tandem per interfacem percurrit eth0 (ut supra in Flannel exhibet). Hoc consequitur in accessu addito in mensa ARP pro quolibet fonte respondente ac destinato hospitio.

In ambitu nostro, hoc genus communicationis usitatissimum est. Pro obiectis in Kubernetes, ELB creatum est, et Kubernetes nodum utriusque cum ELB ediderunt. ELB nihil de siliquis scit et nodi delecti non possunt esse finalis destinationis fasciculi. Punctum est quod, cum nodi fasciculum ab ELB acceperit, rationem normarum considerat iptables pro certo servitio, et passim vasculum in alio nodo eligit.

Tempore defectus, in botro erant 605 nodi. Rationes supra dictae hoc sufficiebant ad significationem superandam gc_thresh3quod est defalta. Cum hoc incidit, non solum fasciculi demitti incipiunt, sed totum spatium virtuale inscriptionis Flannel cum /24 persona e tabula ARP evanescit. Communicatio podex nodi et DNS queries intermittuntur (DNS hosted in botro; postea in hoc articulo lege singula).

Ad hanc solvendam quaestionem, valores augere debes gc_thresh1, gc_thresh2 ΠΈ gc_thresh3 et Flannel sileo ut re-subcriptio in retiacula absentis.

Inopinatum DNS scalas

Per processum migrationis, DNS actively usi sumus ad negotiationem administrandam et officia vetusta infrastructura ad Kubernetes paulatim transferendi. TTL valores relativos pro consociata RecordSets in Route53 constituimus. Cum vetus infrastructura in instantiis EC2 curreret, conformatio resolutoria nostra cum DNS Amazonio monstrata est. Hoc pro concesso cepimus et impulsum humilium TTL in officia nostra et officia Amazonia (ut DynamoDB) late latuit.

Cum officia ad Kubernetes migraremus, invenimus DNS CCL milia petitionum secundorum procedere. Quam ob rem applicationes constantes et graves explorationes DNS queries inceperunt. Hoc factum est, quamvis incredibile nisus ad optimizandum ac mutandum DNS provisor ad CoreDNS (quod ad apicem oneris 250 siliquae currentium in 1000 nucleos pervenit).

Dum alias causas possibiles et solutiones investigamus, indagavimus articulusdescribens condiciones quae ad fasciculum eliquare compage netfilter in Linux. De indiciis animadvertimus, quae cum cremento contra iunguntur insert_failed in Flannel interface cohaerentes cum inventis articuli.

Problema occurrit in scaena Source et Destination Inscriptionis Network Inscriptionis (SNAT et DNAT) et ingressum sequens in mensam conntrack. Unus e operariis interne agitatis et a communitate suggessit, DNS ad ipsam nodi laborantem movendam erat. In hoc casu:

  • SNAT opus non est quia negotiatio intra nodi manet. Non opus est ut per interface fusa eth0.
  • DNAT non opus est cum destinatio IP ad nodo localis est, nec vasculum passim delectum iuxta regulas iptables.

Nos cum accessu inhaero constituimus. CoreDNS ut DaemonSet in Kubernetes direxit et nodi locales DNS ministrantes in nobis impleverunt resolve.conf uterque vasculum statuendo vexillum --cluster-dns imperium cubeletβ€Š. Haec solutio evasit efficax pro DNS timeouts.

Tamen adhuc vidimus damnum fasciculum et incrementum in contra insert_failed in Flannel interface. Hoc continuatum est postquam opus operis effecti est quod SNAT et/vel DNAT tollere possemus pro DNS negotiationis tantum. Condiciones generi conservatae sunt in aliis generibus negotiationis. Fortunate, plerique TCP nostri facis, et si quaestio incidit, simpliciter retransmissa sunt. Adhuc aptam solutionem omnium generum negotiationis invenire conantur.

Per Legatum ad Potius Lond Librans

Cum ad Kubernetes officia retrograda migraremus, onere inter siliquas inaequalis laborare coepimus. Reperiebamus HTTP Keepalive causasse nexus ELB pendere in primo legumine paratum uniuscuiusque instituti devoluti. Ita moles negotiationis perambulabat parva recipis siliquarum promptarum. Prima solutio temptavimus MaxSurge ad C% de novis inceptis in causa pessima missionum. Effectus evasit minimus et unprompens in terminis majorum inceptorum.

Alia solutione adhibita eramus ut petitiones subsidiorum artificiose augerent pro officiis criticis. Hoc in casu, siliquae prope positae plus spatii decurrere haberent prae aliis siliquis gravibus. Non opus est in longo spatio vel quia perditio rerum esset. Praeterea applicationes nostrae Nodi simplicia fila erant ac proinde unum nucleum tantum uti poterant. Sola solutio realis erat meliori onere utendi conpensatione.

Nos diu volui ut plene appreciate envoy. Praesens rerum condicio nobis valde strictim explicandam permisit ac statim consequitur. Legatus est summus perficientur, fons apertus, tabulatum-XNUMX procuratorem ad magnas applicationes SOA destinatas. Potest efficere progressivum pondus artes conpensationis, inclusa retries automaticae, confractiones ambitus, et global rate limitandi. (Nota. transl.: Plura de hoc legere potes hoc articulum de Istio, qui ab Legato innititur.

Convenimus cum hac figura: Legatum habemus sidecaro pro unoquoque vasculo et uno itinere, et botrum continenti coniunge per portum localiter. Ad magnas cascading potentiales extenuendas et parvum radium hit conservandum, classe Legatorum ante-procuratorem siliquas fecimus, unam per Zonam (AZ) pro singulis servitiis disponibilitate. Solliciti servitii simplicis inventionis machinae ab uno fabrum nostrorum scriptae nitebantur quae siliquarum in unaquaque AZ pro servitio dato reddidisset.

Operae ante-legati hoc operae inventae sunt mechanismum cum uno adverso glomerulo et itinere. Apta tempora posuimus, omnem ambitum praevaricatoris uncinis auximus, et minimam Retry configurationem adiunxit subsidio in singulis defectibus et inceptis lenibus invigilare. TCP ELB ante singulas horum servitiorum legatos anteponimus. Etiamsi custodiae procuratorio nostro e strato principali in quodam legumine Legato adhaeserant, tamen multo melius onus tractare poterant et per minimum _requestum in backend librare configurati sunt.

Ad instruendum, preStop hamo in utroque applicatione siliquarum et siliquarum siderum usi sumus. Uncus error utitur in reprimendo statum admin endpuncti in continente sidecaro sito et ad tempus dormiendum ut nexus activas terminare permittat.

Una e causis tam cito moveri poteramus ob accuratas metricas ut facile in Promethei institutionem typicam integrare poteramus. Hoc exacte videre licet quidnam fiebat dum conformationem parametri adaequavimus et negotiatio distributa est.

Eventus immediata et manifesta erant. Officia gravissima coepimus, et momento agit ante 12 operas maximas in botro. Hoc anno disponimus transitum ad plenam servitii reticulum cum maiore servitio inventionis, ambitus fractionis, deprehensione outlior, rate limitandi et pervestigandi.

Tinder transitus ad Kubernetes
Figura 3-1. CPU concursus unius servitii in transitu ad Legatum

Tinder transitus ad Kubernetes

Tinder transitus ad Kubernetes

supremum exitum

Per hanc experientiam et ulteriorem inquisitionem, turmas infrastructuras validas aedificavimus cum magnis artibus ad excogitandas, disponendas, magnas uvas Kubernetes operandas. Omnes fabrum Tinderae nunc scientiam et experientiam habent in vasis fasciculis et applicationes ad Kubernetes explicant.

Cum necessitas capacitatis additionalis ex veteri infrastructura orta esset, plura minuta exspectanda habuimus ad novas EC2 instantias deducendas. Nunc continentia cursus incipiunt et incipiunt mercaturam facere in secundis pro minutis. Pluribus vasis scheduling in exempli una EC2 etiam coniunctis horizontalibus melius praebet. Quam ob rem, significantem reductionem eC2019 anno 2 anno praeterito comparato praediximus.

Migratio biennium fere cepit, sed mense Martio MMXIX complevimus. Nunc, suggestus Tinder solum in botrum Kubernetarum constans ex 2019 officiis, 200 nodis, 1000 siliquarum et 15 vasorum currentium. Infrastructura solum non est regio iunctorum operationum. Omnes nostri fabrum hanc responsabilitatem communicant ac modum aedificandi moderantur ac applicationes suas explicandi tantum codice utentes.

PS ab translator

Lege etiam seriem articulorum in nostro blog:

Source: www.habr.com