{"id":91199,"date":"2020-08-10T01:42:03","date_gmt":"2020-08-09T23:42:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov"},"modified":"2020-08-10T01:42:03","modified_gmt":"2020-08-09T23:42:03","slug":"kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","title":{"rendered":"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Moje ime je Viktor Jagofarov, in sem odgovoren za razvoj platforme Kubernetes v podjetju DomKlik kot tehni\u010dni vodja razvoja v ekipi Ops (obratovanje). Rad bi spregovoril o delovanju na\u0161ih procesov Dev  Ops, o zna\u010dilnostih obratovanja enega najve\u010djih k8s grozdov v Rusiji ter o DevOps\/SRE praksah, ki jih uporablja na\u0161a ekipa.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/6c908104c734b36cc7a960fbe4d65e3f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Ekipa Ops<\/h4>\n<p>\nV ekipi Ops trenutno dela 15 ljudi. Trije od njih skrbijo za pisarno, dva delata v drugem \u010dasovnem pasu in sta na voljo tudi pono\u010di. Tako je vedno nekdo iz ekipe Ops pred zaslonom in pripravljen reagirati na incident katere koli kompleksnosti. Nimamo no\u010dnih izmen, kar ohranja na\u0161e du\u0161evno zdravje in omogo\u010da vsem, da se naspijo in pre\u017eivijo prosti \u010das ne samo za ra\u010dunalnikom.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/47051db273f116df376e64bad67c6f37.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVsak ima razli\u010dne kompetence: omre\u017eni in\u017eenirji, DBA, strokovnjaki za ELK sklad, Kubernetes skrbniki\/razvijalci, specialisti za spremljanje, virtualizacijo, strojno opremo itd. Vse nas povezuje eno - vsak lahko nekako nadomesti katerega od nas: na primer, dodati nove vozli\u0161\u010da v k8s grozd, posodobiti PostgreSQL, napisati CI\/CD pipeline + Ansible, avtomatizirati kaj v Python\/Bash\/Go, povezati strojno opremo v podatkovnem centru. Mo\u010dne kompetence na dolo\u010denem podro\u010dju ne ovirajo prehoda na drugo podro\u010dje in za\u010detek izpopolnjevanja v novi disciplini. Na primer, v podjetje sem se zaposlil kot specialist za PostgreSQL, zdaj pa je moja glavna odgovornost k8s grozdi. V ekipi je vsak rast zelo dobrodo\u0161la in imamo mo\u010dno \u010dut za medsebojno podporo.<\/p>\n<p>Sicer, i\u0161\u010demo nove sodelavce. Zahteve do kandidatov so precej standardne. Osebno mi je pomembno, da se oseba vklopi v ekipo, da je nenaporna in hkrati sposobna zagovarjati svoje stali\u0161\u010de, da si \u017eeli napredovati in se ne boji novosti ter predlaga svoje ideje. Prav tako so obvezne ve\u0161\u010dine programiranja v skriptnih jezikih, poznavanje osnov Linuxa in znanje angle\u0161\u010dine. Angle\u0161\u010dina je potrebna preprosto zato, da lahko v primeru te\u017eav oseba poi\u0161\u010de re\u0161itev na spletu v 10 sekundah in ne v 10 minutah. S strokovnjaki z globokim znanjem Linuxa je danes zelo te\u017eko: sme\u0161no je, a dva od treh kandidatov ne moreta odgovoriti na vpra\u0161anje \u201eKaj je Load Average? Iz \u010desa je sestavljen?\u201c, medtem ko vpra\u0161anje \u201eKako zbrati core dump iz C-programa\u201c obravnavajo kot nekaj iz sveta superjunakov\u2026 ali dinozavrov. S tem se moramo sprijazniti, saj imajo ljudje obi\u010dajno zelo razvite druge kompetence, \u201elinuksa\u201c pa jih bomo nau\u010dili. Odgovor na vpra\u0161anje \u201ezakaj vse to mora vedeti DevOps in\u017eenir v sodobnem svetu oblakov\u201c bomo pustili zunaj tega \u010dlanka, a v treh besedah: vse to je potrebno.<\/p>\n<h4>Ekipa Orodja<\/h4>\n<p>\nEkipa Orodja igra pomembno vlogo v avtomatizaciji. Njihova glavna naloga je ustvarjanje priro\u010dnih grafi\u010dnih in CLI orodij za razvijalce. Na primer, na\u0161a interna re\u0161itev Confer omogo\u010da, da v le nekaj klikih mi\u0161ke uvedemo aplikacijo v Kubernetes, nastavimo vire, klju\u010de iz vault itd. Prej smo imeli Jenkins + Helm 2, a smo morali razviti svoj lastni instrument, da bi izklju\u010dili kopiranje in lepljenje ter prinesli doslednost v \u017eivljenjski cikel programske opreme.<\/p>\n<p>Ekipa Ops ne pi\u0161e pipelines za razvijalce, vendar lahko svetuje glede vseh vpra\u0161anj pri njihovem pisanju (nekaterim je \u0161e ostal Helm 3).<\/p>\n<h4>DevOps<\/h4>\n<p>\nKar se ti\u010de DevOps, ga vidimo takole:<\/p>\n<p>Ekipa Dev pi\u0161e kodo in jo uvede preko Confer v dev -&gt; qa\/stage -&gt; prod. Odgovornost za to, da koda ne povzro\u010da zastojev in napak, le\u017ei na ekipah Dev in Ops. \u010cez dan mora na incident s svojo aplikacijo najprej reagirati de\u017eurni iz ekipe Ops, pono\u010di pa mora de\u017eurni skrbnik (Ops) zbuditi de\u017eurnega razvijalca, \u010de je prepri\u010dan, da te\u017eava ni v infrastrukturi. Vse metrike in alarmi v monitoringu se pojavijo samodejno ali polavtomatsko.<\/p>\n<p>Odgovornost Ops-a po\u010dinje s trenutkom kada se aplikacija postavi u produkciju, ali odgovornost Dev-a tu ne prestaje \u2014 radimo zajedno i u istom \u010damcu.<\/p>\n<p>Programeri savetuju administratore ako im je potrebna pomo\u0107 pri pisanju administratorskog mikrosluga (na primer, Go backend + HTML5), dok administratori savetuju programere o svim infrastrukturnim pitanjima, ili pitanjima vezanim za k8s.<\/p>\n<p>Usput, nemamo monolit, samo mikroslu\u017ebe. Njihov broj trenutno se kre\u0107e izme\u0111u 900 i 1000 u prod k8s klasteru, kada merimo po koli\u010dini. <i>deployments<\/i>Broj podova varira izme\u0111u 1700 i 2000. Podova u prod klasteru sada je oko 2000.<\/p>\n<p>Ne mogu dati ta\u010dne brojke, jer pratimo nepotrebne mikroslu\u017ebe i uklanjamo ih poluautomatski. Pratiti nepotrebne entitete u k8s poma\u017ee nam <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/useless-operator\">useless-operator<\/a><\/noindex>, \u0161to uveliko \u0161tedi resurse i novac.<\/p>\n<h2> Upravljanje z viri <\/h2>\n<p><\/p>\n<h4> Nadzor <\/h4>\n<p>\nKlju\u010dna ta\u010dka u eksploataciji velikog klastera postaje pravilno uspostavljen i informativan monitoring. Jo\u0161 nismo prona\u0161li univerzalno re\u0161enje koje bi pokrilo 100% svih zahteva za monitoringom, pa povremeno pravimo razli\u010dita prilago\u0111ena re\u0161enja u ovom prostoru.<\/p>\n<ul>\n<li><b>Zabbix<\/b>. Stari dobri monitoring, koji je prvenstveno namenjen pra\u0107enju op\u0161teg stanja infrastrukture. On nam govori kada node umire zbog CPU-a, memorije, diskova, mre\u017ee i tako dalje. Ni\u0161ta natprirodno, ali tako\u0111e imamo posebni DaemonSet agenata, pomo\u0107u kojih, na primer, pratimo stanje DNS-a u klasteru: tra\u017eimo usporene podove coredns, proveravamo dostupnost spolja\u0161njih hostova. \u010cinilo bi se da nema potrebe zamarati se oko toga, ali na velikim proticima ovaj komponent postaje ozbiljna ta\u010dka kvara. Ve\u0107 sam ranije <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/495450\/\">opisal<\/a><\/noindex>, kako sam se borio protiv performansi DNS-a u klasteru.<\/li>\n<li><b>Prometheus Operator<\/b>. Skup razli\u010ditih eksportera daje dobar pregled svih komponenti klastera. Zatim to vizualizujemo na velikim dashboard-ima u Grafani, a za obave\u0161tenja koristimo alertmanager.\n<\/li>\n<\/ul>\n<p>\nJo\u0161 jedan koristan alat za nas postao je <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/list-ingress\">list-ingress<\/a><\/noindex>. Napisali smo ga nakon \u0161to smo se nekoliko puta suo\u010dili sa situacijom u kojoj jedna ekipa preklapa svoje Ingress puteve sa drugim timom, \u0161to dovodi do gre\u0161aka 50x. Sada, pre nego \u0161to implementiraju na produkciju, programeri proveravaju da li \u0107e nekoga povrediti, a za moj tim je to odli\u010dan alat za osnovnu dijagnostiku problema sa Ingress-ima. Zanimljivo je da je prvobitno napisan za administratore i izgledao je prili\u010dno 'grubo', ali nakon \u0161to su ga timovi za razvoj zavoleli, znatno se transformisao i vi\u0161e ne izgleda kao 'administrator je napravio web interfejs za administratore'. Uskoro \u0107emo se odvojiti od ovog alata i sli\u010dne situacije \u0107e se validirati \u010dak i pre nego \u0161to pipeline bude pu\u0161ten.<\/p>\n<h4>Viri ekip v 'Kubu'<\/h4>\n<p>\nPreden se lotimo primerov, je smiselno razlo\u017eiti, kako pri nas poteka dodeljevanje virov za <i>mikrostoritev<\/i>.<\/p>\n<p>Da bi razumeli, katere ekipe in v kak\u0161nih koli\u010dinah uporabljajo svoje <i>virov<\/i> (procesor, pomnilnik, lokalni SSD), dodelimo vsaki ekipi svoje <i>namespace<\/i> u 'Kube-u' i ograni\u010davamo njegove maksimalne mogu\u0107nosti po procesoru, memoriji i disku, nakon \u0161to prethodno razgovaramo o potrebama timova. Tako da, jedna ekipa, u op\u0161tem slu\u010daju, ne\u0107e blokirati ceo klaster za implementaciju, izdvajaju\u0107i sebi hiljade jezgara i terabajte memorije. Pristupi u namespace se dodeljuju preko AD (koristimo RBAC). Namespace-i i njihova ograni\u010denja se dodaju putem pull request-a u GIT repozitorijum, a zatim se sve automatski raspore\u0111uje preko Ansible pipeline-a.<\/p>\n<p>Primer dodelitve virov za ekipo:<\/p>\n<pre><code class=\"go\">namespaces:\n\n  chat-team:\n    pods: 23\n    limits:\n      cpu: 11\n      memory: 20Gi\n    requests:\n      cpu: 11\n      memory: 20Gi\n<\/code><\/pre>\n<p><\/p>\n<h4>Zahteve in limiti<\/h4>\n<p>\nV 'Kubu' <i>Request<\/i> \u2014 to je koli\u010dina zagotovljenih rezerviranih virov za <i>pod<\/i> (jedan ili vi\u0161e Docker kontejnera) u klasteru. Limit je to koji nije zagarantovan. \u010cesto se mo\u017ee videti na grafikonu kako neka ekipa postavlja previ\u0161e zahteva za sve svoje aplikacije i ne mo\u017ee da implementira aplikaciju u 'Kube', jer su svi request-ovi ve\u0107 'potro\u0161eni' pod njihovim namespace-om.<\/p>\n<p>Pravi izhod iz tak\u0161ne situacije: gledati pravo porabo virov in jo primerjati z zahtevano koli\u010dino (Request).<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/417373d4421064f28d57a03b6bb5bf94.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/3168ad6dc8b159059b21e1177e145376.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa zgoraj prikazanih posnetkih zaslona je vidno, da se 'zahtevani' (Requested) CPU prilagajajo realnemu \u0161tevilu niti, medtem ko lahko Limits presegajo realno \u0161tevilo procesorskih jeder =)<\/p>\n<p>Zdajmo se natan\u010dno osredoto\u010dimo na nek namespace (izbral sem namespace kube-system \u2014 sistemski namespace za komponente samega 'Kuba') in poglejmo razmerje med dejansko porabljenim procesorskim \u010dasom in spominom ter zahtevanjem:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/ed6160de5397b8cd39cbae172d4bb872.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO\u010ditno je, da je spomina in CPU rezerviranega za sistemske storitve precej ve\u010d, kot se dejansko uporablja. V primeru kube-system je to upravi\u010deno: zgodilo se je, da sta nginx ingress controller ali nodelocaldns na vrhuncu padla na CPU in porabila zelo veliko RAM-a, zato je tak\u0161na rezerva upravi\u010dena. Poleg tega se ne moremo zana\u0161ati na grafikone zadnjih 3 ur: bolje bi bilo videti zgodovinske metrike za dalj\u0161e \u010dasovno obdobje.<\/p>\n<p>Razvit je bil sistem 'priporo\u010dil'. Na primer, tukaj lahko vidite, katerim virom bi bilo bolje pove\u010dati 'meje' (zgornja dovoljena meja), da ne bi pri\u0161lo do 'trotlinanja' (throttling): trenutka, ko je CPU ali spomin \u017ee porabljen za dodeljeni \u010dasovni kvant in \u010daka, da ga 'odmrznejo':<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/f23aece10a585e6847bcacfe947031d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn tukaj so podi, ki bi morali omejiti svoje apetite:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/1ec9996ce6355aeba603008d51aac209.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO <i>trotlinanje<\/i> + o spremljanju virov lahko napi\u0161emo ve\u010d \u010dlankov, zato postavljajte vpra\u0161anja v komentarjih. Na kratko lahko re\u010dem, da je naloga avtomatizacije tak\u0161nih metrik precej zapletena in zahteva veliko \u010dasa ter akrobatike z 'okenskimi' funkcijami in 'CTE' Prometheus \/ VictoriaMetrics (ti izrazi so v narekovajih, ker v PromQL skoraj ni ni\u010d podobnega, in moramo sestaviti stra\u0161ne poizvedbe na ve\u010d zaslonih besedila in se ukvarjati z njihovo optimizacijo).<\/p>\n<p>Na koncu imajo razvijalci orodja za spremljanje svojih namespaces v 'Kubu', in sami lahko izberejo, kje in kdaj katere aplikacije lahko 're\u017eejo' vire, ter katerim podom lahko za celo no\u010d dodelijo cel CPU.<\/p>\n<h4>Metodologije<\/h4>\n<p>\nV podjetju, kot je zdaj <i>moderno<\/i>, se dr\u017eimo DevOps- in <i>SRE<\/i>-praks. Ko ima podjetje 1000 mikrostoritev, pribli\u017eno 350 razvijalcev in 15 administratorjev za celotno infrastrukturo, je potrebno biti 'moderen': za vsemi temi 'buzzwordi' se skriva ostra potreba po avtomatizaciji vsega in vsakega, administratorji pa ne smejo biti zama\u0161ek v procesih.<\/p>\n<p>Kot Ops zagotavljamo razli\u010dne metrike in nadzorne plo\u0161\u010de za razvijalce, povezane s hitrostjo odziva storitev in njihovimi napakami.<\/p>\n<p>Uporabljamo tak\u0161ne metodologije, kot so: <noindex><a rel=\"nofollow\" href=\"https:\/\/thenewstack.io\/monitoring-microservices-red-method\/\">RED<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/usemethod.html\">KORISTITE<\/a><\/noindex> in <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/forepaas\/distributed-monitoring-101-the-four-golden-signals-305bbbc33d35\">Zlati signali<\/a><\/noindex>, kombiniranjem zajedno. Poku\u0161avamo minimizirati broj kontrolnih plo\u010da tako da na prvi pogled bude jasno koji servis trenutno ima problema (na primjer, kodovi odgovora u sekundi, vreme odgovora u 99-percentilu) itd. \u010cim postanu potrebne neke nove metrike za sveobuhvatne kontrolne plo\u010de, odmah ih kreiramo i dodajemo.<\/p>\n<p><i>Nisam pravio grafike ve\u0107 mesec dana. Verovatno je to dobar znak: to zna\u010di da su ve\u0107ina '\u017eelja' realizovane. De\u0161avalo se da tokom nedelje bar jednom dnevno pravim neki novi graf.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/574f1b4d2be78fb779f1771bffac51dd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/6ab2aa05f912839b14bdbcf84faaeb3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDobijeni rezultat je vredan time \u0161to sada programeri retko dolaze do administratora sa pitanjima 'gde mogu da pogledam neku metriku'.<\/p>\n<p>Implementacija <i>Service Mesh<\/i> nije daleko i trebalo bi svima olak\u0161ati \u017eivot, kolege iz Tools su ve\u0107 blizu implementacije apstraktnog 'Istio zdravog \u010doveka': \u017eivotni ciklus svakog HTTP(s) zahteva bi\u0107e vidljiv u monitoring sistemu, i uvek \u0107e mo\u0107i da se razume 'na kojoj ta\u010dki je sve po\u0161lo po zlu' u me\u0111uservisnoj (i ne samo) interakciji. Pretplatite se na vesti kompanije DomKlik. =)<\/p>\n<h2>Podr\u0161ka za Kubernetes infrastrukturu<\/h2>\n<p>\nIstorijski gledano, koristimo patch-ovanu verziju <i>Kubespray<\/i> \u2014 Ansible uloga za postavljanje, pro\u0161irenje i a\u017euriranje Kubernetesa. U jednom trenutku iz glavne grane je izba\u010dena podr\u0161ka za non-kubeadm instalacije, a proces prelaska na kubeadm nije bio predlo\u017een. Na kraju, kompanija Southbridge je napravila svoj fork (s podr\u0161kom za kubeadm i brzim re\u0161enjem kriti\u010dnih problema). <\/p>\n<p>Proces a\u017euriranja svih k8s klastera izgleda ovako:<\/p>\n<ul>\n<li>Uzmemo <i>Kubespray<\/i> od Southbridge, uporedimo sa na\u0161om granom, merge-ujemo.<\/li>\n<li>Postavljamo a\u017euriranje u <i>Stress<\/i>- 'Kub'.<\/li>\n<li>Postavljamo a\u017euriranje po jednoj nodi (u Ansible-u je to 'serial: 1') u <i>Dev<\/i>- 'Kub'.<\/li>\n<li>A\u017euriramo <i>Prod<\/i> subotom uve\u010de po jednoj nodi.<\/li>\n<\/ul>\n<p>\nU budu\u0107nosti imamo planove da zamenimo <i>Kubespray<\/i> ne\u010dim br\u017eim i pre\u0111emo na <i>kubeadm<\/i>.<\/p>\n<p>Ukupno imamo tri 'Kuba': Stress, Dev i Prod. Planiramo da pokrenemo jo\u0161 jedan (<i>hot standby<\/i>) Prod 'Kub' u drugom datacentru. <i>Stress<\/i> in <i>Dev<\/i> \u017eive u 'virtuelnim ma\u0161inama' (oVirt za Stress i VMWare cloud za Dev). <i>Prod<\/i>- 'Kub' \u017eivi na 'golem \u017eelezu' (bare metal): to su jednake nodi sa 32 CPU niti, 64-128 GB RAM-a i 300 GB SSD RAID 10 \u2014 ukupno ih ima 50. Tri 'tanke' nodi su izdvojene za 'master' <i>Prod<\/i>-'Kuba': 16 GB RAM-a, 12 CPU niti.<\/p>\n<p>Za produkciju preferiramo da koristimo 'golo \u017eeljezo' i izbegavamo dodatne slojeve poput <i>OpenStack<\/i>: ne trebaju nam 'bu\u010dni susedi' i CPU <i>steal time<\/i>. In-house OpenStack management complexity roughly doubles.<\/p>\n<p>For CI\/CD of microservices and other infrastructure components, we use a separate GIT server, Helm 3 (we transitioned from Helm 2 rather painfully, but are very pleased with this option, <i>atomic<\/i>), Jenkins, Ansible, and Docker. We love feature branches and deploying to different environments from a single repository.<\/p>\n<h3>Zaklju\u010dek<\/h3>\n<p><img decoding=\"async\" alt=\"Kubernetes v DomKlik: kako mirno spati, medtem ko upravljate s klasterjem z 1000 mikroservisi\" src=\"\/wp-content\/uploads\/2020\/08\/34ddcd1f275c63c1ad821218d16b5abb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nThis is generally how the DevOps process appears from the perspective of an operations engineer at DomClick. The article turned out to be less technical than I expected: therefore, keep an eye on DomClick's news on Habrahabr: there will be more 'hardcore' articles about Kubernetes and beyond.<br \/>\n<br \/>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/501122\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f). \u042f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 Dev &lt;-&gt; Ops, \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 k8s-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e DevOps\/SRE-\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 Ops \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91199","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Kubernetes \u0432 \u0414\u043e\u043c\u041a\u043b\u0438\u043a: \u043a\u0430\u043a \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043d\u0430 1000 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-09T23:42:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-09T23:42:03+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kubernetes at DomClick: how to sleep soundly while managing a cluster of 1000 microservices | ProHoster","description":"My name is Viktor Yagofarov, and I am developing the Kubernetes platform at DomClick as the technical lead of the Ops (operations) team.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Kubernetes \u0432 \u0414\u043e\u043c\u041a\u043b\u0438\u043a: \u043a\u0430\u043a \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043d\u0430 1000 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 | ProHoster","og:description":"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-09T23:42:03+00:00","article:modified_time":"2020-08-09T23:42:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91199","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:32:23","updated":"2022-09-28 06:43:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/91199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=91199"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/91199\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/91200"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=91199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=91199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=91199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}