Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Minu nimi on Viktor Yagofarov ja ma olen tehnoloogia juht, kes arendab Kubernetes platvormi ettevĂ”ttes DomClick, takistuse Ops meeskonnas. Soovin rÀÀkida meie Dev <-> Ops protsesside struktuurist, ĂŒhtedest Venemaa suurimatest k8s klastritest ja ka meie meeskonna rakendatud DevOps/SRE praktikast.

Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Ops meeskond

Ops meeskonnas töötab hetkel 15 inimest. Kolm neist vastutavad kontori eest, kaks töötavad teises ajavööndis ja on kergesti kĂ€ttesaadavad, sealhulgas öösel. Seega on alati keegi Opsis monitori ees ja valmis reageerima mis tahes keerukusega juhtumile. Öövahtimisi meil ei ole, mis kaitseb meie vaimu ja vĂ”imaldab kĂ”igil piisavalt und saada ning aega veeta mitte ainult arvuti taga.

Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

KĂ”igil on erinevad oskused: vĂ”rguhaldurid, DBA-d, ELK stack spetsialistid, Kubernetes administraatorid/arendajad, jĂ€lgimise, virtualiseerimise ja riistvara spetsialistid jne. Ühendab meid see, et igaĂŒhel on vĂ”imalus kellegi teise rolli mingil mÀÀral tĂ€ita: nĂ€iteks uute sĂ”lmede lisamine k8s klastrisse, PostgreSQL uuendamine, CI/CD + Ansible torujuhtme kirjutamine, millegi automatiseerimine Pythonis/Bashis/Go-s, riistvara ĂŒhendamine andmekeskuses. Tugevad oskused ĂŒhes valdkonnas ei takista suunamuutust ja arengut teises valdkonnas. NĂ€iteks astusin ettevĂ”ttesse sisse PostgreSQL spetsialistina, kuid nĂŒĂŒd on minu peamine vastutusala Kubernetes klastrid. Meeskonnas on iga kasv ainult teretulnud ning ĂŒhtekuuluvustunne on tugev.

Muide, me otsime töötajaid. Kandidaatide nĂ”udmised on ĂŒsna standardsed. Isiklikult on mulle oluline, et inimene sobituks meeskonda, oleks konfliktivaba, kuid oskaks ka oma seisukohti kaitsta, sooviks areneda ja ei kardaks proovida midagi uut, pakkuda oma ideid. Samuti on vajalikud oskused skriptikeelte programmeerimises, Linuxi pĂ”hialuste tundmine ja inglise keele oskus. Inglise keelt on vaja lihtsalt selleks, et inimene saaks vajadusel probleemide lahendusi kiiremini googeldada, mitte kulutada sellele 10 minutit. SĂŒgava Linuxi tundmisega spetsialistidega on praegu vĂ€ga keeruline: naljakas, kuid kaks kolmandikku kandidaatidest ei oska vastata kĂŒsimusele „Mis on Load Average? Kuidas see koosneb?”, ja kĂŒsimust „Kuidas koguda core dump C-programmist?” peavad nad millegiks ĂŒleloomulikuks
 vĂ”i dinosaurusteks. Sellega tuleb leppida, kuna tavaliselt on inimeste muud oskused vĂ€ga arenenud ja „Linuxit“ Ă”petame me ise. KĂŒsimusele „miks on see kĂ”ik vajalik DevOps insenerile tĂ€napĂ€eva pilve maailmas“ peame vastuse jĂ€tma artikli piiresse, kuid kolme sĂ”naga: kĂ”ik see on vajalik.

Tööriistade meeskond

Automatiseerimisel mĂ€ngib olulist rolli Tööriistade meeskond. Nende peamine eesmĂ€rk on luua mugavaid graafilisi ja CLI tööriistu arendajatele. NĂ€iteks meie sisearendus Confer vĂ”imaldab tĂ”eliselt paar hiireklĂ”psu abil rakendust Kubernetesesse vĂ€lja saata, seadistada ressursid, vĂ”tmed vaultist jne. Varem kasutati Jenkins + Helm 2, kuid tuli arendada oma tööriist, et vĂ€ltida kopeerimist ja kleepimist ning tuua tarkvara elutsĂŒklisse ĂŒhtlus.

Ops meeskond ei kirjuta arendajate jaoks torusid, kuid vĂ”ib anda nĂ”u kĂ”igis nende kirjutamise kĂŒsimustes (osadel on veel jÀÀnud Helm 3).

DevOps

Mis puudutab DevOps’i, siis nĂ€eme seda sellisena:

Dev meeskonnad kirjutavad koodi ja saadavad selle Conferiga dev -> qa/stage -> prod. Vastutus, et kood ei aeglustuks ja ei viskaks vigu, lasub Dev ja Ops meeskondadel. PĂ€eval peab oma rakenduse probleemi puhul reageerima peamiselt Ops’i vaht, aga Ă”htul ja öisel ajal peab vahtadmin (Ops) Ă€ratama vahtarendaja, kui ta on kindel, et probleem ei ole infrastruktuuris. KĂ”ik mÔÔdikud ja hĂ€ired tulevad jĂ€lgimisest automaatselt vĂ”i poolautomaatselt.

Opsi vastutus algab rakenduse kasutuselevĂ”tust, kuid Dev'i vastutus ei lĂ”ppe sellega — me teeme sama asja ja oleme samas paadis.

Arendajad nĂ”ustavad administraatoreid, kui vajalik on abi administraatori mikroteenuse kirjutamisel (nĂ€iteks Go backend + HTML5), ja administraatorid nĂ”ustavad arendajaid iga infrastruktuuri vĂ”i k8s-iga seotud kĂŒsimuses.

Üldiselt pole meil monoliiti, vaid ainult mikroteenuseid. Nende arv kĂ”igub praegu 900 ja 1000 vahel prod k8s-klasteres, sĂ”ltuvalt arvust. deploymentsPod'i arv kĂ”igub 1700 ja 2000 vahel. Pod'e on praegu umbes 2000 prod-klastri sees.

Exact arve öelda ei saa, kuna jĂ€lgime tarbetuid mikroteenuseid ja eemaldame neid poolautomaatse sĂŒsteemiga. Tarbetute ĂŒksuste jĂ€lgimist k8s-is aitab meil teha useless-operator, mis sÀÀstab suurepĂ€raselt ressursse ja raha.

Ressursside haldamine

JĂ€lgimine

Suurte klastrite haldamise oluline alus on nĂ”uetekohaselt ĂŒles ehitatud ja informatiivne jĂ€lgimine. Me ei ole veel leidnud universaalset lahendust, mis kataks 100% kĂ”igist jĂ€lgimise soove, seetĂ”ttu teeme aeg-ajalt erinevaid kohandatud lahendusi selles valdkonnas.

  • Zabbix. Vanakooli jĂ€lgimine, mis on peamiselt mĂ”eldud infrastruktuuri ĂŒldise oleku jĂ€lgimiseks. See teatab meile, kui sĂ”lm hukkub protsessori, mĂ€lu, ketaste, vĂ”rgu jne osas. Midagi ĂŒlemÀÀra erakordset, kuid meil on ka eraldi DaemonSet agendiga, millega jĂ€lgime nĂ€iteks klastris DNS-i seisundit: otsime coredns'i ummikutega pod'e, kontrollime vĂ€listest hostidest juurdepÀÀsu. Tundub, et miks selle ĂŒle ĂŒldse muretsemine, kuid suurte andmehulkade korral on see komponent tĂ”sine tĂ”rkepunkt. Olen juba varem kirjeldanud, kuidas ma vĂ”itlen DNS-i toimivuse nimel klastris.
  • Prometheus Operator. Erinevate eksportijate kogum annab suure ĂŒlevaate kĂ”igist klastrikomponentidest. Edasi visualiseerime kĂ”ik selle suurtes armatuurlaudades Grafanas, ja teavitamiseks kasutame alertmanagerit.

Teine meie jaoks kasulik tööriist on list-ingress. Oleme selle kirjutanud pĂ€rast mitmeid kordi, mil ĂŒks meeskond kattis oma teed teise meeskonna Ingress'i, mis pĂ”hjustas 50x vigu. Praegu kontrollivad arendajad enne tootmisse viimist, et keegi ei kannataks, ja minu jaoks on see hea tööriist Ingress'ide probleemide esmaseks diagnoosimiseks. Naljakas, et see kirjutati esmakordselt administraatoritele ja nĂ€gi vĂ€lja ĂŒsna "jĂ€medalt", kuid pĂ€rast seda, kui tööriist armus arendusmeeskondadesse, on see tugevalt muutunud ja nĂ€eb vĂ€lja nagu "administraator tegi veebiliidese administraatoritele". Peagi loobume sellest tööriistast ja sarnased olukorrad valideeritakse veel enne torujuhtme vĂ€ljatĂ”stmist.

Meeskondade ressursid 'Kubes'

Enne nĂ€idete vaatamist on mĂ”istlik selgitada, kuidas meie sĂŒsteem ressursi eraldamist töötajaile. Mikroteenused.

Et aru saada, millised meeskonnad ja kui palju nad oma ressursse kasutavad ressursid (protsessor, mĂ€lu, kohalik SSD), eraldame igale meeskonnale oma namespace Kubes ja piirame selle maksimaalseid vĂ”imalusi protsessori, mĂ€lu ja ketta osas, eelnevalt arutades meeskondade vajadusi. SeetĂ”ttu ei blokeeri ĂŒkski meeskond tavaliselt kogu klastrit, eraldades endale tuhandeid tuumasid ja terabaiti mĂ€lu. Ning ligipÀÀsud namespace'idele antakse vĂ€lja AD (me kasutame RBAC). Namespace'id ja nende piirangud lisatakse GIT-reposse puuloomise kaudu, ning seejĂ€rel automatiseeritakse kĂ”ik Ansible'i torujuhtmega.

Ressursi eraldamise nÀide meeskonnale:

namespaces:

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

PĂ€ringud ja piirangud

Kubes PĂ€ring — see on garantii, et ressursside kogus on eraldatud pod (ĂŒks vĂ”i mitu Docker'i konteinerit) klastris. Piirang on see, mis ei ole garanteeritud maksimum. Sageli vĂ”ib graafikutelt nĂ€ha, kuidas mĂ”ni meeskond on seadnud endale liiga palju pĂ€ringuid kĂ”igi oma rakenduste jaoks ja ei saa rakendust 'Kubes' juurutada, kuna nende namespace'is on kĂ”ik pĂ€ringud juba "kulutatud".

Õige vĂ€ljapÀÀs sellisest olukorrast: vaadata tegelikku ressursikasutust ja vĂ”rrelda seda kĂŒsitud kogusega (PĂ€ring).

Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit
Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Ülaltoodud ekraanipiltidel on nĂ€ha, et "kĂŒsimustikud" (Requested) protsessorid lĂ€hedane reaalsele lĂ”ime arvule, samas kui Piirangud vĂ”ivad ĂŒletada reaalseid keskprotsessori lĂ”ime arve =)

NĂŒĂŒd vaatleme ĂŒksikasjalikult mĂ”nda namespace'i (valisin namespace kube-system — sĂŒsteemi namespace'i "Kubi" komponentide jaoks) ja vaatame, kuidas suhe tegelikult kasutatud protsessorite ja mĂ€lu ning kĂŒsitud vÀÀrtuste vahel on:

Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

On ilmne, et sĂŒsteemiteenuste jaoks on reserveeritud palju rohkem mĂ€lu ja CPU-d, kui tegelikult kasutatakse. Kube-systemi puhul on see pĂ”hjendatud: on juhtunud, et nginx ingress controller vĂ”i nodelocaldns on tipphetkel jĂ”udnud CPU piirini ja kasutanud vĂ€ga palju RAM-i, seega on siin selline varu Ă”igustatud. Lisaks ei saa me tugineda viimase kolme tunni graafikutele: oleks soovitav nĂ€ha ajaloolisi mÔÔdikuid pikema aja jooksul.

On vĂ€lja töötatud "soovituste" sĂŒsteem. NĂ€iteks on siin nĂ€ha, milliseid ressursse oleks mĂ”istlik "piirata" (ĂŒlemine lubatud tase), et vĂ€ltida "trotling'ut": hetke, mil juba kulutatud CPU vĂ”i mĂ€lu antud ajakvandi jooksul ning oodata, kuni see "kĂŒlmutatakse":

Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Ja siin on podid, millel oleks kasulik oma apetiti mÔÔta:

Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

KĂŒsimus trotling + ressursimonitoringu kohta saab kirjutada mitmeid artikleid, seega kĂŒsige kĂŒsimusi kommentaarides. Paar sĂ”na vĂ”ib öelda, et selliste mÔÔdikute automatiseerimise ĂŒlesanne on ĂŒsna keeruline ja nĂ”uab palju aega ja akrobaatikat "aken" funktsioonide ja "CTE" Prometheus / VictoriaMetrics abil (need terminid on siin jutumĂ€rkides, kuna PromQL-is pole peaaegu midagi sarnast ning tuleb koostada hirmutavaid pĂ€ringuid, mis katavad mitu ekraani teksti, ja tegeleda nende optimeerimisega).

LÔppkokkuvÔttes on arendajatel tööriistad oma namespace'ide jÀlgimiseks "Kubis", ja nad saavad ise valida, kus ja millal milliste rakenduste ressursse "lÔigata" ning millistele podidele saab kogu CPU öö jooksul anda.

Metodoloogiad

EttevĂ”ttes, nagu nĂŒĂŒd moes, jĂ€rgime DevOps- ja SRE-praktikaid. Kui ettevĂ”ttes on 1000 mikrosĂŒsteemi, umbes 350 arendajat ja 15 administraatorit kogu infrastruktuuri jaoks, peab olema "moes": kĂ”ikide nende "buzzwordide" taga peitub Ă€ge vajadus automaatika jĂ€rele, ja administraatorid ei tohi olla pudelikael protsessides.

Opsina anname arendajatele erinevaid mÔÔdikuid ja juhtpaneele, mis on seotud teenuste vastamise kiirus ja nende vead.

Kasutame selliseid metodoloogiaid nagu: RED, USE ja Golden Signals, kombineerides need koos. PĂŒĂŒame vĂ€hendada armatuurlaudade arvu nii, et ĂŒhest pilgust oleks selge, milline teenus praegu halveneb (nĂ€iteks vastuskoodide hulk sekundis, 99. persenti vastamise aeg) jne. Niipea kui vajame uusi mÔÔdikuid ĂŒhiste armatuurlaudade jaoks, viime need kohe joonistesse ja lisame.

Ma ei ole graafikuid joonistanud juba kuu aega. Arvatavasti on see hea mÀrk: see tÀhendab, et enamik "soove" on juba ellu viidud. Juhtus, et nÀdalas joonistasin vÀhemalt kord pÀevas mÔne uue graafiku.

Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit

Saavutatud tulemus on vÀÀrtuslik, kuna nĂŒĂŒd esitlevad arendajad ĂŒsna harva administratsioonile kĂŒsimusi "kus vaadata mĂ”nda mÔÔdikut".

Rakendamine Service Mesh ei ole kaugel ja peaks kĂ”igile elu oluliselt lihtsustama, kolleegid Toolsist on juba lĂ€hedal "terve inimese Istio" rakendamisele: iga HTTP(s) pĂ€ringu elutsĂŒkkel on jĂ€lgimise kaudu nĂ€htav ning alati saab aru, "millises etapis kĂ”ik lĂ€ks valesti" teenustevahelises (ja mitte ainult) suhtluses. Liituge DomClicki ettevĂ”tte uudiskirjaga. =)

Kubernetes infrastruktuuri tugi

Ajalooliselt oleme kasutanud patĆĄitud versiooni Kubespray — Ansible'i roll Kubernetes'i kĂ€ivitamiseks, laiendamiseks ja vĂ€rskendamiseks. Ühel hetkel eemaldati pĂ”hivoolust tugi non-kubeadm installatsioonidele, ja protsessi ĂŒleminekut kubeadm-ile ei pakutud. LĂ”puks tegi ettevĂ”te Southbridge oma kĂ”rgendatud versiooni (kubeadm toe ja kiire kriitiliste probleemide lahendusega).

Kogu k8s klastrite vÀrskendamisprotsess nÀeb vÀlja selline:

  • VĂ”tame Kubespray Southbridge'ist, kontrollime meie haruga, sulandame.
  • VĂ€ljastame vĂ€rskenduse Stress-"Kuppel".
  • VĂ€ljastame vĂ€rskenduse ĂŒhe nodi kaupa (Ansible'is on see "serial: 1") Dev-"Kuppel".
  • VĂ€rskendame Prod laupĂ€eva Ă”htul ĂŒhe nodi kaupa.

Tulevikus on plaanis asendada Kubespray millegi kiirema vastu ja liikuda ĂŒle kubeadm.

Kokku on meil kolm "Kuppel": Stress, Dev ja Prod. Plaanime kĂ€ivitada veel ĂŒhe (hot standby) Prod-"Kuppel" teises andmekeskuses. Stress ja Dev elavad "virtuaalmasinates" (oVirt Stressi jaoks ja VMWare cloud Dev'i jaoks). Prod-"Kuppel" elab "alumisel raual" (bare metal): need on samasugused nodid, igaĂŒhes 32 CPU lĂ”nga, 64-128 GB mĂ€lu ja 300 GB SSD RAID 10 — kokku on neid 50. Kolm "pehmed" nodi on mÀÀratud "meister" Prod-"Kuppel": 16 GB mĂ€lu, 12 CPU lĂ”nga.

MĂŒĂŒgis eelistame kasutada "alust rauda" ja vĂ€ltida liigseid kihtide, nagu OpenStack: meil ei ole vaja "mĂŒrarikkaid naabreid" ja CPU steal timeJa keerukus haldamine suureneb umbes kahekordselt in-house OpenStacki puhul.

CI/CD „Kube” ja teiste infrastruktuurikomponentide jaoks kasutame eraldi GIT-serverit, Helm 3 (ĂŒleminek Helm 2-st oli ĂŒsna vaevaline, kuid oleme vĂ€ga rahul vĂ”imalusega aatomiline), Jenkins, Ansible ja Docker. Me armastame feature-harusid ja juurutamist erinevatesse keskkondadesse ĂŒhest hoidlast.

KokkuvÔte

Kubernetes DomClickis: kuidas rahulikult magada, hallates 1000 mikroteenuse klastrit
Nii nĂ€eb DomClickis inseneri vaatenurgast DevOpsi protsess vĂ€lja. Artikkel on vĂ€hem tehniline, kui ma ootasin: seega, jĂ€lgige DomClicki uudiseid Habr's, tulevad rohkem „hardcore” artiklid Kubernetesest ja muust.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster