{"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\/da\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","title":{"rendered":"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Mit navn er Viktor Yagofarov, og jeg arbejder med udviklingen af Kubernetes-platformen i DomKlik som teknisk leder for udvikling i Ops-teamet (drift). Jeg vil gerne fort\u00e6lle om vores Dev &lt;-&gt; Ops-processer, om s\u00e6regenhederne ved at drive et af de st\u00f8rste k8s-clustre i Rusland, samt om de DevOps\/SRE-praksisser, som vores team anvender.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" 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>Ops-teamet<\/h4>\n<p>\nI Ops-teamet arbejder der i \u00f8jeblikket 15 personer. Tre af dem ansvar for kontoret, to arbejder i en anden tidszone og er tilg\u00e6ngelige, ogs\u00e5 om natten. Dermed er der altid nogen fra Ops ved sk\u00e6rmen, klar til at reagere p\u00e5 h\u00e6ndelser af enhver kompleksitet. Vi har ikke nattevagter, hvilket beskytter vores mentale helbred og giver alle mulighed for at f\u00e5 en god nats s\u00f8vn og tilbringe tid v\u00e6k fra computeren.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" src=\"\/wp-content\/uploads\/2020\/08\/47051db273f116df376e64bad67c6f37.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKompetencerne er forskellige hos alle: netv\u00e6rksspecialister, DBA'er, eksperter i ELK-stakken, Kubernetes-administratorer\/-udviklere, overv\u00e5gningsspecialister, virtualiseringseksperter, hardware-specialister osv. Det, der forener os, er, at hver is\u00e6r i nogen grad kan erstatte en af os: for eksempel introducere nye noder i k8s-clusteret, opdatere PostgreSQL, skrive CI\/CD-pipelines + Ansible, automatisere noget i Python\/Bash\/Go, forbinde hardware i datacenteret. St\u00e6rke kompetencer inden for et bestemt omr\u00e5de hindrer ikke en \u00e6ndring af arbejdsretning og begyndelsen p\u00e5 at udvikle sig inden for et andet omr\u00e5de. For eksempel startede jeg i virksomheden som PostgreSQL-specialist, men nu er mit prim\u00e6re ansvarsomr\u00e5de Kubernetes-clustre. I teamet bliver enhver v\u00e6kst kun v\u00e6rdsat, og der er en st\u00e6rk f\u00f8lelse af tolerance.<\/p>\n<p>Forresten, vi rekrutterer. Kravene til kandidater er ret standard. Personligt er det vigtigt for mig, at personen passer ind i teamet, er konfliktfri, men ogs\u00e5 kan forsvare sine synspunkter, har lyst til at udvikle sig og ikke er bange for at g\u00f8re noget nyt, samt kommer med sine egne ideer. Derudover er f\u00e6rdigheder i programmering med scriptsprog, kendskab til grundl\u00e6ggende Linux og engelsk n\u00f8dvendigt. Engelsk er kun for, at personen i tilf\u00e6lde af problemer kan finde l\u00f8sningen p\u00e5 nettet p\u00e5 10 sekunder, og ikke p\u00e5 10 minutter. Det er sv\u00e6rt at finde specialister med dybdeg\u00e5ende viden om Linux: det lyder sjovt, men to ud af tre kandidater kan ikke svare p\u00e5 sp\u00f8rgsm\u00e5let 'Hvad er Load Average? Hvad best\u00e5r det af?', og sp\u00f8rgsm\u00e5let 'Hvordan samler man en core dump fra et C-program' ses som noget fra en superhelteverden... eller dinosaurer. Vi m\u00e5 leve med dette, da folk ofte har andre kompetencer godt udviklet, og vi kan l\u00e6re dem 'linux'. Svaret p\u00e5 sp\u00f8rgsm\u00e5let 'Hvorfor er det n\u00f8dvendigt for en DevOps-engineer at vide alt dette i nutidens skyverden' m\u00e5 vi lade st\u00e5 uden for artiklen, men hvis jeg skal opsummere med tre ord: det hele er n\u00f8dvendigt.<\/p>\n<h4>Tools-teamet<\/h4>\n<p>\nTools-teamet spiller en stor rolle i automatiseringen. Deres hovedopgave er at skabe brugervenlige grafiske og CLI-v\u00e6rkt\u00f8jer til udviklere. For eksempel g\u00f8r vores interne udvikling Confer det muligt at rulle en applikation ud i Kubernetes med blot nogle f\u00e5 klik med musen, indstille ressourcer, n\u00f8gler fra vault osv. Tidligere brugte vi Jenkins + Helm 2, men vi m\u00e5tte udvikle vores eget v\u00e6rkt\u00f8j for at undg\u00e5 copy-paste og bringe ensartethed ind i softwarelivscyklussen.<\/p>\n<p>Ops-teamet skriver ikke pipelines for udviklerne, men kan r\u00e5dgive om alle sp\u00f8rgsm\u00e5l relateret til deres skrivning (nogle har stadig Helm 3).<\/p>\n<h4>DevOps<\/h4>\n<p>\nN\u00e5r det kommer til DevOps, ser vi det p\u00e5 denne m\u00e5de:<\/p>\n<p>Dev-teamene skriver koden, ruller den ud gennem Confer fra dev -&gt; qa\/stage -&gt; prod. Ansvarligheden for at sikre, at koden ikke bremser og ikke genererer fejl, ligger hos Dev- og Ops-teamerne. I dagtimerne skal den p\u00e5g\u00e6ldende Ops-vagt reagere p\u00e5 h\u00e6ndelser med deres applikation, og om aftenen og natten skal den vagthavende administrator (Ops) v\u00e6kke den vagthavende udvikler, hvis han er sikker p\u00e5, at problemet ikke ligger i infrastrukturen. Alle metrics og alarmer i monitoreringen vises automatisk eller semi-automatisk.<\/p>\n<p>Ops' ansvarsomr\u00e5de begynder, n\u00e5r applikationen g\u00e5r i produktion, men Dev's ansvar slutter ikke der \u2014 vi arbejder p\u00e5 samme projekt og er i samme b\u00e5d.<\/p>\n<p>Udviklerne r\u00e5dgiver administratorerne, hvis der er brug for hj\u00e6lp til at skrive en administrativ mikrotjeneste (f.eks. Go backend + HTML5), og administratorerne r\u00e5dgiver udviklerne om alle infrastrukturelle sp\u00f8rgsm\u00e5l eller sp\u00f8rgsm\u00e5l relateret til k8s.<\/p>\n<p>Vi har i \u00f8vrigt slet ikke nogen monolit, kun mikrotjenester. Antallet varierer lige nu mellem 900 og 1000 i prod k8s-klusteret, m\u00e5lt p\u00e5 antal. <i>deployments<\/i>Antallet af pods ligger mellem 1700 og 2000. I produktionen er der lige nu cirka 2000 pods.<\/p>\n<p>Jeg kan ikke give pr\u00e6cise tal, da vi overv\u00e5ger un\u00f8dvendige mikrotjenester og fjerner dem i et semi-automatisk regime. At holde \u00f8je med un\u00f8dvendige enheder i k8s hj\u00e6lpes af <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/useless-operator\">useless-operator<\/a><\/noindex>, hvilket sparer ressourcer og penge.<\/p>\n<h2> Ressourcestyring <\/h2>\n<p><\/p>\n<h4> Overv\u00e5gning <\/h4>\n<p>\nEn solid og informativ overv\u00e5gning bliver en hj\u00f8rnesten i driften af et stort kluster. Vi har endnu ikke fundet en universall\u00f8sning, der d\u00e6kker 100 % af alle overv\u00e5gningsbehov, s\u00e5 vi udvikler periodisk forskellige skr\u00e6ddersyede l\u00f8sninger i dette milj\u00f8.<\/p>\n<ul>\n<li><b>Zabbix<\/b>. Den gode gamle overv\u00e5gning, som prim\u00e6rt er designet til at overv\u00e5ge den generelle tilstand af infrastrukturen. Den fort\u00e6ller os, n\u00e5r en node svigter i CPU, hukommelse, disk, netv\u00e6rk osv. Intet overnaturligt, men vi har ogs\u00e5 en separat DaemonSet af agenter, som vi for eksempel bruger til at overv\u00e5ge tilstanden af DNS i klusteret: s\u00f8ger efter tr\u00e6gge pods i coredns, tjekker tilg\u00e6ngeligheden af eksterne v\u00e6rter. Det kunne virke un\u00f8dvendigt, men ved h\u00f8je trafikm\u00e6ngder er denne komponent et alvorligt svigtpunkt. Tidligere har jeg allerede <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/495450\/\">beskrevet<\/a><\/noindex>, hvordan jeg k\u00e6mpede med DNS-ydeevnen i klusteret.<\/li>\n<li><b>Prometheus Operator<\/b>. En r\u00e6kke forskellige eksport\u00f8rer giver et stort overblik over alle komponenter i klusteret. Derefter visualiserer vi alt dette p\u00e5 store dashboards i Grafana, og til varsler bruger vi alertmanager.\n<\/li>\n<\/ul>\n<p>\nEt andet nyttigt v\u00e6rkt\u00f8j for os er <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/list-ingress\">list-ingress<\/a><\/noindex>Vi skrev det, efter at vi flere gange st\u00f8dte p\u00e5 situationen, hvor et hold overskred Ingress-vejene for et andet hold, hvilket resulterede i 50x-fejl. Nu tjekker udviklerne, inden de deployer til produktion, at ingen bliver ber\u00f8rt, og for mit team er dette et godt v\u00e6rkt\u00f8j til f\u00f8rste diagnose af Ingress-problemer. Det er sjovt, at det f\u00f8rst blev skrevet til administratorerne og s\u00e5 temmelig \"klodset\" ud, men efter at v\u00e6rkt\u00f8jet blev popul\u00e6rt blandt udviklingsteamene, har det gennemg\u00e5et en betydelig forvandling og ligner ikke l\u00e6ngere \"administrator lavede en webgr\u00e6nseflade for administratorer\". Snart vil vi opgive dette v\u00e6rkt\u00f8j, og s\u00e5danne situationer vil blive valideret inden udgivelsen af pipeline.<\/p>\n<h4>Teamressourcer i \"Kuben\"<\/h4>\n<p>\nInden vi g\u00e5r videre til eksemplerne, er det v\u00e6rd at forklare, hvordan vi tildeler ressourcer til <i>mikrotjenester<\/i>.<\/p>\n<p>For at forst\u00e5, hvilke teams og i hvilke m\u00e6ngder der bruger deres <i>ressourcer<\/i> (CPU, hukommelse, lokal SSD), tildeler vi hver team sin egen <i>namespace<\/i> i \"Kuben\" og begr\u00e6nser dens maksimale muligheder for CPU, hukommelse og disk, efter at vi har dr\u00f8ftet holdenes behov. Derfor vil et hold i almindelighed ikke blokere hele klyngen for deployment ved at reservere tusindkerner og terabyte hukommelse til sig selv. Adgange i namespace gives via AD (vi bruger RBAC). Namespace og deres begr\u00e6nsninger tilf\u00f8jes gennem en pull-request i GIT-repositoriet og rulles derefter automatisk ud gennem Ansible-pipeline.<\/p>\n<p>Eksempel p\u00e5 ressourceallokering til et team:<\/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>Requests og limits<\/h4>\n<p>\nI \"Kuben\" <i>Request<\/i> \u2014 er det antal, der garanteret er reserveret til ressourcer under <i>pod<\/i> (en eller flere docker-containere) i klyngen. Limit er et ikke-garanteret maksimum. Man kan ofte se p\u00e5 graferne, hvordan et eller andet hold har sat for mange requests for alle deres applikationer og ikke kan deploye applikationen i \"Kuben\", fordi alle requests allerede er \"brugt op\" for deres namespace.<\/p>\n<p>Den rette m\u00e5de at komme ud af en s\u00e5dan situation p\u00e5: se p\u00e5 det reelle ressourceforbrug og sammenligne det med det anmodede antal (Request).<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" src=\"\/wp-content\/uploads\/2020\/08\/417373d4421064f28d57a03b6bb5bf94.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" src=\"\/wp-content\/uploads\/2020\/08\/3168ad6dc8b159059b21e1177e145376.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00e5 sk\u00e6rmbillederne ovenfor er det synligt, at de \"anmodede\" (Requested) CPU\u2019er tilpasser sig det reelle antal tr\u00e5de, mens Limits kan overstige det reelle antal CPU-tr\u00e5de =)<\/p>\n<p>Lad os nu se n\u00e6rmere p\u00e5 en namespace (jeg har valgt namespace kube-system - system namespace til komponenterne af \"Kuben\") og se p\u00e5 forholdet mellem det reelt anvendte CPU-tid og hukommelse i forhold til det \u00f8nskede:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" src=\"\/wp-content\/uploads\/2020\/08\/ed6160de5397b8cd39cbae172d4bb872.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet er tydeligt, at der er reserveret meget mere hukommelse og CPU til systemtjenester, end der reelt anvendes. I tilf\u00e6ldet med kube-system er dette berettiget: tidvis har nginx ingress controller eller nodelocaldns oplevet spidsbelastning p\u00e5 CPU og indtaget en hel del RAM, s\u00e5 en s\u00e5dan buffer er berettiget her. Derudover kan vi ikke stole p\u00e5 graferne fra de seneste 3 timer: det er \u00f8nskeligt at se historiske metrikker over en l\u00e6ngere periode.<\/p>\n<p>Der er udviklet et system med \"anbefalinger\". For eksempel kan vi her se, hvilke ressourcer der ville v\u00e6re bedst at h\u00e6ve \"gr\u00e6nserne\" (\u00f8verste tilladte gr\u00e6nse) for, s\u00e5 vi ikke oplever \"throttling\": det \u00f8jeblik, hvor CPU eller hukommelse allerede er brugt op inden for den tildelte tidskvote og venter p\u00e5, at det bliver \"afrimmet\":<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" src=\"\/wp-content\/uploads\/2020\/08\/f23aece10a585e6847bcacfe947031d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOg her er pods, som burde d\u00e6mpe deres appetit:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" src=\"\/wp-content\/uploads\/2020\/08\/1ec9996ce6355aeba603008d51aac209.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOm <i>throttling<\/i> + overv\u00e5gning af ressourcer kan blive emnet for mange artikler, s\u00e5 stil sp\u00f8rgsm\u00e5l i kommentarerne. I f\u00e5 ord kan jeg sige, at opgaven med at automatisere s\u00e5danne metrikker er ret kompleks og kr\u00e6ver meget tid og finjustering med \"vindues\" funktioner og \"CTEs\" i Prometheus \/ VictoriaMetrics (disse termer er sat i citationstegn, da der n\u00e6sten ikke findes noget s\u00e5dant i PromQL, og det bliver n\u00f8dvendigt at konstruere skr\u00e6kkelige foresp\u00f8rgsler, som str\u00e6kker sig over flere sk\u00e6rme og optimere dem).<\/p>\n<p>Som resultat har udviklerne v\u00e6rkt\u00f8jer til at overv\u00e5ge deres namespaces i \"Kuben\", og de kan selv v\u00e6lge, hvor og hvorn\u00e5r de kan \"besk\u00e6re\" ressourcerne for hvilke applikationer, og hvilke pods der kan f\u00e5 lov at bruge hele CPU'en hele natten.<\/p>\n<h4>Metodologier<\/h4>\n<p>\nI virksomheden, som nu er <i>moderne<\/i>, f\u00f8lger vi DevOps og <i>SRE<\/i>-praksis. N\u00e5r der i virksomheden er 1000 mikroservices, omkring 350 udviklere og 15 administratorer til hele infrastrukturen, er det n\u00f8dvendigt at v\u00e6re \"moderne\": bag alle disse \"buzzwords\" gemmer sig et presserende behov for at automatisere alt, og administratorerne m\u00e5 ikke v\u00e6re flaskehalsen i processerne.<\/p>\n<p>Som Ops leverer vi forskellige metrikker og dashboards til udviklerne, relateret til svartiderne for tjenesterne og deres fejl.<\/p>\n<p>Vi bruger metodologier som: <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\">USE<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/forepaas\/distributed-monitoring-101-the-four-golden-signals-305bbbc33d35\">Golden Signals<\/a><\/noindex>, ved at kombinere dem. Vi fors\u00f8ger at minimere antallet af dashboards, s\u00e5 man ved et enkelt blik kan se, hvilken service der nedgraderer (for eksempel svarkoder pr. sekund, svar tider i 99. percentilen), osv. S\u00e5 snart der er behov for nye metrikker til de f\u00e6lles dashboards, tegner vi dem og tilf\u00f8jer dem straks.<\/p>\n<p><i>Jeg har ikke tegnet grafer i en m\u00e5ned. Det er sikkert et godt tegn: det betyder, at de fleste \u00ab\u00f8nsker\u00bb allerede er implementeret. Der var tidspunkter, hvor jeg mindst tegnede en ny graf hver dag i l\u00f8bet af ugen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" src=\"\/wp-content\/uploads\/2020\/08\/574f1b4d2be78fb779f1771bffac51dd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" src=\"\/wp-content\/uploads\/2020\/08\/6ab2aa05f912839b14bdbcf84faaeb3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet resulterende resultat er v\u00e6rdifuldt, fordi udviklerne nu sj\u00e6ldent g\u00e5r til administratorerne med sp\u00f8rgsm\u00e5l om \u00abhvor man kan se en metrik\u00bb.<\/p>\n<p>Implementering <i>Service Mesh<\/i> er lige om hj\u00f8rnet og skal g\u00f8re alles liv meget nemmere; kollegerne fra Tools er allerede t\u00e6t p\u00e5 at implementere den abstrakte \u00absunde Istio\u00bb: livscyklussen for hver HTTP(s)-anmodning vil v\u00e6re synlig i overv\u00e5gningen, og man vil altid kunne forst\u00e5 \u00abhvor det gik galt\u00bb ved inter-service (og ikke kun) interaktion. Tilmeld dig nyhederne fra DomKliks hub. =)<\/p>\n<h2>Underst\u00f8ttelse af Kubernetes-infrastruktur<\/h2>\n<p>\nHistorisk set har vi brugt en patched version <i>Kubespray<\/i> \u2014 Ansible-rolle til implementering, udvidelse og opdatering af Kubernetes. P\u00e5 et tidspunkt blev underst\u00f8ttelsen af non-kubeadm installationer fjernet fra hovedgrenen, og overgangen til kubeadm blev ikke foresl\u00e5et. Resultatet blev, at Southbridge lavede sin egen fork (med st\u00f8tte til kubeadm og hurtige l\u00f8sninger p\u00e5 kritiske problemer). <\/p>\n<p>Opdateringsprocessen for alle k8s-klynger ser s\u00e5ledes ud:<\/p>\n<ul>\n<li>Vi tager <i>Kubespray<\/i> fra Southbridge, tjekker mod vores gren, mergen.<\/li>\n<li>Vi ruller opdateringen ud i <i>Stress<\/i>-\u00abKube\u00bb.<\/li>\n<li>Vi ruller opdateringen ud \u00e9n node ad gangen (i Ansible er det \u00abserial: 1\u00bb) i <i>Dev<\/i>-\u00abKube\u00bb.<\/li>\n<li>Opdaterer <i>Prod<\/i> l\u00f8rdag aften \u00e9n node ad gangen.<\/li>\n<\/ul>\n<p>\nI fremtiden er der planer om at erstatte <i>Kubespray<\/i> med noget hurtigere og g\u00e5 over til <i>kubeadm<\/i>.<\/p>\n<p>Vi har tre \u00abKuber\u00bb: Stress, Dev og Prod. Vi planl\u00e6gger at starte en til (<i>hot standby<\/i>) Prod-\u00abKube\u00bb i det andet datacenter. <i>Stress<\/i> og <i>Dev<\/i> lever i \u00abvirtual machines\u00bb (oVirt for Stress og VMWare cloud for Dev). <i>Prod<\/i>-\u00abKube\u00bb lever p\u00e5 \u00abbare metal\u00bb: det er ens noder med 32 CPU tr\u00e5de, 64-128 Gb RAM og 300 Gb SSD RAID 10 \u2014 i alt er der 50 stykker. Tre \u00abtynde\u00bb noder er tildelt til \u00abmasterne\u00bb <i>Prod<\/i>-\u00abKubes\u00bb: 16 Gb RAM, 12 CPU tr\u00e5de.<\/p>\n<p>Til produktionen foretr\u00e6kker vi at bruge \u00abbare metal\u00bb og undg\u00e5 un\u00f8dvendige lag s\u00e5som <i>OpenStack<\/i>: vi har ikke brug for \u00abst\u00f8jende naboer\u00bb og CPU <i>steal time<\/i>. Og kompleksiteten i administrationen fordobles ved in-house OpenStack.<\/p>\n<p>Til CI\/CD af 'Kube'- og andre infrastrukturelle komponenter bruger vi en separat GIT-server, Helm 3 (vi overgik forholdsvis smertefuldt fra Helm 2, men er meget glade for muligheden <i>atomic<\/i>), Jenkins, Ansible og Docker. Vi elsker feature-branches og deployment til forskellige milj\u00f8er fra det samme repository.<\/p>\n<h3>Konklusion<\/h3>\n<p><img decoding=\"async\" alt=\"Kubernetes i DomKlik: hvordan sove roligt mens du administrerer et cluster med 1000 mikrotjenester\" src=\"\/wp-content\/uploads\/2020\/08\/34ddcd1f275c63c1ad821218d16b5abb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nS\u00e5dan ser DevOps-processen i virksomheden DomClick ud fra en driftsingeni\u00f8rs perspektiv. Artiklen blev mindre teknisk, end jeg havde forventet: s\u00e5 hold \u00f8je med DomClicks nyheder p\u00e5 Habr: der vil komme mere 'hardcore' indhold om Kubernetes og andet.<br \/>\n<br \/>Kilde: <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.3 - 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\/da\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 i DomClick: hvordan man sover roligt, mens man administrerer et klynge med 1000 mikrotjenester | ProHoster","description":"Mit navn er Viktor Yagofarov, og jeg arbejder med udviklingen af Kubernetes-platformen i virksomheden DomClick som teknisk leder af udvikling i Ops-teamet (drift).","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/91199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=91199"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/91199\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/91200"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=91199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=91199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=91199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}