Gluasad Tinder gu Kubernetes

Thoir an aire. eadar-theangachadh.: O chionn ghoirid roinn luchd-obrach na seirbheis Tinder ainmeil air feadh an t-saoghail mion-fhiosrachadh teicnigeach mu bhith ag imrich am bun-structar aca gu Kubernetes. Thug am pròiseas faisg air dà bhliadhna agus mar thoradh air an sin chaidh àrd-ùrlar mòr a chuir air bhog air K8n, anns an robh 200 seirbheis air aoigheachd air 48 mìle soitheach. Dè na duilgheadasan inntinneach a thachair dha na h-innleadairean Tinder agus dè na toraidhean a thàinig orra?

Gluasad Tinder gu Kubernetes

Carson?

Cha mhòr dà bhliadhna air ais, cho-dhùin Tinder an àrd-ùrlar aige a ghluasad gu Kubernetes. Leigidh Kubernetes le sgioba Tinder a bhith a’ giùlan agus a’ gluasad gu cinneasachadh gun mòran oidhirp tro chleachdadh nach gabh atharrachadh (cleachdadh neo-sheasmhach). Anns a ’chùis seo, bhiodh cruinneachadh thagraidhean, an cleachdadh, agus am bun-structar fhèin air a mhìneachadh gu sònraichte le còd.

Bha sinn cuideachd a’ coimhead airson fuasgladh don duilgheadas scalability agus seasmhachd. Nuair a dh’ fhàs sgèileadh deatamach, bha againn ri feitheamh grunn mhionaidean gu tric airson cùisean ùra EC2 airson snìomh. Dh'fhàs am beachd a bhith a 'cur air bhog soithichean agus a' tòiseachadh a 'frithealadh trafaig ann an diogan an àite mionaidean gu math tarraingeach dhuinn.

Thionndaidh am pròiseas a-mach gu bhith duilich. Rè ar n-imrich tràth ann an 2019, ràinig cruinneachadh Kubernetes tomad èiginneach agus thòisich sinn a’ tighinn tarsainn air diofar dhuilgheadasan mar thoradh air meud trafaic, meud brabhsair, agus DNS. Air an t-slighe, dh’ fhuasgail sinn tòrr dhuilgheadasan inntinneach co-cheangailte ri imrich 200 seirbheis agus cumail suas cruinneachadh Kubernetes anns a bheil 1000 nodan, 15000 pods agus 48000 soithichean ruith.

Ciamar?

Bhon Fhaoilleach 2018, tha sinn air a dhol tro dhiofar ìrean imrich. Thòisich sinn le bhith a’ cumail ar seirbheisean gu lèir agus gan cleachdadh gu àrainneachdan sgòthan deuchainn Kubernetes. A’ tòiseachadh san Dàmhair, thòisich sinn gu modhail ag imrich a h-uile seirbheis a th’ ann gu Kubernetes. Ron Mhàrt an ath bhliadhna, chuir sinn crìoch air an imrich agus a-nis tha an àrd-ùrlar Tinder a’ ruith air Kubernetes a-mhàin.

Luchdaich a-nuas dealbhan airson Kubernetes

Tha còrr air 30 stòr còd stòr againn airson meanbh-sheirbheisean a’ ruith air buidheann Kubernetes. Tha an còd anns na stòran sin air a sgrìobhadh ann an diofar chànanan (mar eisimpleir, Node.js, Java, Scala, Go) le iomadh àrainneachd runtime airson an aon chànan.

Tha an siostam togail air a dhealbhadh gus “co-theacs togail” làn-ghnàthaichte a sholarachadh airson gach meanbh-sheirbheis. Mar as trice bidh e a’ toirt a-steach Dockerfile agus liosta de òrdughan shligean. Tha an susbaint aca gu tur gnàthach, agus aig an aon àm, tha na co-theacsan togail sin uile air an sgrìobhadh a rèir cruth àbhaisteach. Le bhith a’ gnàthachadh cho-theacsan togail leigidh sin le aon shiostam togail a bhith a’ làimhseachadh a h-uile meanbh-sheirbheisean.

Gluasad Tinder gu Kubernetes
Figear 1-1. Pròiseas togail àbhaisteach tro inneal Builder

Gus an cunbhalachd as motha a choileanadh eadar amannan ruith (àrainneachdan runtime) tha an aon phròiseas togail air a chleachdadh rè leasachadh agus deuchainn. Bha dùbhlan fìor inntinneach romhainn: bha againn ri dòigh a leasachadh gus dèanamh cinnteach à cunbhalachd na h-àrainneachd togail thairis air an àrd-ùrlar gu lèir. Gus seo a choileanadh, thèid a h-uile pròiseas cruinneachaidh a dhèanamh taobh a-staigh soitheach sònraichte. Builder.

Bha feum air dòighean adhartach Docker air a bhuileachadh. Bidh neach-togail a’ sealbhachadh an ID cleachdaiche ionadail agus dìomhaireachdan (leithid iuchair SSH, teisteanasan AWS, msaa) a dh’ fheumar gus faighinn gu stòran prìobhaideach Tinder. Bidh e a’ cur suas chlàran ionadail anns a bheil stòran gus stuthan togail a stòradh gu nàdarra. Bidh an dòigh-obrach seo a’ leasachadh coileanadh leis gu bheil e a’ cur às don fheum air stuthan togail a chopaigeadh eadar an inneal Builder agus an aoigh. Faodar stuthan togail stòraichte ath-chleachdadh gun rèiteachadh a bharrachd.

Airson cuid de sheirbheisean, bha againn ri inneal eile a chruthachadh gus an àrainneachd cruinneachaidh a mhapadh don àrainneachd runtime (mar eisimpleir, bidh leabharlann Node.js bcrypt a’ gineadh stuthan dà-chànanach sònraichte aig àm an stàlaidh). Rè a 'phròiseas cruinneachaidh, faodaidh riatanasan atharrachadh eadar seirbheisean, agus tha an Dockerfile mu dheireadh air a chur ri chèile air an itealan.

Kubernetes cruinneachadh ailtireachd agus imrich

Riaghladh meud brabhsair

Cho-dhùin sinn a chleachdadh cube-aws airson cleachdadh brabhsair fèin-ghluasadach air suidheachaidhean Amazon EC2. Aig an fhìor thoiseach, bha a h-uile dad ag obair ann an aon amar cumanta de nodan. Thuig sinn gu sgiobalta gu robh feum air eallach obrach a sgaradh a rèir meud agus seòrsa eisimpleir gus feum nas èifeachdaiche a dhèanamh de ghoireasan. B’ e an reusanachadh gun robh e na b’ fheàrr a bhith a’ ruith grunn pods ioma-snàthainn luchdaichte a thaobh coileanadh na an co-sheasmhachd aca le àireamh mhòr de phodan aon-snàithlean.

Aig a’ cheann thall shocraich sinn air:

  • m5.4x mòr - airson sgrùdadh (Prometheus);
  • c5.4x mòr - airson eallach obrach Node.js (eallach obrach aon-snàthainn);
  • c5.2x mòr - airson Java and Go (uallach obrach ioma-leughaidh);
  • c5.4x mòr - airson a’ phannal smachd (3 nodan).

Imrich

B’ e aon de na ceumannan ullachaidh airson imrich bhon t-seann bhun-structair gu Kubernetes a bhith ag ath-stiùireadh a’ chonaltraidh dhìreach a bh’ ann mar-thà eadar seirbheisean gu luchd-cothromachaidh luchdan ùra (Elastic Load Balancers (ELB). Chaidh an cruthachadh air subnet sònraichte de sgòth prìobhaideach brìgheil (VPC). Bha an subnet seo ceangailte ri Kubernetes VPC. Leig seo leinn modalan a ghluasad mean air mhean, gun a bhith a 'beachdachadh air òrdugh sònraichte eisimeileachd seirbheis.

Chaidh na puingean crìochnachaidh sin a chruthachadh le bhith a’ cleachdadh sheataichean cuideam de chlàran DNS aig an robh CNAMEn a’ comharrachadh gach ELB ùr. Gus tionndadh a-null, chuir sinn a-steach inntrigeadh ùr a 'sealltainn gu ELB ùr seirbheis Kubernetes le cuideam de 0. Chuir sinn an uairsin an Time To Live (TTL) den inntrigeadh a chaidh a shuidheachadh gu 0. Às dèidh seo, bha na cuideaman sean is ùr ann atharrachadh gu slaodach, agus mu dheireadh chaidh 100% den luchd a chuir gu frithealaiche ùr. Às deidh an tionndadh a chrìochnachadh, thill an luach TTL gu ìre nas iomchaidh.

Dh'fhaodadh na modalan Java a bh 'againn dèiligeadh ri TTL DNS ìosal, ach cha b' urrainn dha na h-aplacaidean Node. Rinn aon de na h-innleadairean ath-sgrìobhadh air pàirt de chòd an amar ceangail agus phaisg e e ann am manaidsear a dh’ ùraich na linneachan gach 60 diog. Dh’obraich an dòigh-obrach a chaidh a thaghadh gu fìor mhath agus às aonais truailleadh coileanaidh follaiseach.

Leasanan

Crìochan aodach an lìonraidh

Tràth sa mhadainn air 8 Faoilleach 2019, thuit àrd-ùrlar Tinder gun dùil. Mar fhreagairt air àrdachadh neo-cheangailte ann an latency àrd-ùrlair na bu thràithe sa mhadainn, chaidh an àireamh de pods agus nodan anns a’ bhuidheann suas. Dh'adhbhraich seo gun deach an tasgadan ARP a chaitheamh air na nodan againn gu lèir.

Tha trì roghainnean Linux co-cheangailte ris an tasgadan ARP:

Gluasad Tinder gu Kubernetes
(stòr)

gc_tresh3 - tha seo na chrìoch cruaidh. Bha coltas inntrigidhean “bòrd nàbaidh a’ dol thairis air ”anns a’ log a ’ciallachadh, eadhon às deidh cruinneachadh sgudail sioncronaich (GC), nach robh àite gu leòr ann an tasgadan ARP airson an inntrigeadh faisg air làimh a stòradh. Anns a 'chùis seo, chuir an kernel dìreach am pasgan air falbh gu tur.

Bidh sinn a ’cleachdadh Flannel mar aodach lìonra ann an Kubernetes. Thèid pacaidean a chuir thairis air VXLAN. Tha VXLAN na thunail L2 air a thogail air mullach lìonra L3. Bidh an teicneòlas a’ cleachdadh MAC-in-UDP (MAC Address-in-User Datagram Protocol) agus a’ ceadachadh leudachadh air earrannan lìonra Layer 2. Is e am protocol còmhdhail air lìonra ionad dàta corporra IP agus UDP.

Gluasad Tinder gu Kubernetes
Figear 2–1. diagram flannel (stòr)

Gluasad Tinder gu Kubernetes
Figear 2-2. pasgan VXLAN (stòr)

Bidh gach nód neach-obrach Kubernetes a’ riarachadh àite seòlaidh brìgheil le masg /24 bho bhloca / 9 nas motha. Airson gach nod tha seo ciallachadh aon inntrigeadh sa chlàr seòlaidh, aon inntrigeadh sa chlàr ARP (air an eadar-aghaidh flannel.1), agus aon inntrigeadh sa chlàr suidse (FDB). Bithear gan cur ris a’ chiad uair a thèid nód neach-obrach a thòiseachadh no gach uair a lorgar nód ùr.

A bharrachd air an sin, bidh conaltradh node-pod (no pod-pod) a 'dol tron ​​​​eadar-aghaidh aig a' cheann thall eth0 (mar a chithear san diagram Flannel gu h-àrd). Bidh seo a’ leantainn gu inntrig a bharrachd sa chlàr ARP airson gach stòr co-fhreagarrach agus aoigheachd ceann-uidhe.

Anns an àrainneachd againn, tha an seòrsa conaltraidh seo gu math cumanta. Airson stuthan seirbheis ann an Kubernetes, thèid ELB a chruthachadh agus bidh Kubernetes a’ clàradh gach nód leis an ELB. Chan eil fios aig an ELB mu dheidhinn pods agus is dòcha nach e an nód taghte ceann-uidhe deireannach a’ phacaid. Is e a’ phuing, nuair a gheibh nód pasgan bhon ELB, gu bheil e ga mheas a’ toirt aire do na riaghailtean iptables airson seirbheis shònraichte agus air thuaiream a’ taghadh pod air nód eile.

Aig àm an fhàiligeadh, bha 605 nodan anns a’ bhuidheann. Airson na h-adhbharan a chaidh ainmeachadh gu h-àrd, bha seo gu leòr gus faighinn thairis air cudromachd gc_tresh3, a tha mar an àbhaist. Nuair a thachras seo, chan e a-mhàin gu bheil pacaidean a’ tòiseachadh air an leigeil sìos, ach bidh an t-àite seòladh brìgheil Flannel gu lèir le masg /24 a’ dol à sealladh bhon chlàr ARP. Thathas a’ cur stad air conaltradh node-pod agus ceistean DNS (tha DNS air a chumail ann am brabhsair; leugh nas fhaide air adhart san artaigil seo airson mion-fhiosrachadh).

Gus an duilgheadas seo fhuasgladh, feumaidh tu na luachan àrdachadh gc_tresh1, gc_tresh2 и gc_tresh3 agus ath-thòiseachadh Flannel gus na lìonraidhean a tha a dhìth ath-chlàradh.

Sgèile DNS ris nach robh dùil

Tron phròiseas imrich, chleachd sinn DNS gu gnìomhach gus trafaic a riaghladh agus mean air mhean gluasad seirbheisean bhon t-seann bhun-structar gu Kubernetes. Shuidhich sinn luachan TTL coimeasach ìosal airson RecordSets co-cheangailte ann an Route53. Nuair a bha an seann bhun-structar a’ ruith air suidheachaidhean EC2, chomharraich an rèiteachadh fuasglaidh againn Amazon DNS. Ghabh sinn seo gu dòigheil agus cha mhòr nach deach mothachadh a’ bhuaidh a bha aig an TTL ìosal air na seirbheisean againn agus seirbheisean Amazon (leithid DynamoDB).

Mar a rinn sinn imrich air seirbheisean gu Kubernetes, lorg sinn gu robh DNS a’ làimhseachadh 250 mìle iarrtas gach diog. Mar thoradh air an sin, thòisich tagraidhean a’ faighinn eòlas air amannan seasmhach agus dona airson ceistean DNS. Thachair seo a dh ’aindeoin oidhirpean iongantach gus an solaraiche DNS a bharrachadh agus atharrachadh gu CoreDNS (a ràinig aig an ìre as àirde pods 1000 a’ ruith air 120 cores).

Fhad ‘s a bha sinn a’ sgrùdadh adhbharan agus fuasglaidhean eile a dh’ fhaodadh a bhith ann, lorg sinn artaigil, a’ toirt cunntas air suidheachaidhean cinnidh a bheir buaidh air frèam sìoltachaidh a’ phacaid lìn-lìn ann an Linux. Na h-ùineachan a chunnaic sinn, an cois cunntas-cunntais a bha a’ sìor fhàs cuir a-steach_dh'fhàillig anns an eadar-aghaidh Flannel co-chòrdail ri co-dhùnaidhean an artaigil.

Tha an duilgheadas a’ tachairt aig ìre Eadar-theangachadh Seòladh Lìonra Stòr is Ceann-uidhe (SNAT agus DNAT) agus an uairsin a-steach don chlàr rian. B ’e aon dòigh-obrach a chaidh a dheasbad air an taobh a-staigh agus a mhol a’ choimhearsnachd an DNS a ghluasad gu nód an neach-obrach fhèin. Anns a 'chùis seo:

  • Chan eil feum air SNAT oir tha an trafaic a’ fuireach taobh a-staigh an nód. Chan fheum e a bhith air a stiùireadh tron ​​​​eadar-aghaidh eth0.
  • Chan eil feum air DNAT leis gu bheil an IP ceann-uidhe ionadail don nód, agus chan e pod air a thaghadh air thuaiream a rèir nan riaghailtean iptables.

Cho-dhùin sinn cumail ris an dòigh-obrach seo. Chaidh CoreDNS a chleachdadh mar DaemonSet ann an Kubernetes agus chuir sinn an gnìomh frithealaiche DNS nód ionadail ann an fuasgladh.conf gach pod le bhith a’ suidheachadh bratach --cluster-dns àitheantan cuileag . Thionndaidh am fuasgladh seo gu bhith èifeachdach airson amannan DNS.

Ach, chunnaic sinn fhathast call pacaid agus àrdachadh anns a’ chunntair cuir a-steach_dh'fhàillig anns an eadar-aghaidh Flannel. Lean seo air adhart às deidh an dòigh-obrach a chuir an gnìomh oir bha e comasach dhuinn cuir às do SNAT agus / no DNAT airson trafaic DNS a-mhàin. Chaidh suidheachaidhean rèis a ghleidheadh ​​​​airson seòrsachan eile de thrafaig. Gu fortanach, is e TCP a th’ anns a’ mhòr-chuid de na pacaidean againn, agus ma thachras duilgheadas tha iad dìreach air an ath-chraoladh. Tha sinn fhathast a’ feuchainn ri fuasgladh freagarrach a lorg airson gach seòrsa trafaic.

A’ cleachdadh Tosgaire airson Cothromachadh Luchdan Nas Fheàrr

Mar a rinn sinn imrich air seirbheisean backend gu Kubernetes, thòisich sinn a’ fulang le luchd neo-chothromach eadar pods. Fhuair sinn a-mach gun tug HTTP Keepalive air ceanglaichean ELB a bhith an crochadh air a’ chiad pods deiseil de gach cleachdadh a chaidh a sgaoileadh. Mar sin, chaidh a’ mhòr-chuid den trafaic tro àireamh sa cheud bheag de na pods a bha rim faighinn. B ’e a’ chiad fhuasgladh a rinn sinn deuchainn a bhith a ’suidheachadh MaxSurge gu 100% air cleachdadh ùr airson na suidheachaidhean as miosa. Thionndaidh a’ bhuaidh a-mach gun robh i beag agus gun ghealladh a thaobh cleachdadh nas motha.

B’ e fuasgladh eile a chleachd sinn a bhith ag àrdachadh iarrtasan ghoireasan airson seirbheisean èiginneach. Anns a 'chùis seo, bhiodh barrachd rùm aig pods a chuireadh faisg air làimh airson gluasad an coimeas ri pods trom eile. Cha bhiodh e ag obair san fhad-ùine seach gum biodh e na chaitheamh ghoireasan. A bharrachd air an sin, bha na tagraidhean Node againn le aon snàithlean agus, mar sin, cha b’ urrainn dhaibh ach aon chridhe a chleachdadh. B’ e an aon fhìor fhuasgladh cothromachadh luchdan nas fheàrr a chleachdadh.

Tha sinn air a bhith ag iarraidh làn luach fhaighinn o chionn fhada Teachdaire. Leig an suidheachadh làithreach leinn a chleachdadh ann an dòigh gu math cuingealaichte agus toraidhean fhaighinn sa bhad. Tha Tosgaire na neach-ionaid àrd-choileanadh, stòr fosgailte, layer-XNUMX air a dhealbhadh airson tagraidhean mòra SOA. Is urrainn dha dòighean cothromachaidh luchdan adhartach a chuir an gnìomh, a’ toirt a-steach ath-chuiridhean fèin-ghluasadach, luchd-brisidh cuairteachaidh, agus cuingealachadh reataichean cruinne. (Thoir an aire. eadar-theangachadh.: Faodaidh tu barrachd a leughadh mu dheidhinn seo ann an an artaigil seo mu Istio, a tha stèidhichte air Tosgaire.)

Thàinig sinn suas leis an rèiteachadh a leanas: bi càr-taobh Envoy agad airson gach pod agus aon shlighe, agus ceangail am brabhsair ris a’ ghobhar gu h-ionadail tron ​​​​phort. Gus casg a chuir air casg agus cumail suas radius beag bualaidh, chleachd sinn cabhlach de pods proxy aghaidh Envoy, aon airson gach Sòn ri fhaighinn (AZ) airson gach seirbheis. Bha iad an urra ri einnsean lorg seirbheis sìmplidh a sgrìobh aon de na h-innleadairean againn a thill dìreach liosta de pods anns gach AZ airson seirbheis sònraichte.

Chleachd teachdaichean aghaidh seirbheis an inneal lorg seirbheis seo le aon bhuidheann suas an abhainn agus slighe. Shuidhich sinn amannan-ama iomchaidh, mheudaich sinn a h-uile suidheachadh brisidh cuairteachaidh, agus chuir sinn ris an ìre as lugha de rèiteachadh ath-thilleadh gus cuideachadh le fàilligidhean singilte agus dèanamh cinnteach à cleachdadh rèidh. Chuir sinn TCP ELB air beulaibh gach aon de na teachdaichean aghaidh seirbheis sin. Eadhon ged a bhiodh an cumail beò bhon phrìomh shreath proxy againn an sàs ann an cuid de pods Envoy, bha iad fhathast comasach air an luchd a làimhseachadh mòran na b’ fheàrr agus bha iad air an rèiteachadh gus cothromachadh tro least_request air an deireadh-sheachdain.

Airson a chleachdadh, chleachd sinn an dubhan preStop air an dà chuid pods tagraidh agus pods sidecar. Bhrosnaich an dubhan mearachd ann a bhith a’ sgrùdadh inbhe a’ phuing-chrìochnachaidh rianachd a tha suidhichte air a’ ghobhar-chàr-taobh agus chaidh e a chadal airson greis gus leigeil le ceanglaichean gnìomhach tighinn gu crìch.

Is e aon de na h-adhbharan a b’ urrainn dhuinn gluasad cho luath air sgàth na meatrach mionaideach a bha e comasach dhuinn fhilleadh a-steach gu furasta ann an stàladh àbhaisteach Prometheus. Leig seo leinn faicinn dè dìreach a bha a’ tachairt fhad ‘s a bha sinn ag atharrachadh crìochan rèiteachaidh agus ag ath-riarachadh trafaic.

Bha na toraidhean sa bhad agus follaiseach. Thòisich sinn leis na seirbheisean as neo-chothromach, agus an-dràsta tha e ag obair air beulaibh nan 12 seirbheis as cudromaiche sa bhuidheann. Am-bliadhna tha sinn an dùil gluasad gu mogal làn sheirbheis le lorg seirbheis nas adhartaiche, briseadh chuairtean, lorg taobh a-muigh, cuingealachadh reataichean agus lorg.

Gluasad Tinder gu Kubernetes
Figear 3–1. Co-ghluasad CPU de aon sheirbheis rè an gluasad gu Tosgaire

Gluasad Tinder gu Kubernetes

Gluasad Tinder gu Kubernetes

Toradh deireannach

Tron eòlas seo agus rannsachadh a bharrachd, tha sinn air sgioba bun-structair làidir a thogail le sgilean làidir ann a bhith a’ dealbhadh, a’ cleachdadh agus ag obrachadh cruinneachaidhean mòra Kubernetes. Tha an t-eòlas agus an eòlas aig a h-uile innleadair Tinder a-nis gus soithichean a phacadh agus tagraidhean a chuir gu Kubernetes.

Nuair a dh’ èirich feum air comas a bharrachd air an t-seann bhun-structar, bha againn ri feitheamh grunn mhionaidean airson suidheachaidhean ùra EC2 a chuir air bhog. A-nis bidh soithichean a’ tòiseachadh a ’ruith agus a’ tòiseachadh a ’giullachd trafaic taobh a-staigh diogan an àite mionaidean. Le bhith a’ clàradh grunn shoithichean air aon eisimpleir EC2 cuideachd a’ toirt seachad dùmhlachd còmhnard nas fheàrr. Mar thoradh air an sin, tha sinn a’ ro-innse lùghdachadh mòr ann an cosgaisean EC2019 ann an 2 an taca ris an-uiridh.

Thug an imrich faisg air dà bhliadhna, ach chrìochnaich sinn e sa Mhàrt 2019. An-dràsta, tha an àrd-ùrlar Tinder a’ ruith a-mhàin air cruinneachadh Kubernetes anns a bheil 200 seirbheis, 1000 nodan, 15 pods agus 000 soithichean ruith. Chan e bun-structar an aon raon de sgiobaidhean gnìomhachd a-nis. Bidh na h-innleadairean againn uile a’ co-roinn an uallaich seo agus bidh smachd aca air a’ phròiseas togail agus cleachdadh na tagraidhean aca a’ cleachdadh còd a-mhàin.

PS bhon eadar-theangair

Leugh cuideachd sreath de artaigilean air ar blog:

Source: www.habr.com

Cuir beachd ann