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.

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.

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 , 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 , 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 . 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).


Ă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:

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â:

Siin on podid, mida tasuks natuke piirata:

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: , ja , 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.


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

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
