Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices

Ang akong ngalan mao si Viktor Yagofarov, ug akong gipalambo ang Kubernetes nga plataporma sa DomClick isip usa ka technical development manager sa Ops (operasyon) team. Gusto nakong hisgutan ang istruktura sa among Dev <-> Ops nga mga proseso, ang mga bahin sa pag-operate sa usa sa pinakadako nga k8s clusters sa Russia, ingon man ang DevOps/SRE practices nga gipadapat sa among team.

Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices

Ops Team

Ang Ops team sa pagkakaron adunay 15 ka tawo. Tulo niini ang responsable sa opisina, duha ang nagtrabaho sa lahi nga time zone ug magamit, lakip ang gabii. Sa ingon, ang usa ka tawo gikan sa Ops kanunay nga naa sa monitor ug andam nga motubag sa usa ka insidente sa bisan unsang pagkakomplikado. Wala kami'y mga pagbalhin sa kagabhion, nga nagpreserbar sa among psyche ug naghatag sa tanan nga higayon nga makakuha og igong pagkatulog ug mogahin og oras sa kalingawan dili lamang sa kompyuter.

Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices

Ang matag usa adunay lain-laing mga kahanas: networker, DBA, ELK stack specialist, Kubernetes admins/developers, monitoring, virtualization, hardware specialist, etc. Usa ka butang ang naghiusa sa tanan - ang tanan mahimong mopuli sa bisan kinsa kanato sa usa ka sukod: pananglitan, pagpaila sa bag-ong mga node sa k8s cluster, pag-update sa PostgreSQL, pagsulat og CI/CD + Ansible pipeline, pag-automate sa usa ka butang sa Python/Bash/Go, pagkonektar sa hardware ngadto sa Data center. Ang lig-on nga mga kahanas sa bisan unsang lugar dili makapugong kanimo sa pagbag-o sa imong direksyon sa kalihokan ug pagsugod sa pag-uswag sa ubang lugar. Pananglitan, miapil ko sa usa ka kompanya isip usa ka PostgreSQL specialist, ug karon ang akong nag-unang bahin sa responsibilidad mao ang Kubernetes clusters. Sa team, ang bisan unsang gitas-on giabiabi ug ang pagbati sa leverage naugmad kaayo.

By the way, nangayam mi. Ang mga kinahanglanon alang sa mga kandidato medyo sukaranan. Alang kanako sa personal, importante nga ang usa ka tawo mohaum sa team, dili panagbangi, apan nahibal-an usab kung unsaon pagpanalipod sa iyang panglantaw, gusto nga molambo ug dili mahadlok sa pagbuhat og bag-o, nagtanyag sa iyang mga ideya. Usab, ang mga kahanas sa programming sa mga sinultian nga scripting, kinahanglan ang kahibalo sa mga sukaranan sa Linux ug English. Kinahanglan lang ang English aron ang usa ka tawo kung adunay fakap maka-google sa solusyon sa problema sa 10 segundos, ug dili sa 10 minuto. Lisud na kaayo karon ang pagpangita sa mga espesyalista nga adunay lawom nga kahibalo sa Linux: kataw-anan kini, apan duha sa tulo nga mga kandidato dili makatubag sa pangutana nga "Unsa ang Average nga Load? Unsa ang gihimo niini?", Ug ang pangutana nga "Unsaon pag-assemble ang usa ka kinauyokan nga dump gikan sa usa ka programa sa C" giisip nga usa ka butang gikan sa kalibutan sa mga supermen ... o mga dinosaur. Kinahanglan namon nga antuson kini, tungod kay kasagaran ang mga tawo nagpalambo sa ubang mga kahanas, apan kami magtudlo sa Linux. Ang tubag sa pangutana nga "ngano nga ang usa ka DevOps engineer kinahanglan nga mahibal-an kining tanan sa modernong kalibutan sa mga panganod" kinahanglan nga ibilin sa gawas sa sakup sa artikulo, apan sa tulo ka mga pulong: kining tanan gikinahanglan.

Mga Himan sa Team

Ang team sa Tools adunay dakong papel sa automation. Ang ilang nag-unang tahas mao ang paghimo og sayon ​​​​nga graphical ug CLI nga mga himan alang sa mga developers. Pananglitan, ang among internal nga pag-uswag Confer nagtugot kanimo sa literal nga pagpalupad sa usa ka aplikasyon ngadto sa Kubernetes sa pipila lang ka pag-klik sa mouse, pag-configure sa mga kahinguhaan niini, mga yawe gikan sa vault, ug uban pa. Kaniadto, adunay Jenkins + Helm 2, apan kinahanglan nako nga maghimo sa akong kaugalingon nga himan aron mawagtang ang copy-paste ug magdala sa pagkaparehas sa siklo sa kinabuhi sa software.

Ang Ops team wala magsulat sa mga pipelines alang sa mga developers, apan makatambag sa bisan unsang mga isyu sa ilang pagsulat (ang uban nga mga tawo aduna pa'y Helm 3).

DevOps

Sama sa alang sa DevOps, nakita namon kini sama niini:

Ang mga dev team nagsulat og code, i-roll kini pinaagi sa Confer to dev -> qa/stage -> prod. Ang responsibilidad sa pagsiguro nga ang code dili mohinay ug wala’y mga kasaypanan naa sa Dev ug Ops teams. Sa adlaw, ang tawo nga nag-duty gikan sa Ops team kinahanglan una sa tanan pagtubag sa usa ka insidente sa iyang aplikasyon, ug sa gabii ug sa gabii, ang administrator on duty (Ops) kinahanglan pukawon ang developer nga nag-duty kung nahibal-an niya sigurado nga ang problema wala sa imprastraktura. Ang tanan nga mga sukatan ug mga alerto sa pag-monitor makita nga awtomatiko o semi-awtomatiko.

Ang lugar sa responsibilidad sa Ops nagsugod gikan sa higayon nga ang aplikasyon gilukot sa produksiyon, apan ang responsibilidad ni Dev wala matapos didto - gibuhat namon ang parehas nga butang ug naa sa parehas nga sakayan.

Gitambagan sa mga developer ang mga admin kung kinahanglan nila ang tabang sa pagsulat sa usa ka microservice sa admin (pananglitan, Go backend + HTML5), ug gitambagan sa mga admin ang mga developer sa bisan unsang mga isyu sa imprastraktura o isyu nga may kalabotan sa k8s.

Pinaagi sa dalan, wala kami usa ka monolith, mga microservice lamang. Ang ilang gidaghanon hangtod karon nag-usab-usab tali sa 900 ug 1000 sa prod k8s cluster, kung gisukod sa numero pagpadala. Ang gidaghanon sa mga pod nag-usab-usab tali sa 1700 ug 2000. Sa pagkakaron adunay mga 2000 ka pod sa prod cluster.

Dili ko makahatag og eksaktong mga numero, tungod kay gimonitor namo ang dili kinahanglan nga mga microservice ug giputol kini nga semi-awtomatikong. Ang K8s nagtabang kanamo sa pagsubay sa wala kinahanglana nga mga entidad walay pulos-operator, nga makadaginot ug daghang kahinguhaan ug salapi.

Pagdumala sa kahinguhaan

Pagbantay

Ang maayo nga pagkahan-ay ug impormatibo nga pag-monitor nahimong sukaranan sa operasyon sa usa ka dako nga cluster. Wala pa kami nakit-an nga usa ka unibersal nga solusyon nga mosakup sa 100% sa tanan nga mga kinahanglanon sa pag-monitor, mao nga matag karon ug unya naghimo kami nga lainlaing mga kostumbre nga solusyon sa kini nga palibot.

  • Zabbix. Maayo nga daan nga pag-monitor, nga gituyo sa panguna aron masubay ang kinatibuk-ang kahimtang sa imprastraktura. Gisultihan kita niini kung ang usa ka node mamatay sa mga termino sa pagproseso, memorya, mga disk, network, ug uban pa. Wala'y labaw sa kinaiyahan, apan kami usab adunay usa ka bulag nga DaemonSet sa mga ahente, uban sa tabang niini, pananglitan, among gimonitor ang estado sa DNS sa cluster: nangita kami og mga hungog nga coredns pod, among gisusi ang pagkaanaa sa mga eksternal nga host. Ingon og ngano nga magsamok niini, apan sa daghang mga volume sa trapiko kini nga sangkap usa ka seryoso nga punto sa kapakyasan. ako na gihulagway, kung giunsa ko nanlimbasug sa performance sa DNS sa usa ka cluster.
  • Operator sa Prometheus. Ang usa ka set sa lain-laing mga exporters naghatag og usa ka dako nga overview sa tanan nga mga sangkap sa cluster. Sunod, atong mahanduraw kining tanan sa dagkong mga dashboard sa Grafana, ug gamiton ang alertmanager alang sa mga alerto.

Ang laing mapuslanong himan alang kanamo mao ang listahan-pagsulod. Gisulat namo kini human sa makadaghang higayon nga nakasugat mi og sitwasyon diin ang usa ka team nagsapaw-sapaw sa mga agianan sa Ingress sa laing team, nga miresulta sa 50x nga mga sayop. Karon sa wala pa i-deploy sa produksiyon, gisusi sa mga developer nga wala’y maapektuhan, ug alang sa akong team kini usa ka maayong himan alang sa una nga pagdayagnos sa mga problema sa Ingresses. Kataw-anan nga sa sinugdan kini gisulat alang sa mga admin ug kini morag "clumsy", apan human ang mga dev team nahigugma sa himan, kini nausab pag-ayo ug nagsugod nga dili sama sa "usa ka admin naghimo sa usa ka web nga nawong alang sa mga admin. ” Sa dili madugay atong biyaan kini nga himan ug ang ingon nga mga sitwasyon ma-validate bisan sa wala pa ang pipeline nga gilukot.

Mga kapanguhaan sa team sa Cube

Sa dili pa kita moadto sa mga pananglitan, angay nga ipasabut kung giunsa naton paggahin ang mga kapanguhaan microservices.

Aron masabtan kung unsang mga team ug sa unsang gidaghanon ang gigamit nila kahinguhaan (processor, memorya, lokal nga SSD), among gigahin ang matag sugo sa iyang kaugalingon namespace sa "Cube" ug limitahan ang labing taas nga kapabilidad niini sa mga termino sa processor, memorya ug disk, nga kaniadto gihisgutan ang mga panginahanglan sa mga team. Tungod niini, ang usa ka sugo, sa kinatibuk-an, dili makababag sa tibuok cluster alang sa pag-deploy, nga naggahin sa liboan ka mga core ug terabytes sa memorya. Ang pag-access sa namespace gihatag pinaagi sa AD (among gigamit ang RBAC). Ang mga namespace ug ang ilang mga limitasyon gidugang pinaagi sa usa ka pull request sa GIT repository, ug dayon ang tanan awtomatikong gilukot pinaagi sa Ansible pipeline.

Usa ka pananglitan sa paggahin og mga kapanguhaan ngadto sa usa ka team:

namespaces:

  chat-team:
    pods: 23
    limits:
      cpu: 11
      memory: 20Gi
    requests:
      cpu: 11
      memory: 20Gi

Mga hangyo ug limitasyon

Cubed" hangyo mao ang gidaghanon sa mga garantisadong gitagana nga mga kapanguhaan alang sa pod (usa o daghan pa nga docker container) sa usa ka cluster. Ang limitasyon kay dili garantiya nga maximum. Kanunay nimong makita sa mga graph kung giunsa ang pipila ka team nga nagbutang sa kaugalingon nga daghang mga hangyo alang sa tanan nga mga aplikasyon niini ug dili ma-deploy ang aplikasyon sa "Cube", tungod kay ang tanan nga mga hangyo sa ilawom sa ilang namespace "nagasto na".

Ang husto nga paagi sa paggawas niini nga sitwasyon mao ang pagtan-aw sa aktuwal nga konsumo sa kapanguhaan ug itandi kini sa gipangayo nga kantidad (Request).

Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices
Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices

Sa mga screenshot sa ibabaw imong makita nga ang "Gihangyo" nga mga CPU gipares sa tinuod nga gidaghanon sa mga thread, ug ang mga Limitasyon mahimong molapas sa tinuod nga gidaghanon sa mga CPU thread =)

Karon atong tan-awon ang pipila ka namespace sa detalye (akong gipili ang namespace kube-system - ang sistema nga namespace alang sa mga sangkap sa "Cube" mismo) ug tan-awa ang ratio sa aktuwal nga gigamit nga oras sa processor ug memorya sa gihangyo:

Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices

Dayag nga mas daghang memorya ug CPU ang gitagana alang sa mga serbisyo sa sistema kay sa aktuwal nga gigamit. Sa kaso sa kube-system, kini gipakamatarung: nahitabo nga ang nginx ingress controller o nodelocaldns sa ilang peak miigo sa CPU ug mikonsumo og daghang RAM, mao nga dinhi ang ingon nga reserba gipakamatarung. Dugang pa, dili kami makasalig sa mga tsart sa miaging 3 ka oras: gitinguha nga makita ang mga sukatan sa kasaysayan sa daghang yugto sa panahon.

Usa ka sistema sa "mga rekomendasyon" ang gihimo. Pananglitan, dinhi imong makita kung unsang mga kahinguhaan ang mas maayo sa pagpataas sa "limitasyon" (ang taas nga gitugotan nga bar) aron dili mahitabo ang "throttling": ang higayon nga ang usa ka kapanguhaan nakagasto na sa CPU o memorya sa gitakda nga oras nga slice ug naghulat hangtud nga kini "dili matunaw":

Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices

Ug ania ang mga pods nga kinahanglan makapugong sa ilang mga gana:

Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices

sa throttling + pag-monitor sa kapanguhaan, mahimo ka magsulat labaw pa sa usa ka artikulo, busa pangutana sa mga komentaryo. Sa pipila ka mga pulong, makaingon ko nga ang tahas sa pag-automate sa ingon nga mga sukatan lisud kaayo ug nanginahanglan daghang oras ug pagbalanse nga aksyon nga adunay mga function sa "window" ug "CTE" Prometheus / VictoriaMetrics (kini nga mga termino naa sa mga kinutlo, tungod kay hapit adunay walay sama niini sa PromQL, ug kinahanglan nimong bahinon ang makahahadlok nga mga pangutana ngadto sa daghang mga screen sa teksto ug i-optimize kini).

Ingon usa ka sangputanan, ang mga nag-develop adunay mga himan alang sa pag-monitor sa ilang mga namespace sa Cube, ug sila makahimo sa pagpili alang sa ilang kaugalingon kung asa ug sa unsang orasa kung unsang mga aplikasyon ang mahimong "maputol," ug kung unsang mga server ang mahatagan sa tibuuk nga CPU sa tibuok gabii.

Mga pamaagi

Sa kompanya sama sa karon uso, misunod kami sa DevOps- ug KAWALA-practitioner Kung ang usa ka kompanya adunay 1000 ka microservice, mga 350 ka developer ug 15 ka mga admin para sa tibuuk nga imprastraktura, kinahanglan nimo nga "mag-uso": luyo sa tanan nga kini nga mga "basword" adunay dinalian nga panginahanglan nga i-automate ang tanan ug ang tanan, ug ang mga admin kinahanglan dili usa ka bottleneck. sa mga proseso.

Ingon nga Ops, naghatag kami lainlaing mga sukatan ug mga dashboard alang sa mga nag-develop nga may kalabotan sa mga rate sa pagtubag sa serbisyo ug mga sayup.

Gigamit namon ang mga pamaagi sama sa: RED, PAGGAMIT ΠΈ Bulawan nga mga Senyalespinaagi sa paghiusa kanila. Among gisulayan nga mamenosan ang gidaghanon sa mga dashboard aron sa usa ka pagtan-aw klaro kung unsa nga serbisyo ang karon nagpakaubos (pananglitan, mga code sa pagtubag matag segundo, oras sa pagtubag sa ika-99 nga porsyento), ug uban pa. Sa diha nga ang pipila ka mga bag-ong metric mahimong gikinahanglan alang sa kinatibuk-ang mga dashboard, kami diha-diha dayon magdrowing ug modugang kanila.

Usa ka bulan nga wala ako magdrowing og mga graph. Kini tingali usa ka maayong timailhan: kini nagpasabut nga kadaghanan sa mga "gusto" natuman na. Nahitabo nga sulod sa semana magdrowing ko og bag-ong graph labing menos kausa sa usa ka adlaw.

Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices

Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices

Ang resulta nga resulta bililhon tungod kay karon ang mga developer panagsa ra nga moadto sa mga admin nga adunay mga pangutana "kung asa tan-awon ang usa ka matang sa sukatan."

Pagpatuman Serbisyo mesh hapit na lang ug kinahanglan nga maghimo sa kinabuhi nga labi kadali alang sa tanan, ang mga kauban gikan sa Tools hapit na ipatuman ang abstract nga "Istio sa usa ka himsog nga tawo": ang siklo sa kinabuhi sa matag (mga) HTTP nga hangyo makita sa pag-monitor, ug kini kanunay nga posible nga masabtan "sa unsa nga yugto ang tanan nabuak" atol sa inter-service (ug dili lamang) nga interaksyon. Mag-subscribe sa balita gikan sa DomClick hub. =)

Suporta sa imprastraktura sa Kubernetes

Sa kasaysayan, gigamit namo ang patched nga bersyon Kubespray β€” Masaligan nga tahas sa pag-deploy, pagpalapad ug pag-update sa Kubernetes. Sa pila ka punto, ang suporta alang sa dili kubeadm nga mga instalasyon giputol gikan sa punoan nga sanga, ug ang proseso sa pagbalhin sa kubeadm wala gisugyot. Ingon usa ka sangputanan, ang kompanya sa Southbridge naghimo sa kaugalingon nga tinidor (uban ang suporta sa kubeadm ug dali nga pag-ayo alang sa mga kritikal nga problema).

Ang proseso sa pag-update sa tanan nga k8s clusters ingon niini:

  • Dad-a Kubespray gikan sa Southbridge, susiha ang among thread, Merjim.
  • Atong ilunsad ang update sa Kapit-os- "Cube".
  • Gilunsad namon ang pag-update usa ka node matag higayon (sa Ansible kini "serial: 1") sa Dev- "Cube".
  • Nag update mi prod sa Sabado sa gabii usa ka node matag higayon.

Adunay mga plano nga ilisan kini sa umaabot Kubespray alang sa usa ka butang nga mas paspas ug adto sa kubeadm.

Sa kinatibuk-an kami adunay tulo ka "Cubes": Stress, Dev ug Prod. Nagplano kami nga maglunsad og lain (init nga standby) Prod-β€œCube” sa ikaduhang data center. Kapit-os ΠΈ Dev nagpuyo sa β€œvirtual machines” (oVirt for Stress ug VMWare cloud para sa Dev). prod- Ang "Cube" nagpuyo sa "bare metal": parehas kini nga mga node nga adunay 32 nga mga thread sa CPU, 64-128 GB nga panumduman ug 300 GB SSD RAID 10 - adunay 50 niini sa kinatibuk-an. Tulo ka "nipis" nga mga node gipahinungod sa "mga agalon" prod- "Cuba": 16 GB sa memorya, 12 CPU thread.

Alang sa pagbaligya, gusto namon nga gamiton ang "bare metal" ug likayan ang dili kinahanglan nga mga layer sama sa Bukas ang Bukid: dili nato kinahanglan ang "saba nga mga silingan" ug CPU mangawat ug oras. Ug ang pagkakomplikado sa administrasyon gibana-bana nga doble sa kaso sa in-house nga OpenStack.

Alang sa CI / CD "Cubic" ug uban pang mga sangkap sa imprastraktura naggamit kami usa ka bulag nga server sa GIT, Helm 3 (kini usa ka sakit nga pagbalhin gikan sa Helm 2, apan nalipay kami sa mga kapilian. atomic), Jenkins, Ansible ug Docker. Ganahan mi sa mga feature branch ug deployment sa lain-laing palibot gikan sa usa ka repository.

konklusyon

Kubernetes sa DomClick: unsaon pagkatulog nga malinawon pagdumala sa usa ka pungpong sa 1000 ka microservices
Kini, sa kinatibuk-ang termino, kung unsa ang hitsura sa proseso sa DevOps sa DomClick gikan sa panan-aw sa usa ka engineer sa operasyon. Ang artikulo nahimo nga dili kaayo teknikal kaysa sa akong gilauman: busa, sunda ang balita sa DomClick sa HabrΓ©: adunay daghang "hardcore" nga mga artikulo bahin sa Kubernetes ug daghan pa.

Source: www.habr.com

Idugang sa usa ka comment