Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi

Mi chjamu Viktor Yagofarov, è aghju sviluppatu a piattaforma Kubernetes in DomClick cum'è manager di sviluppu tecnicu in a squadra Ops (operazioni). Vogliu parlà di a struttura di i nostri prucessi Dev <-> Ops, di e caratteristiche di u funziunamentu di unu di i più grandi clusters k8s in Russia, è ancu di e pratiche DevOps / SRE chì a nostra squadra usa.

Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi

Ops di squadra

A squadra Ops hà attualmente 15 persone. Trè di elli sò rispunsevuli di l'uffiziu, dui travaglianu in un fusu orariu diversu è sò dispunibili, ancu di notte. Cusì, qualchissia da Ops hè sempre à u monitor è hè pronta à risponde à un incidente di ogni cumplessità. Ùn avemu micca turni di notte, chì cunserva a nostra mentalità è dà à tutti l'uppurtunità di dorme abbastanza è di passà u tempu di piacè micca solu à l'urdinatore.

Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi

Tutti anu diverse cumpetenze: networkers, DBA, specialisti di stack ELK, amministratori / sviluppatori Kubernetes, monitoraghju, virtualizazione, specialisti di hardware, etc. Una cosa unisce tutti - ognunu pò rimpiazzà ognunu di noi in una certa misura: per esempiu, introduci novi nodi in u cluster k8s, aghjurnà PostgreSQL, scrive un pipeline CI / CD + Ansible, automatizà qualcosa in Python / Bash / Go, cunnette un pezzu. di hardware à DPC. E cumpetenze forti in ogni zona ùn interferiscenu micca cù cambià a direzzione di l'attività è cumincianu à pompà in una altra zona. Per esempiu, aghju avutu un travagliu in una cumpagnia cum'è specialista PostgreSQL, è avà a mo principale area di rispunsabilità hè Kubernetes clusters. In a squadra, ogni crescita hè solu benvenuta è un sensu di spalla hè assai sviluppatu.

Per via, cacciamu. I requisiti per i candidati sò abbastanza standard. Per mè personalmente, hè impurtante chì una persona si mette in a squadra, ùn hè micca cunflittu, ma ancu sà cumu difende u so puntu di vista, vole sviluppà è ùn hà micca paura di fà qualcosa di novu, per offre e so idee. Inoltre, e cumpetenze di prugrammazione in lingue di scrittura, a cunniscenza di i principii di Linux è l'inglese sò richieste. L'inglese hè necessariu solu per chì una persona in u casu di un fakap pò google a suluzione à u prublema in 10 seconde, è micca in 10 minuti. Cù specialisti cun cunniscenza prufonda di Linux, hè avà assai difficiule: divertente, ma dui di trè candidati ùn ponu micca risponde à a quistione "Chì hè Load Average? Di chì hè custituitu? ", È a quistione "Cumu cullà un core dump da un prugramma sish" hè cunsideratu qualcosa di u mondu di i superumani ... o dinosauri. Avemu da mette cun questu, postu chì di solitu a ghjente hà sviluppatu assai altre cumpetenze, è insegneremu Linux. A risposta à a quistione "perchè un ingegnere DevOps hà bisognu di sapè tuttu questu in u mondu mudernu di i nuvuli" duverà esse lasciatu fora di u scopu di l'articulu, ma in trè parolle: tuttu questu hè necessariu.

Strumenta cumandante

A squadra di Tools hà un rolu significativu in l'automatizazione. U so compitu principale hè di creà strumenti grafichi è CLI convenienti per i sviluppatori. Per esempiu, u nostru sviluppu internu di Confer vi permette di sparghje una applicazione à Kubernetes cù uni pochi di clicchi di u mouse, cunfigurà e so risorse, e chjave da u vault, etc. Ci era ancu Jenkins + Helm 2, ma aghju avutu à sviluppà u mo propiu strumentu per eliminà copia-incolla è uniformità à u ciclu di vita di u software.

U squadra Ops ùn scrive micca pipeline per i sviluppatori, ma pò cunsiglià nantu à qualsiasi prublemi in scrittura (alcuni anu ancu Helm 3).

DevOps

In quantu à DevOps, vedemu cusì:

E squadre di sviluppu scrivenu codice, stendete via Confer to dev -> qa/stage -> prod. Hè a rispunsabilità di e squadre di Dev è Ops per assicurà chì u codice ùn rallenta micca è ùn tira micca errori. In u ghjornu, l'ufficiale di u duvere da a squadra Ops duverà risponde à un incidente cù a so applicazione, è in a sera è a notte, l'amministratore di duty (Ops) deve sveglià u sviluppatore in turnu s'ellu sapi sicuru chì u prublema ùn hè micca. in l'infrastruttura. Tutte e metriche è alerti in u monitoraghju appariscenu automaticamente o semi-automaticamente.

L'area di rispunsabilità di Ops principia da u mumentu chì l'applicazione hè sparta à a produzzione, ma a rispunsabilità di Dev ùn finisce micca quì - facemu una cosa è simu in a stessa barca.

I sviluppatori cunsiglianu l'amministratori s'ellu anu bisognu di aiutu à scrive un microserviziu di amministratore (per esempiu, Go backend + HTML5), è l'amministratori cunsiglianu i sviluppatori nantu à qualsiasi infrastruttura o questioni relative à k8s.

Per via, ùn avemu micca un monolitu in tuttu, solu microservizii. U so numeru finu à avà fluttua trà 900 è 1000 in u cluster prod k8s, se misuratu da u numeru. dispiegazioni. U numaru di baccelli fluttua trà 1700 è 2000. I baccelli in u cluster prod sò oghji circa 2000.

Ùn possu micca dà numeri esatti, postu chì monitoremu i microservizi innecessarii è tagliate in modu semi-automaticu. Mantene a traccia di entità innecessarii in k8s ci aiuta operatore inutilechì risparmia risorse è soldi.

Gestione di risorse

Monitoramentu

U monitoraghju custruitu cumpetente è informativu diventa a basa di u funziunamentu di un grande cluster. Ùn avemu micca ancu trovu una suluzione universale chì copre u 100% di tutti i bisogni di monitoraghju, per quessa, rivetemu periodicamente diverse soluzioni persunalizate in questu ambiente.

  • Zabbix. Un bon vechju monitoraghju, chì hè pensatu principarmenti per monitorà u statu generale di l'infrastruttura. Ci dice quandu un node mori da u processatore, a memoria, i dischi, a rete, è cusì. Nunda di soprannaturale, ma avemu ancu un DaemonSet separatu di agenti, cù l'aiutu di quale, per esempiu, monitoremu u statu DNS in u cluster: cerchemu stupidi coredns pods, verificate a dispunibilità di l'ospiti esterni. Sembra chì per quessa s'impegna per quessa, ma nantu à grandi volumi di trafficu stu cumpunente hè un puntu seriu di fallimentu. Prima aghju avutu descrittuquantu luttatu cù u rendiment DNS in u cluster.
  • Operatore Prometheus. Un inseme di diversi esportatori dà una grande panoramica di tutti i cumpunenti di u cluster. In seguitu, visualizemu tuttu questu nantu à grandi dashboards in Grafana, è utilizate alertmanager per notificazioni.

Un altru strumentu utile per noi hè list-ingress. L'avemu scrittu dopu parechje volte chì avemu scontru una situazione induve una squadra si sovrapponeva l'Ingressu di l'altru squadra cù i so percorsi, chì hà causatu errori 50x. Avà, prima di implementà à a pruduzzione, i sviluppatori verificanu chì ùn feranu micca à nimu, è per u mo squadra questu hè un bonu strumentu per u diagnosticu iniziale di prublemi cù Ingresses. Hè curiosu chì in prima era scrittu per l'amministratori è pareva piuttostu "goffo", ma dopu chì i squadre di sviluppu si sò innamurati di l'uttellu, hà cambiatu assai è cuminciò à ùn pare micca "l'amministratore hà fattu una faccia web per l'amministratori". . Prestu avemu da abbandunà stu strumentu è tali situazioni seranu validati ancu prima chì u pipeline hè spartu.

Risorse di squadra in "Cube"

Prima di prucede cù l'esempii, vale a pena spiegà cumu avemu l'allocazione di risorse microservices.

Per capisce chì squadre è in quale quantità usanu i so risorse (prucessore, memoria, SSD locale), assignemu u nostru propiu namespace in u "Cube" è limità a so capacità massima in quantu à u processatore, a memoria è u discu, avè discututu prima i bisogni di e squadre. In cunsiquenza, un cumandamentu, in u casu generale, ùn bluccarà micca tuttu u cluster per a implementazione, allughjendu millaie di core è terabytes di memoria à sè stessu. L'accessi à u spaziu di nomi sò emessi per AD (utilizamu RBAC). I namespaces è i so limiti sò aghjuntu via una dumanda di pull à u repository GIT, è dopu tuttu hè automaticamente sbulicatu via u pipeline Ansible.

Un esempiu di allocazione di risorse per squadra:

namespaces:

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

Richieste è limiti

cubitu" Demande hè u numeru di risorsi riservati garantiti sottu pod (unu o più cuntenituri docker) in un cluster. U limitu hè un massimu micca garantitu. Pudete spessu vede nantu à i grafici cumu qualchì squadra hà stabilitu troppu dumande per tutte e so applicazioni è ùn pò micca implementà l'applicazione à u "Cube", postu chì sottu à u so spaziu di nome tutte e dumande sò digià "spent".

A manera curretta di sta situazione hè di guardà u cunsumu di risorsa attuale è paragunà cù a quantità dumandata (Richiesta).

Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi
Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi

I screenshots sopra mostranu chì i CPU "richiesti" (richiesti) sò selezziunati à u numeru reale di fili, è i Limiti ponu superà u numeru reale di filamenti CPU =)

Avà fighjemu un sguardu più vicinu à un spaziu di nomi (aghju sceltu u namespace kube-system - u namespace di u sistema per i cumpunenti di u "Cube" stessu) è vede u rapportu di u tempu di u processatore è di a memoria veramente utilizatu à quellu dumandatu:

Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi

Hè ovvi chì ci hè assai più memoria è CPU riservata per i servizii di u sistema di ciò chì hè veramente utilizatu. In u casu di u sistema kube, questu hè ghjustificatu: hè accadutu chì u controller d'ingress nginx o nodelocaldns à u piccu riposu nantu à u CPU è hà manghjatu assai RAM, cusì quì un tali marghjenu hè ghjustificatu. Inoltre, ùn pudemu micca s'appoghjanu nantu à i grafici per l'ultime 3 ore: hè desideratu per vede metriche storichi per un grande periodu di tempu.

Un sistema di "raccomandazioni" hè statu sviluppatu. Per esempiu, quì pudete vede quale risorse saria megliu di elevà i "limiti" (a barra superiore permessa) per chì "throttling" ùn si faci micca: u mumentu quandu u pod hà digià passatu u CPU o memoria per u quantu di tempu attribuitu. è aspetta finu à chì serà "scongelatu":

Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi

E quì sò i baccelli chì duveranu moderà i so appetiti:

Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi

nantu strottu + risorse di monitoraghju, pudete scrive più di un articulu, cusì fate dumande in i cumenti. In uni pochi di parolle, possu dì chì u compitu di l'automatizazione di tali metriche hè assai difficiule è richiede assai tempu è attu di equilibriu cù funzioni "finestra" è "CTE" Prometheus / VictoriaMetrics (sti termini sò in virgolette, postu chì ci hè quasi nunda cum'è questu in PromQL, è avete da scherma e dumande spaventose in parechje schermi di testu è ottimisate).

In u risultatu, i sviluppatori anu arnesi per monitorà i so spazii di nomi in u "Cube", è sò capaci di sceglie induve è à quale tempu chì l'applicazioni ponu "tagliate" risorse, è chì pods ponu esse dati u CPU sanu tutta a notte.

Metodologies

In cumpagnia cum'è avà moda, aderemu à DevOps- è SRE- praticante Quandu una cumpagnia hà 1000 microservizi, circa 350 sviluppatori è 15 amministratori per tutta l'infrastruttura, avete da "esse in moda": daretu à tutti questi "buzzwords" ci hè un urgente bisognu di automatizà tuttu è tuttu, è l'amministratori ùn deve esse un collu di bottiglia. in prucessi.

Cum'è Ops, furnimu diverse metriche è dashboards per i sviluppatori ligati à a velocità di risposta di u serviziu è à l'errori di serviziu.

Avemu aduprà metodulugia cum'è: ROSSU, USE и Signali d'orucumminendu li inseme. Pruvemu di minimizzà u nùmeru di dashboards per chì in un sguardu sia chjaru chì serviziu hè attualmente degradante (per esempiu, codici di risposta per seconda, tempu di risposta à u percentile 99), etc. Appena alcune novi metriche per i dashboards generali diventanu necessarii, l'avemu immediatamente disegnate è aghjunghje.

Ùn aghju micca disegnatu gràfiche per un mese avà. Questu hè prubabilmente un bonu signu: significa chì a maiò parte di i "voglia" sò digià implementati. Hè accadutu chì per una settimana aghju tracciatu un novu graficu almenu una volta à ghjornu.

Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi

Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi

U risultatu risultatu hè preziosu chì avà i sviluppatori raramente vanu à l'amministratori cù e dumande "induve vede qualchì tipu di metrica".

Implementazione Service Mesh hè ghjustu intornu à u cantonu è deve fà a vita assai più faciule per tutti, i culleghi di Tools sò digià vicinu à implementà l'astrattu "Istio di una persona sana": u ciclu di vita di ogni dumanda HTTP (s) serà visibile in u monitoraghju, è serà sempre pussibule di capiscenu "in quale stadiu tuttu s'hè rottu" à l'interazzione interservice (è micca solu). Subscribe to news from the DomClick hub. =)

Supportu di l'infrastruttura Kubernetes

Stòricamente, usemu a versione patched Kubespray - Rolu Ansible per implementà, allargamentu è aghjurnà Kubernetes. À un certu puntu, u supportu per l'installazione non-kubeadm hè statu tagliatu da u ramu principale, è u prucessu di transizione à kubeadm ùn hè statu prupostu. In u risultatu, Southbridge hà fattu u so propiu fork (cù supportu per kubeadm è una correzione rapida per i prublemi critichi).

U prucessu di aghjurnamentu per tutti i clusters k8s s'assumiglia cusì:

  • Pigliate Kubespray da Southbridge, verificate cù a nostra filiale, merjim.
  • Stendu l'aghjurnamentu à Stress- "Cube".
  • Lanciamu l'aghjurnamentu un nodu à u tempu (in Ansible questu hè "serial: 1") in Dev- "Cube".
  • Aghjurnà Pruduzzione u sabbatu sera, un nodu à tempu.

In u futuru ci sò piani di rimpiazzà Kubespray à qualcosa più veloce è vai kubeadm.

In totale, avemu trè "Cubi": Stress, Dev è Prod. Avemu pensatu à lancià un altrustandby caldu) Prod- "Cube" in u sicondu centru di dati. Stress и Dev vive in macchine virtuali (oVirt for Stress è VMWare cloud for Dev). Pruduzzione- "Cube" vive nantu à "bare metal" (bare metal): sò i stessi nodi cù 32 fili di CPU, 64-128 GB di memoria è 300 GB di SSD RAID 10 - ci sò 50 in totale. Trè nodi "sottili" sò dedicati à "maestri" Pruduzzione- "Cuba": 16 GB di memoria, 12 fili CPU.

Per a vendita, preferimu usà "metallu nudu" è evità strati innecessarii cum'è OpenStack: ùn avemu micca bisognu di "vicini rumorosi" è CPU arrubbari tempu. È a cumplessità di l'amministrazione aumenta da circa a mità in u casu di OpenStack in-house.

Per CI/CD Cubic è altri cumpunenti di l'infrastruttura usemu un servitore GIT separatu, Helm 3 atomicu), Jenkins, Ansible è Docker. Amamu e rami di funzioni è implementate in ambienti differenti da u stessu repository.

cunchiusioni

Kubernetes à DomClick: cumu dorme tranquillamente gestendu un cluster di 1000 microservizi
Questu hè cumu, in termini generale, u prucessu DevOps in DomClick s'assumiglia da u latu di un ingegnere di operazioni. L'articulu hè statu menu tecnicu di ciò chì m'aspittava: per quessa, seguitate a nutizia di DomClick nantu à Habré: ci saranu più articuli "hardcore" nantu à Kubernetes è più.

Source: www.habr.com

Add a comment