Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen

Mäin Numm ass Viktor Yagofarov, an ech entwéckelen d'Kubernetes Plattform bei DomClick als techneschen Entwécklungsmanager am Ops (Operatioun) Team. Ech wéilt gär iwwer d'Struktur vun eisen Dev <-> Ops Prozesser schwätzen, d'Features fir ee vun de gréisste k8s Cluster a Russland ze bedreiwen, souwéi d'DevOps / SRE Praktiken déi eis Team applizéiert.

Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen

Ops Team

D'Ops Team huet de Moment 15 Leit. Dräi vun hinne si fir de Büro verantwortlech, zwee schaffen an enger anerer Zäitzone a sinn disponibel, och nuets. Sou ass een vun Ops ëmmer um Monitor a prett op en Tëschefall vun all Komplexitéit ze reagéieren. Mir hu keng Nuetsschichten, déi eis Psyche erhaalen an jidderengem d'Méiglechkeet ginn genuch Schlof ze kréien a Fräizäit ze verbréngen net nëmmen um Computer.

Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen

Jiddereen huet verschidde Kompetenzen: Netzwierker, DBAs, ELK Stack Spezialisten, Kubernetes Administrateuren / Entwéckler, Iwwerwaachung, Virtualiséierung, Hardware Spezialisten, etc. Eng Saach verbënnt jiddereen - jidderee kann jidderee vun eis zu engem gewësse Mooss ersetzen: zum Beispill nei Noden an de k8s-Cluster aféieren, PostgreSQL aktualiséieren, eng CI/CD + Ansible Pipeline schreiwen, eppes am Python/Bash/Go automatiséieren, Hardware verbannen Datenzenter. Staark Kompetenzen an all Beräich verhënneren Iech net Är Aktivitéitsrichtung z'änneren an an engem anere Beräich ze verbesseren. Zum Beispill sinn ech bei enger Firma als PostgreSQL Spezialist bäitrieden, an elo ass meng Haaptverantwortungsberäich Kubernetes Cluster. Am Team ass all Héicht wëllkomm an d'Gefill vum Heber ass ganz entwéckelt.

Iwwregens, mir sinn Juegd. Ufuerderunge fir Kandidaten si ganz Standard. Fir mech perséinlech ass et wichteg, datt eng Persoun an d'Equipe passt, konfliktlos ass, awer och weess seng Siicht ze verteidegen, sech wëll entwéckelen an net fäert eppes Neies ze maachen an seng Iddien ubitt. Och Programméierungsfäegkeeten a Skriptsproochen, Wëssen iwwer d'Basis vu Linux an Englesch sinn erfuerderlech. Englesch gëtt einfach gebraucht fir datt eng Persoun am Fall vun engem Fakap an 10 Sekonnen eng Léisung fir de Problem google kann an net an 10 Minutten. Et ass elo ganz schwéier Spezialisten mat déiwe Wëssen iwwer Linux ze fannen: et ass witzeg, awer zwee vun dräi Kandidaten kënnen d'Fro net beäntweren "Wat ass Load Average? Aus wat ass et gemaach?", an d'Fro "Wéi e Kärdump aus engem C-Programm montéiert" gëllt als eppes aus der Welt vun de Supermänner ... oder Dinosaurier. Mir musse mat deem ophalen, well normalerweis d'Leit héich entwéckelt aner Kompetenzen hunn, awer mir wäerten Linux léieren. D'Äntwert op d'Fro "Firwat muss en DevOps-Ingenieur dat alles wëssen an der moderner Welt vu Wolleken" muss ausserhalb vum Artikel gelooss ginn, awer an dräi Wierder: alles ass néideg.

Team Tools

D'Tools Team spillt eng bedeitend Roll an der Automatisatioun. Hir Haaptaufgab ass praktesch grafesch a CLI Tools fir Entwéckler ze kreéieren. Zum Beispill, eis intern Entwécklung Confer erlaabt Iech wuertwiertlech eng Applikatioun op Kubernetes mat just e puer Mausklicken ausrollen, seng Ressourcen konfiguréieren, Schlësselen aus Vault, etc. Virdru war et Jenkins + Helm 2, awer ech hu missen mäin eegent Tool entwéckelen fir Copy-Paste ze eliminéieren an Uniformitéit an de Software Liewenszyklus ze bréngen.

D'Ops Team schreift keng Pipelines fir Entwéckler, awer kann iwwer all Themen an hirem Schreiwen beroden (e puer Leit hunn nach ëmmer Helm 3).

DevOps

Wat DevOps ugeet, gesi mir et esou:

Dev Teams schreiwen Code, rullt et iwwer Confer op dev -> qa/stage -> prod. D'Verantwortung fir sécherzestellen datt de Code net verlangsamt a keng Feeler enthält läit bei den Dev an Ops Teams. Dagsiwwer soll déi zoustänneg Persoun aus der Ops-Equipe fir d'éischt mat senger Demande op en Tëschefall reagéieren, an owes an nuets soll den Administrateur op Pacht (Ops) den Entwéckler op der Pflicht erwächen, wann e weess fir sécher datt de Problem net an der Infrastruktur ass. All Metriken an Alarmer an der Iwwerwaachung erschéngen automatesch oder semi-automatesch.

Dem Ops seng Verantwortungsberäich fänkt un aus dem Moment wou d'Applikatioun an d'Produktioun ausgerullt gëtt, awer dem Dev seng Verantwortung endet net do - mir maachen datselwecht a sinn am selwechte Boot.

Entwéckler beroden Administrateuren wa se Hëllef brauchen beim Schreiwen vun engem Admin-Mikroservice (zum Beispill Go Backend + HTML5), an Administrateuren beroden Entwéckler iwwer all Infrastrukturproblemer oder Themen am Zesummenhang mat k8s.

Iwwregens hu mir guer kee Monolith, nëmme Mikroservicer. Hir Zuel schwankt bis elo tëscht 900 an 1000 am prod k8s Cluster, wa se no Zuel gemooss ginn Asetzungen. D'Zuel vun de Pods schwankt tëscht 1700 an 2000. Am Prod-Cluster sinn am Moment ongeféier 2000 Pods.

Ech kann net genau Zuelen ginn, well mir onnéideg Mikroservicer iwwerwaachen an se semi-automatesch ausschneiden. K8s hëlleft eis verfollegen onnéideg Entitéite nëtzlos-Bedreiwer, wat vill Ressourcen a Geld spuert.

Ressource Gestioun

Iwwerwaachung

Gutt strukturéiert an informativ Iwwerwaachung gëtt den Ecksteen an der Operatioun vun engem grousse Cluster. Mir hunn nach keng universell Léisung fonnt, déi 100% vun all Iwwerwaachungsbedürfnisser ofdeckt, sou datt mir periodesch verschidde personaliséiert Léisungen an dësem Ëmfeld kreéieren.

  • Zabbix. Gutt al Iwwerwaachung, déi virun allem geduecht ass fir de Gesamtzoustand vun der Infrastruktur ze verfolgen. Et seet eis wann e Node stierft a punkto Veraarbechtung, Erënnerung, Disken, Netzwierk, asw. Näischt iwwernatierlech, awer mir hunn och e separaten DaemonSet vun Agenten, mat der Hëllef vun deenen mir zum Beispill den Zoustand vun DNS am Cluster iwwerwaachen: mir sichen no domm Coredns Pods, mir iwwerpréiwen d'Disponibilitéit vun externen Hosten. Et géif schéngen, firwat mat dëser beméien, mä mat grousse Bänn vum Traffic ass dës Komponent e seriöse Punkt vun Echec. Ech schonn beschriwwen, Wéi ech mat DNS Leeschtung an engem Cluster gekämpft hunn.
  • Prometheus Bedreiwer. Eng Rei vu verschiddenen Exporter gëtt e groussen Iwwerbléck iwwer all Komponente vum Cluster. Als nächst visualiséiere mir dat alles op groussen Dashboards zu Grafana, a benotzen den Alertmanager fir Alarmer.

En anert nëtzlecht Tool fir eis war Lëscht-ingress. Mir hunn et geschriwwen nodeems mir e puer Mol op eng Situatioun begéint sinn, wou eng Équipe d'Ingress-Wee vun enger anerer Équipe iwwerlappt, wat zu 50x Feeler resultéiert. Elo ier se op d'Produktioun ofgesat ginn, kontrolléieren d'Entwéckler datt keen betraff ass, a fir meng Team ass dëst e gutt Tool fir d'initial Diagnostik vu Probleemer mat Ingresses. Et ass witzeg datt et fir d'éischt fir Administrateuren geschriwwe gouf an et zimlech "klompeg" ausgesinn huet, awer nodeems d'Dev-Teams sech mam Tool verléift hunn, huet et vill geännert an huet ugefaang net ze ausgesinn wéi "en Admin huet e Web Gesiicht fir Admins gemaach. " Geschwënn wäerte mir dëst Tool opginn an esou Situatioune wäerte validéiert ginn och ier d'Pipeline ausgerullt gëtt.

Team Ressourcen am Cube

Ier mer an d'Beispiller kommen, ass et derwäert z'erklären wéi mir Ressourcen allocéieren microservices.

Fir ze verstoen, wéi eng Équipen a wéi eng Quantitéiten hir benotzen Ressourcen (Prozessor, Erënnerung, lokal SSD), verdeele mir all Kommando seng eege Nummraum am "Cube" a limitéiert seng maximal Fäegkeeten a punkto Prozessor, Erënnerung an Scheif, nodeems se virdru d'Bedierfnesser vun den Teams diskutéiert hunn. Deementspriechend blockéiert ee Kommando, am Allgemengen, de ganze Cluster net fir den Ofbau, allocéiert Dausende vu Kären an Terabytes Erënnerung. Zougang zum Nummraum gëtt iwwer AD (mir benotze RBAC). Namespaces an hir Limiten ginn iwwer eng Pull-Ufro an de GIT Repository bäigefüügt, an dann gëtt alles automatesch duerch d'Ansible Pipeline ausgerullt.

E Beispill fir Ressourcen un eng Equipe ze verdeelen:

namespaces:

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

Ufroen a Grenzen

Cubed" Ufro ass d'Zuel vun garantéiert reservéiert Ressourcen fir pod (een oder méi Docker Container) an engem Cluster. Limit ass en net garantéiert Maximum. Dir kënnt dacks op de Grafike gesinn, wéi e puer Team sech ze vill Ufroe fir all seng Uwendungen gesat huet an d'Applikatioun net op de "Cube" ofsetzen kann, well all Ufroen ënner hirem Nummraum scho "ausginn".

De richtege Wee aus dëser Situatioun ass den aktuellen Ressourceverbrauch ze kucken an et mat dem ugefrote Betrag (Ufro) ze vergläichen.

Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen
Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen

An de Screenshots hei uewen kënnt Dir gesinn datt "Gefrote" CPUs mat der reeller Unzuel vun de Threads passen, an d'Limite kënnen d'real Zuel vun den CPU Threads iwwerschreiden =)

Loosst eis elo e puer Nummraum am Detail kucken (ech hunn den Nummraum kube-System gewielt - de Systemnummraum fir d'Komponente vum "Cube" selwer) a kuckt d'Verhältnis vun der tatsächlech benotzter Prozessor Zäit a Gedächtnis zum ugefrote:

Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen

Et ass offensichtlech datt vill méi Erënnerung an CPU fir Systemservicer reservéiert ass wéi tatsächlech benotzt gëtt. Am Fall vum Kube-System ass dëst gerechtfäerdegt: et ass geschitt datt nginx Ingress Controller oder Nodelocaldns op hirem Héichpunkt d'CPU getraff hunn a vill RAM verbraucht hunn, also hei ass sou eng Reserve gerechtfäerdegt. Zousätzlech kënne mir net op Charts fir déi lescht 3 Stonnen vertrauen: et ass wënschenswäert historesch Metriken iwwer eng grouss Zäit ze gesinn.

E System vun "Empfehlungen" gouf entwéckelt. Zum Beispill, hei kënnt Dir gesinn, wéi eng Ressourcen besser wiere fir d'"Limiten" (déi iewescht erlaabt Bar) eropzesetzen, sou datt "Throttling" net geschitt: de Moment wou eng Ressource schonn d'CPU oder d'Erënnerung an der zougewisener Zäitschnëtt verbruecht huet an waart bis et "unfrozen" gëtt:

Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen

An hei sinn d'Hënn, déi hiren Appetit sollte bekämpfen:

Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen

op drosselen + Ressource Iwwerwachung, Dir kënnt méi wéi een Artikel schreiwen, also stellt Froen an de Kommentarer. An e puer Wierder kann ech soen datt d'Aufgab fir esou Metriken ze automatiséieren ganz schwéier ass a vill Zäit a Gläichgewiicht mat "Fënster" Funktiounen an "CTE" Prometheus / VictoriaMetrics erfuerdert (dës Begrëffer sinn an Zitater, well et bal bal ass näischt wéi dëst am PromQL, an Dir musst grujeleg Ufroen an e puer Textscreens opdeelen an se optimiséieren).

Als Resultat hunn d'Entwéckler Tools fir hir Nummraim am Cube ze iwwerwaachen, a si kënne fir sech selwer wielen wou a wéi eng Applikatiounen hir Ressourcen "geschnidde" kënnen hunn a wéi eng Serveren déi ganz CPU d'ganz Nuecht kréien.

Methodologien

An der Firma wéi et elo ass moudesch, Mir halen DevOps- an SRE-praktiker Wann eng Firma 1000 Mikroservicer, ongeféier 350 Entwéckler a 15 Administrateuren fir déi ganz Infrastruktur huet, musst Dir "modesch sinn": hannert all deene "Baswords" ass dréngend Noutwendegkeet alles a jiddereen ze automatiséieren, an d'Administrateure sollen net e Flaschenhals sinn an Prozesser.

Als Ops liwwere mir verschidde Metriken an Dashboards fir Entwéckler am Zesummenhang mat Service Äntwertraten a Feeler.

Mir benotze Methodologien wéi: ROUT, BENOTZT и Golden Signalerandeems se zesummen kombinéiert ginn. Mir probéieren d'Zuel vun den Dashboards ze minimiséieren, sou datt op ee Bléck kloer ass, wéi ee Service de Moment degradéiert (zum Beispill Äntwertcodes pro Sekonn, Äntwertzäit ëm 99. Percentil), etc. Soubal e puer nei Metriken fir allgemeng Dashboards néideg ginn, zéie mir direkt an addéiere se.

Ech hunn zënter engem Mount keng Grafike gezeechent. Dëst ass wahrscheinlech e gutt Zeechen: et heescht datt déi meescht vun de "Wënsch" scho realiséiert goufen. Et ass geschitt, datt ech an der Woch op d'mannst eemol am Dag eng nei Grafik zéien.

Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen

Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen

Dat resultéierend Resultat ass wäertvoll well elo Entwéckler zimmlech selten un d'Administrateure goen mat Froen "wou eng Aart vu Metrik kucken."

Ëmsetzung Service Mesh ass just ronderëm den Eck a soll d'Liewe fir jiddereen vill méi einfach maachen, d'Kollegen vun Tools si scho no der Ëmsetzung vum abstrakte "Istio vun enger gesonder Persoun": de Liewenszyklus vun all HTTP(en) Ufro wäert an der Iwwerwaachung sichtbar sinn, an et wäert ëmmer méiglech sinn ze verstoen "op wéi enger Etapp alles gebrach ass" während der Inter-Service (an net nëmmen) Interaktioun. Abonnéiert Iech op Neiegkeeten vum DomClick Hub. =)

Kubernetes Infrastruktur Ënnerstëtzung

Historesch benotze mir déi patched Versioun Kubespray - Ansible Roll fir Kubernetes z'installéieren, ze verlängeren an ze aktualiséieren. Irgendwann gouf d'Ënnerstëtzung fir net-kubeadm Installatiounen aus der Haaptzweig ofgeschnidden, an de Prozess vum Wiessel op kubeadm gouf net proposéiert. Als Resultat huet d'Southbridge Firma seng eege Gabel gemaach (mat kubeadm Ënnerstëtzung an e schnelle Fix fir kritesch Probleemer).

De Prozess fir all k8s Cluster ze aktualiséieren gesäit esou aus:

  • Huelt Kubespray aus Southbridge, kontrolléieren mat eisem thread, Merjim.
  • Mir rullen den Update op Stress- "Würfel".
  • Mir rullen den Update een Node gläichzäiteg aus (an Ansible ass dëst "Serial: 1") an Dev- "Würfel".
  • Mir aktualiséieren Prod um Samschdeg den Owend een Node gläichzäiteg.

Et gi Pläng et an Zukunft ze ersetzen Kubespray fir eppes méi séier a gitt op kubeadm.

Am Ganzen hu mir dräi "Cubes": Stress, Dev a Prod. Mir plangen en aneren ze lancéieren (waarm Standby) Prod-"Cube" am zweeten Rechenzentrum. Stress и Dev liewen an "virtuell Maschinnen" (oVirt fir Stress an VMWare Wollek fir Dev). Prod- "Cube" lieft op "bare Metal": dëst sinn identesch Noden mat 32 CPU thread, 64-128 GB Erënnerung an 300 GB SSD RAID 10 - et sinn am Ganzen 50 vun hinnen. Dräi "dënn" Node si fir "Meeschteren" gewidmet Prod- "Kuba": 16 GB Erënnerung, 12 CPU thread.

Fir Verkaf hu mir léiwer "bloe Metal" ze benotzen an onnéideg Schichten ze vermeiden wéi OpenStack: mir brauchen net "kaméidi Noperen" an CPU klauen Zäit. An d'Komplexitéit vun der Administratioun verduebelt ongeféier am Fall vum internen OpenStack.

Fir CI / CD "Cubic" an aner Infrastrukturkomponente benotze mir e separaten GIT Server, Helm 3 (et war e zimlech schmerzhafte Iwwergang vum Helm 2, awer mir si ganz zefridden mat den Optiounen atomesch), Jenkins, Ansible and Docker. Mir hu gär Feature Filialen an Détachement an verschidden Ëmfeld vun engem Repository.

Konklusioun

Kubernetes bei DomClick: wéi friddlech schlofe e Cluster vun 1000 Mikroservicer ze managen
Dëst ass, am allgemengen, wéi den DevOps Prozess bei DomClick aus der Perspektiv vun engem Operatiounsingenieur ausgesäit. Den Artikel huet sech manner technesch erausgestallt wéi ech erwaart hunn: Dofir, befollegt d'DomClick News op Habré: et gëtt méi "Hardcore" Artikelen iwwer Kubernetes a méi.

Source: will.com

Setzt e Commentaire