Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Minu nimi on Viktor Jagofarov ja olen Domklik'i Kubernetes platvormi arenduse tehniline juht Ops meeskonnas. Soovin rÀÀkida meie Dev <-> Ops protsesside korraldusest, Venemaa ĂŒhe suurima k8s-klastri haldamise eripĂ€radest ning DevOps/SRE praktikatest, mida meie meeskond rakendab.

Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Ops meeskond

Ops meeskonnas töötab hetkel 15 inimest. Kolm neist vastutavad bĂŒroo eest, kaks töötavad teises ajavööndis ning on saadaval, sealhulgas öösiti. Nii on alati keegi Ops'ist monitori taga, valmis reageerima igasuguste Ă”nnetuste korral. Öösiti valveid meil ei ole, mis kaitseb meie vaimu ja annab vĂ”imaluse kĂ”igile korralikult magada ja nautida vaba aega mitte ainult arvuti taga.

Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Kompetentsid on kĂ”ikidel erinevad: vĂ”rguinsenerid, DBA-d, ELK-i virna spetsialistid, Kubernetes-i administraatorid/aruandjad, jĂ€lgimise, virtualiseerimise ja riistvara spetsialistid jne. Ühendab kĂ”iki ĂŒks asi — igaĂŒks vĂ”ib mingil mÀÀral asendada teist: nĂ€iteks lisada uusi sĂ”lme k8s klastri, vĂ€rskendada PostgreSQL, kirjutada CI/CD pipeline'i + Ansible, automatiseerida midagi Pythonis/Bashis/Go-s, ĂŒhendada riistvara andmekeskusesse. Tugevad kompetentsid mingis valdkonnas ei takista suunda muuta ja alustada Ă”ppimist mĂ”nes teises valdkonnas. NĂ€iteks, töötasin algselt ettevĂ”ttes PostgreSQL spetsialistina, kuid nĂŒĂŒd on minu peamine vastutusvaldkond Kubernetes klastri juhtimine. Meeskonnas on iga areng alati teretulnud ja ĂŒhtekuuluvustunne on vĂ€ga tugevalt vĂ€ljendatud.

Muide, me otsime uut talenti. Kandidaatidelt ootused on ĂŒsna standardsed. Minu jaoks on oluline, et inimene sobituks meeskonda, oleks konfliktivaba, kuid oskaks ka oma seisukohti kaitsta, sooviks areneda ja ei kardaks uut proovida ning tooks oma ideid lauale. Samuti on vajalikud programmimise oskused skriptikeeltes, teadmised Linuxi pĂ”hialustest ja inglise keel. Inglise keel on vajalik, et inimene saaks probleemide lahendamiseks kiiresti internetti otsida, mitte ei raiskaks sellele 10 minutit. SĂŒgavate Linuxi teadmisteta spetsialiste on hetkel vĂ€ga keeruline leida: naljakas, aga kaks kandidaati kolmest ei oska vastata kĂŒsimusele „Mis on Load Average? Millest see koosneb?”, ja kĂŒsimust „Kuidas koguda core dump C-programmist” peavad nad millegiks ĂŒleinimlikuks
 vĂ”i dinosauruste maailmast. Selle olukorraga tuleb leppida, kuna enamasti on inimestel teised oskused tugevalt arenenud, ning „liinukse” Ă”petame me Ă€ra. Vastus kĂŒsimusele „miks seda kĂ”ike peaks DevOps-insener tĂ€napĂ€eva pilveteenustes teadma” peab jÀÀma artikli raames arutlemiseks, kuid kolme sĂ”naga: see on kĂ”ik vajalik.

Tööriistade meeskond

Automatiseerimises mĂ€ngib olulist rolli Tools'i meeskond. Nende peamine ĂŒlesanne on luua arendajatele mugavaid graafilisi ja CLI-tööriistu. NĂ€iteks vĂ”imaldab meie sisearendus Confer mĂ”ne hiireklĂ”psuga rakendust Kubernetesesse vĂ€lja lasta, seadistada selle ressursid, vĂ”tmed vaultist jne. Varasemalt oli kasutusel Jenkins + Helm 2, kuid pidime arendama oma tööriista, et vĂ€listada kopeerimise ja kleepimise vajadus ning tuua tarkvaraarendusse ĂŒhtsust.

Ops'i meeskond ei kirjuta arendajate jaoks pipeline'e, kuid nad saavad anda nĂ”u kĂ”igis kĂŒsimustes nende kirjutamise osas (mĂ”nel on veel Helm 3).

DevOps

Mis puutub DevOps'i, siis nÀeme seda sellisena:

Dev meeskonnad kirjutavad koodi, deployivad seda lĂ€bi Confer dev -> qa/stage -> prod. Vastutus selle eest, et kood ei tarduks ega viskaks vigu, lasub Dev ja Ops tiimidel. PĂ€evasel ajal peab probleemide korral reageerima oma rakendusele esmajĂ€rjekorras Opsi deĆŸuurija ja Ă”htuti ning öösel peab deĆŸuuradmin (Ops) Ă€ratama deĆŸuurarendaja, kui ta on kindel, et probleem ei ole infrastruktuuris. KĂ”ik mÔÔdikud ja alertid monitoris tekivad automaatselt vĂ”i poolautomaatsetena.

Opsi vastutus algab hetkest, kui rakendus saadetakse tootmisse, kuid Devi vastutus ei lĂ”pe sellega — me teeme ĂŒhte asja ja oleme ĂŒhes paadis.

Arendajad konsulteerivad adminne, kui vajavad abi adminni mikroteenuse kirjutamisel (nĂ€iteks Go backend + HTML5), ning adminnid konsulteerivad arendajaid mis tahes infrastruktuuri vĂ”i k8s-i seotud kĂŒsimustes.

Muide, meil ei ole ĂŒldse monoliiti, ainult mikroteenused. Nende arv on hetkel tootmis-k8s klastris vahemikus 900 kuni 1000, kui mÔÔta arvu jĂ€rgi. deployments. Poodide arv varieerub 1700 ja 2000 vahel. Prod-klastris on hetkel umbes 2000 poodi.

Konkreetseid numbreid ma öelda ei saa, kuna jĂ€lgime tarbetuks osutunud mikroteenuseid ja eemaldame neid poolautomaatse reĆŸiimi abil. Tarbetute ĂŒksuste jĂ€lgimisel k8s aitab meid useless-operator, mis sÀÀstab suurel mÀÀral ressursse ja raha.

Ressursside haldamine

JĂ€lgimine

Suure klastrihalduse nurgakiviks on Ă”igesti ĂŒles ehitatud ja informatiivne jĂ€lgimine. Me ei ole veel leidnud universaalset lahendust, mis kataks 100% meie jĂ€lgimise soovidest, seega loome aeg-ajalt erinevaid kohandatud lahendusi selles keskkonnas.

  • Zabbix. Hea, vana monitorimine, mis on mĂ”eldud eelkĂ”ige infrastruktuuri ĂŒldise seisundi jĂ€lgimiseks. See ĂŒtleb meile, kui node sureb protsessori, mĂ€lu, ketaste, vĂ”rgu jne tĂ”ttu. Mitte midagi ĂŒlisuurt, kuid meil on ka eraldi DaemonSet agentidest, millega nĂ€iteks jĂ€lgime DNS-seisundit klastris: otsime coredns'i aeglustunud pods'e, kontrollime vĂ€liste hostide kĂ€tte saadavust. Tundub, et milleks selle pĂ€rast vaeva nĂ€ha, kuid suurte andmemahtude korral on see komponent tĂ”sine tĂ”rkekoht. Varasemalt olen juba kirjeldanud, kuidas ma vĂ”itlen klastris DNS-i jĂ”udlusprobleemidega.
  • Prometheus Operator. Erinevate eksportijate kogum annab suure ĂŒlevaate kogu klastrist. Edasi visualiseerime kĂ”ik selle suurelt armatuurlaudades Grafanas, ja teatiste jaoks kasutame alertmanager'i.

Veel ĂŒheks kasulikuks tööriistaks meie jaoks sai list-ingress. Kirjutasime selle pĂ€rast seda, kui olime paar korda kokku puutunud olukorraga, kus ĂŒks meeskond kattis teise meeskonna Ingressi enda teed pidi, mis pĂ”hjustas 50x vigu. NĂŒĂŒd kontrollivad arendajad enne tootmisesse ĂŒleviimist, et keegi ei jÀÀks kĂ”rvale, ja see on minu meeskonna jaoks hea tööriist Ingressi probleemide esialgseks diagnoosimiseks. Naljakas, et algselt kirjutati see administraatoritele ja see nĂ€gi vĂ€lja ĂŒsna „puine”, kuid pĂ€rast seda, kui tööriist meeldis arendusmeeskondadele, muutus see oluliselt ja enam ei nĂ€e vĂ€lja nagu „administraator tegi administraatoritele veebiliidese”. Peagi loobume sellest tööriistast ja sarnased olukorrad valideeritakse enne torujuhtme vĂ€ljalaskmist.

Meeskondade ressursid «Kubes»

Enne nÀidete juurde asumist tasub selgitada, kuidas meil toimub ressursside eraldamine mikroteenustena.

Selleks, et mĂ”ista, millised meeskonnad ja kui palju kasutavad oma ressursse (protsessor, mĂ€lu, kohalik SSD), eraldame iga meeskonna jaoks oma namespace Kubes on maksime vĂ”imalused protsessori, mĂ€lu ja ketta osas eelnevalt arutades meeskondade vajadusi. SeetĂ”ttu ei saa ĂŒks meeskond ĂŒldiselt blokeerida kogu klastrit, eraldades endale tuhandeid tuumasid ja tera byte mĂ€lu. Namespace'ide juurdepÀÀsud antakse vĂ€lja AD kaudu (kasutame RBAC-d). Namespace'id ja nende piirangud lisatakse GIT-repositorisse lĂ€bi pull-request'ide, pĂ€rast mida rakendatakse kĂ”ik automaatselt Ansible'i pipeline'i kaudu.

NĂ€ide ressursside eraldamisest meeskonnale:

namespaces:

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

Request’id ja limiidid

Kubes Request — see on garantiseeritud reservatsioonide arv pod (ĂŒks vĂ”i rohkem docker-konteinerit) klaster. Limit on mittegarantiseeritud maksimaalne vÀÀrtus. Sageli vĂ”ib nĂ€ha graafikutelt, kuidas mĂ”ni rĂŒhm seadis endale liiga palju request’e kĂ”igile oma rakendustele ja ei saa rakendust Kubesse juurutada, kuna nende namespace'i kĂ”ik request'id on juba "kulutatud".

Sellest olukorrast Ôige lahendus: vaadata tegelikku ressursi tarbimist ja vÔrrelda seda nÔutud kogusega (Request).

Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit
Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Ülalolevates ekraanipiltides on nĂ€ha, et „taotletud” (Requested) CPU-d kohandatakse tegeliku lĂ”imearvuga, samas kui Limits vĂ”ivad ĂŒletada tegelikku protsessorite lĂ”imearvu =)

NĂŒĂŒd vaatame pĂ”hjalikult ĂŒhte namespace'i (valisin namespace kube-system — sĂŒsteeminamespace Kuberi komponentidele) ja vaatame, kuidas vĂ”rreldakse tegelikult kasutatud protsessoriaega ja mĂ€lu taotletuga:

Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

On ilmne, et sĂŒsteemsete teenuste jaoks on reserveeritud palju rohkem mĂ€lu ja CPU-d kui tegelikult kasutatakse. Kube-systemi puhul on see Ă”igustatud: on olnud aegu, kus nginx ingress controller vĂ”i nodelocaldns on tipptundidel CPU-le kinni jÀÀnud ja kasutanud vĂ€ga palju RAM-i, seega on siin selline varu Ă”igustatud. Pealegi ei saa me toetuda viimase 3 tunni graafikutele: soovitav on nĂ€ha ajaloolisi mÔÔdikuid pikema aja jooksul.

On vĂ€lja töötatud soovituste sĂŒsteem. NĂ€iteks siin on nĂ€ha, milliseid ressursse tasuks „piiride” (ĂŒlemine lubatud tase) tĂ”stmiseks, et vĂ€ltida „trotlingut” (throttling): hetke, kui juba on kulunud CPU vĂ”i mĂ€lu ettenĂ€htud ajakvotal ja oodatakse, kuni nad „lahendatakse”:

Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Siin on podid, mida tasuks natuke piirata:

Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Umbes throttling + ressursside jĂ€lgimine on laiem teema, mille kohta vĂ”iks kirjutada mitmeid artikleid, seega kĂŒsige julgelt kommentaarides. LĂŒhidalt ĂŒtlen, et selliste metrikate automatiseerimine on keeruline ĂŒlesanne, mis nĂ”uab palju aega ja oskusi, sealhulgas „akna“ funktsioone ja „CTE“ Prometheus / VictoriaMetrics (need terminid on jutumĂ€rkides, kuna PromQL-s ei ole praktiliselt midagi sarnast ja tuleb kirjutada hirmuĂ€ratavaid pĂ€ringuid, mis ulatuvad mitme ekraani pikkuseks ja optimeerida neid).

LĂ”puks on arendajatel tööriistad oma namespaces'i jĂ€lgimiseks „Kube'is“ ning nad saavad ise valida, kus ja millal milliste rakenduste puhul ressursse „lĂ”igata“, ja millistele podidele vĂ”ib kogu CPU ööseks ĂŒle anda.

Metoodikad

Praegu ettevĂ”ttes on moes, jĂ€rgime DevOps- ja SRE-praktikaid. Kui ettevĂ”ttes on 1000 mikroteenust, umbes 350 arendajat ja 15 administraatorit kogu infrastruktuuri jaoks, tuleb „olla moes“: nende „buzzwordide“ taga peitub terav vajadus kĂ”ike automatiseerida ja administraatorid ei tohi olla protsesside pudelikael.

Opsina me, pakume arendajatele erinevaid mÔÔdikuid ja juhtpaneele, mis on seotud teenuste vastuse kiirus ja tÔrgetega.

Kasutame jĂ€rgmisi metoodikaid: RED, USE ja Kuldse Signaalid, kombineerides need kokku. PĂŒĂŒame vĂ€hendada juhtpaneelide arvu nii, et ĂŒhest pilgust oleks selge, milline teenus on hetkel halvenemas (nĂ€iteks vastuse koodid sekundis, vastuse aeg 99. protsentiili jĂ€rgi) jne. Kui vajame uusi mÔÔdikuid ĂŒldistele juhtpaneelidele, siis joonistame need kohe ja lisame.

Ma ei ole kuu aega graafikuid joonistanud. See on ilmselt hea mÀrk: see tÀhendab, et enamik "soove" on juba ellu viidud. Oli aegu, kus ma vÀhemalt kord pÀevas olen nÀinud uue graafiku joonistamist.

Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Saavutatud tulemus on vÀÀrtuslik, kuna nĂŒĂŒd kĂ€ivad arendajad ĂŒsna harva administraatorite juures kĂŒsimustega "kust vaadata mingit mÔÔdikut".

Rakendamine Teenuste Mesh ei ole kaugel ja peaks kĂ”igile elu oluliselt lihtsamaks tegema, Tools'i kolleegid on juba lĂ€hedal «terve inimese Istio» rakendamisele: iga HTTP(s) pĂ€ringu elutsĂŒkkel on nĂ€htav jĂ€lgimises ja alati saab aru, «millisel etapil kĂ”ik katki lĂ€ks» teenuste vahelisel (ja mitte ainult) suhtlemisel. Liituge DomKliki uudiskirjaga. =)

Kubernetes'i infrastruktuuri tugi

Ajalooliselt on meil kasutuses patcheeritud versioon Kubespray — Ansible'i roll Kubernetes'i juurutamiseks, laiendamiseks ja uuendamiseks. Mingil hetkel eemaldati pĂ”hiharust tugi non-kubeadm installatsioonidele ning ĂŒlemineku protsessi kubeadm'e peale ei pakutud vĂ€lja. LĂ”ppkokkuvĂ”ttes tegi ettevĂ”te Southbridge oma fork'i (kubeadm toe ja kiire kriitiliste probleemide lahendamisega).

KÔikide k8s klastrite uuendamisprotsess vÀlja nÀeb selline:

  • VĂ”tame Kubespray Southbridge'ist, kontrollime meie haru vastu, mergime.
  • Toome uuenduse vĂ€lja Stress- «Kast».
  • Toome uuenduse vĂ€lja ĂŒhele nodile (Ansible'is on see «serial: 1») igaĂŒhele Dev- «Kast».
  • Uuendame Prod laupĂ€eva Ă”htul ĂŒhele nodile.

Tulevikus on plaanid asendada Kubespray millegagi kiiremaga ja minna ĂŒle kubeadm'ile..

Kokku on meil kolm „Kubi”: Stress, Dev ja Prod. Plaanime veel ĂŒhe kĂ€ivitada (kuum varu) Prod-„Kubi” teises andmekeskuses. Stress ja Dev Elame „virtuaalides” (oVirt Stress jaoks ja VMWare cloud Dev jaoks). Prod-„Kubi” elab „paljas rauas”: need on ĂŒhesugused nodid, millel on 32 CPU lĂ”ime, 64-128 GB mĂ€lu ja 300 GB SSD RAID 10 — kokku on neid 50. Kolm „Ôhukest” nodi on reserveeritud „meistritele” Prod-„Kubides”: 16 GB mĂ€lu, 12 CPU lĂ”ime.

MĂŒĂŒgi puhul eelistame kasutada „paljast rauast” ja vĂ€ltida liigseid kihte nagu OpenStack: me ei vaja „mĂŒrarikkaid naabreid” ja CPU aeg varastama. Ja keerukus haldamine suureneb umbes kaks korda juhul, kui kasutatakse OpenStacki enda majas.

CI/CD „Kubi” ja teiste infrastruktuuri komponentide jaoks kasutame eraldi GIT-serverit, Helm 3 (ĂŒleminek Helm 2-lt oli ĂŒsna valus, kuid oleme vĂ€ga rahul valikuga aatomiline), Jenkins, Ansible ja Docker. Armastame feature-oksi ja juurutamist erinevatesse keskkondadesse ĂŒhest repost.

KokkuvÔte

Kubernetes Domklik'is: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit
Nii paistab, ĂŒldiselt, ettevĂ”ttes DomKlik, DevOpsi protsess tööinseneri vaatepunktist. Artikkel osutus vĂ€hem tehniliseks kui ootasin: seega jĂ€lgige DomKli uudiseid Habrilt: tuleb rohkem „hĂ€das” artikleid Kubernetesest ja mitte ainult.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster