{"id":77693,"date":"2020-04-13T01:42:39","date_gmt":"2020-04-12T23:42:39","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes"},"modified":"2020-04-13T01:42:39","modified_gmt":"2020-04-12T23:42:39","slug":"cpu-limity-i-agressivnyj-trottling-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes","title":{"rendered":"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Bem. overs.<\/b>: denne l\u00e6rerige historie fra Omio \u2014 en europ\u00e6isk rejseaggregator \u2014 guider l\u00e6serne fra grundl\u00e6ggende teorier til sp\u00e6ndende praktiske detaljer i konfigurationen af Kubernetes. At blive bekendt med s\u00e5danne tilf\u00e6lde hj\u00e6lper ikke kun med at udvide horisonten, men ogs\u00e5 med at forhindre ikke-trivielle problemer.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/1175c9df746e43b5a7d81476164929db.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHar du nogensinde oplevet, at en applikation \"hang\" og stoppede med at svare p\u00e5 statusforesp\u00f8rgsler (health checks), og du ikke kunne forst\u00e5 \u00e5rsagen til denne opf\u00f8rsel? En mulig forklaring relaterer sig til gr\u00e6nsen for CPU-ressourcer. Det er emnet for denne artikel.<\/p>\n<p><b>TL;DR:<br \/>\nVi anbefaler kraftigt at undg\u00e5 CPU-gr\u00e6nser i Kubernetes (eller deaktivere CFS-kvoter i Kubelet), hvis der bruges en Linux-kerne med en fejl i CFS-kvoter. I kernen <noindex><a rel=\"nofollow\" href=\"https:\/\/bugzilla.kernel.org\/show_bug.cgi?id=198197\">er der<\/a><\/noindex> er der en alvorlig og <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/67577\">velkendt<\/a><\/noindex> fejl, der f\u00f8rer til overdreven throttling og latenser.<\/b>.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>I Omio <b>administreres hele infrastrukturen af Kubernetes.<\/b>. Alle vores stateful- og stateless-loads k\u00f8rer eksklusivt p\u00e5 Kubernetes (vi bruger Google Kubernetes Engine). I de sidste seks m\u00e5neder har vi oplevet tilf\u00e6ldige forsinkelser. Applikationer fryser eller stopper med at svare p\u00e5 health checks, mister internetforbindelse osv. Denne opf\u00f8rsel satte os i en blindgyde i lang tid, og endelig besluttede vi at tage fat p\u00e5 problemet.<\/p>\n<p>Artikeloversigt:<\/p>\n<ul>\n<li> Nogle ord om containere og Kubernetes;<\/li>\n<li> Hvordan CPU-anmodninger og -gr\u00e6nser er implementeret;<\/li>\n<li> Hvordan CPU-limitter fungerer i multi-core-milj\u00f8er;<\/li>\n<li> Hvordan man overv\u00e5ger CPU-throttling;<\/li>\n<li> L\u00f8sningen p\u00e5 problemet og nuancer.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Nogle ord om containere og Kubernetes<\/h2>\n<p>\nKubernetes er i essensen den moderne standard inden for infrastruktur. Dets hovedopgave er orkestrering af containere.<\/p>\n<h3>Containere<\/h3>\n<p>\nTidligere har vi v\u00e6ret n\u00f8dt til at skabe artefakter s\u00e5som Java JAR'er\/WAR'er, Python Egg'er eller eksekverbare filer til senere brug p\u00e5 serverne. Men for at f\u00e5 dem til at fungere, var vi n\u00f8dt til at udf\u00f8re ekstra arbejde: installere runtime-milj\u00f8et (Java\/Python), placere de n\u00f8dvendige filer de rigtige steder, sikre kompatibilitet med en specifik version af operativsystemet osv. Med andre ord skulle vi v\u00e6re opm\u00e6rksomme p\u00e5 konfigurationsstyring (hvilket ofte f\u00f8rte til konflikter mellem udviklere og systemadministratorer).<\/p>\n<p><b>Containere har \u00e6ndret alt.<\/b> Nu er artefakten en containerbillede. Det kan forst\u00e5s som en slags udvidet eksekverbil, der indeholder ikke bare programmet, men ogs\u00e5 et fuldgyldigt udf\u00f8relsesmilj\u00f8 (Java\/Python\/\u2026) samt de n\u00f8dvendige filer\/pakker, der er forudinstalleret og klar til brug. Containere kan implementeres og k\u00f8re p\u00e5 forskellige servere uden yderligere handlinger.<\/p>\n<p>Desuden fungerer containere i deres eget sandkassemilj\u00f8. De har deres egen virtuelle netv\u00e6rksadapter, deres eget filsystem med begr\u00e6nset adgang, deres egen proceshierarki, deres egne begr\u00e6nsninger for CPU og hukommelse osv. Alt dette er muligt takket v\u00e6re en s\u00e6rlig subsystem i Linux-kernen \u2014 namespaces (navnerum).<\/p>\n<h3>Kubernetes<\/h3>\n<p>\nSom n\u00e6vnt tidligere er Kubernetes en orkestrator for containere. Det fungerer s\u00e5ledes: Du giver det en pulje af maskiner og siger derefter: \u201eHej, Kubernetes, k\u00f8r ti instanser af min container med 2 processorer og 3 GB hukommelse hver, og hold dem k\u00f8rende!\u201c Kubernetes tager sig af resten. Det finder ledige ressourcer, starter containere og genstarter dem om n\u00f8dvendigt, udsender opdateringer ved version\u00e6ndringer osv. I bund og grund giver Kubernetes dig mulighed for at abstrahere fra hardwarekomponenten og g\u00f8r al den forskellige software anvendelig til implementering og k\u00f8rsel af applikationer.<\/p>\n<p><img decoding=\"async\" alt=\"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/6509bb1b66a4a0f5e9a479d0bd6ececb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kubernetes set fra en almindelig persons synspunkt<\/i><\/p>\n<h2>Hvad er anmodninger og gr\u00e6nser i Kubernetes<\/h2>\n<p>\nOkay, vi har forst\u00e5et containere og Kubernetes. Vi ved ogs\u00e5, at flere containere kan v\u00e6re p\u00e5 \u00e9n maskine.<\/p>\n<p>Man kan lave en analogi med en f\u00e6lles lejlighed. Man tager et stort rum (maskiner\/noder) og lejer det ud til flere lejere (containere). Kubernetes fungerer som ejendomsm\u00e6gler. Sp\u00f8rgsm\u00e5let opst\u00e5r, hvordan kan man forhindre lejerne i at komme i konflikt med hinanden? Hvad hvis en af dem beslutter at tage badev\u00e6relset i en halv dag?<\/p>\n<p>Her kommer anmodninger og gr\u00e6nser i spil. CPU <b>Request<\/b> er kun n\u00f8dvendig til planl\u00e6gning. Det er noget, der ligner en \u201e\u00f8nskeliste\u201c for containeren, som bruges til at finde den mest passende node. Samtidig kan CPU <b>Gr\u00e6nse<\/b> sammenlignes med en lejekontrakt \u2014 s\u00e5 snart vi har fundet en node til containeren, <b>kan den<\/b> ikke overskride de fastsatte gr\u00e6nser. Og her opst\u00e5r problemet...<\/p>\n<h3>Hvordan anmodninger og gr\u00e6nser er implementeret i Kubernetes<\/h3>\n<p>\nKubernetes bruger en indbygget mekanisme i kernen til throttling (cykelspredning) for at implementere CPU-gr\u00e6nser. Hvis applikationen overskrider gr\u00e6nsen, aktiveres throttling (dvs. den f\u00e5r f\u00e6rre CPU-cyklusser). Anmodninger og gr\u00e6nser for hukommelse er organiseret anderledes, s\u00e5 de er nemmere at opdage. Det er tilstr\u00e6kkeligt at kontrollere den seneste status for genstarten af pod'en: er den ikke \"OOMKilled\". Med CPU-throttling er det ikke s\u00e5 simpelt, da K8s kun stiller metrikker til r\u00e5dighed for forbrug, ikke for cgroups.<\/p>\n<h4>CPU Request<\/h4>\n<p>\n<img decoding=\"async\" alt=\"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/fbc8bf3f775ffd9513374ce94b20535d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Hvordan er CPU-request implementeret<\/i><\/p>\n<p>For enkelhedens skyld lad os overveje processen med eksemplet p\u00e5 en maskine med 4-kerne CPU.<\/p>\n<p>K8s bruger kontrolgrupper (cgroups) til at styre fordelingen af ressourcer (hukommelse og CPU). Der er en hierarkisk model tilg\u00e6ngelig: et barn arver gr\u00e6nses\u00e6ttene fra den overordnede gruppe. Detaljerne om fordelingen opbevares i et virtuelt filsystem (<code>\/sys\/fs\/cgroup<\/code>). I tilf\u00e6ldet med CPU er dette <code>\/sys\/fs\/cgroup\/cpu,cpuacct\/*<\/code>.<\/p>\n<p>K8s bruger filen <code>cpu.share<\/code> til at fordele CPU-ressourcer. I vores tilf\u00e6lde modtager den rodkontrolgruppe 4096 andele af CPU-ressourcer\u2014 100% af den tilg\u00e6ngelige CPU-kraft (1 kerne = 1024; dette er en fast v\u00e6rdi). Den rodgruppe fordeler ressourcerne proportionalt afh\u00e6ngigt af andelene for b\u00f8rnene angivet i <code>cpu.share<\/code>, og de omvendt h\u00e5ndterer deres b\u00f8rn p\u00e5 samme m\u00e5de, osv. I en typisk Kubernetes-node har rodkontrolgruppen tre b\u00f8rn: <code>system.slice<\/code>, <code>user.slice<\/code> og <code>kubepods<\/code>. De f\u00f8rste to undergrupper anvendes til at fordele ressourcer mellem kritiske systembelastninger og brugerprogrammer uden for K8s. Den sidste\u2014 <code>kubepods<\/code> \u2014 oprettet af Kubernetes til at fordele ressourcer mellem pod&#8217;erne.<\/p>\n<p>P\u00e5 diagrammet ovenfor kan vi se, at den f\u00f8rste og anden undergruppe har modtaget hver <b>1024<\/b> andel, mens undergruppen kubepod er tildelt <b>4096<\/b> andele. Hvordan er det muligt: for rodgruppen er der kun tilg\u00e6ngelige <b>4096<\/b> andele, mens summen af andelene for dens b\u00f8rn langt overstiger dette tal (<b>6144<\/b>)? Det faktum, at v\u00e6rdien har logisk mening, er grunden til, at Linux-planl\u00e6ggeren (CFS) bruger dette til proportional fordeling af CPU-ressourcer. I vores tilf\u00e6lde modtager de f\u00f8rste to grupper hver <b>680<\/b> reelle andele (16,6% af 4096), mens kubepod f\u00e5r de resterende <b>2736<\/b> andele. I tilf\u00e6lde af stilstand vil de f\u00f8rste to grupper ikke bruge de tildelte ressourcer.<\/p>\n<p>Heldigvis har planl\u00e6ggeren en mekanisme, der forhindrer tab af ubrugte CPU-ressourcer. Den overf\u00f8rer \"inaktive\" ressourcer til en global pulje, hvorfra de fordeles til grupper, der har brug for ekstra processorkraft (overf\u00f8rslen sker i partier for at undg\u00e5 tab fra afrunding). En lignende metode anvendes ogs\u00e5 for alle efterkommere.<\/p>\n<p>Denne mekanisme sikrer en retf\u00e6rdig fordeling af processorkraft og s\u00f8rger for, at ingen proces \"stj\u00e6ler\" ressourcer fra andre.<\/p>\n<h4>CPU Limit<\/h4>\n<p>\nSelvom konfigurationerne af gr\u00e6nser og anmodninger i K8s ligner hinanden, er deres implementering radikalt forskellig: det <b>den mest forvirrende<\/b> og mindst dokumenterede del.<\/p>\n<p>K8s anvender <noindex><a rel=\"nofollow\" href=\"https:\/\/www.kernel.org\/doc\/Documentation\/scheduler\/sched-design-CFS.txt\">CFS quota-mekanismen<\/a><\/noindex> til at implementere gr\u00e6nser. Deres indstillinger angives i filerne <code>cfs_period_us<\/code> og <code>cfs_quota_us<\/code> i cgroup-mappen (den samme mappe, hvor filen befinder sig) <code>cpu.share<\/code>).<\/p>\n<p>I mods\u00e6tning til <code>cpu.share<\/code>, er kvoten baseret p\u00e5 <b>tidsperioden<\/b>, ikke p\u00e5 den tilg\u00e6ngelige processorkraft. <code>cfs_period_us<\/code> definerer varigheden af perioden (epoch) \u2014 dette er altid 100000 \u00b5s (100 ms). K8s har mulighed for at \u00e6ndre denne v\u00e6rdi, men den er i \u00f8jeblikket kun tilg\u00e6ngelig i alpha-versionen. Planl\u00e6ggeren bruger epoch til at genstarte de brugte kvoter. Den anden fil, <code>cfs_quota_us<\/code>, angiver den tilg\u00e6ngelige tid (kvote) i hver epoch. Bem\u00e6rk, at den ogs\u00e5 angives i mikrosekunder. Kvoten kan overstige perioden; med andre ord kan den v\u00e6re mere end 100 ms.<\/p>\n<p>Lad os overveje to scenarier p\u00e5 16-kernede maskiner (den mest almindelige type computere hos os i Omio):<\/p>\n<p><img decoding=\"async\" alt=\"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/61c6105320af3a92a91cec1007da0d45.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Scenarie 1: 2 tr\u00e5de og en gr\u00e6nse p\u00e5 200 ms. Uden throttling<\/i><\/p>\n<p><img decoding=\"async\" alt=\"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/c33993341d5395bb73dda1f4c8482a11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Scenarie 2: 10 tr\u00e5de og en gr\u00e6nse p\u00e5 200 ms. Throttling begynder efter 20 ms, adgangen til CPU-ressourcerne genoptages efter yderligere 80 ms<\/i><\/p>\n<p>Antag, at du har indstillet CPU-gr\u00e6nsen til <b>2<\/b> kerner; Kubernetes konverterer denne v\u00e6rdi til 200 ms. Det betyder, at containeren kan maksimalt bruge 200 ms CPU-tid uden throttling.<\/p>\n<p>Og her begynder det interessante. Som n\u00e6vnt ovenfor er den tilg\u00e6ngelige kvote 200 ms. Hvis du k\u00f8rer parallelt <b>ti<\/b> str\u00f8mme p\u00e5 en 12-kernet maskine (se illustration til scenarie 2), mens alle andre pod&#8217;er er inaktive, vil kvoten blive opbrugt p\u00e5 kun 20 ms (da 10 * 20 ms = 200 ms), og alle str\u00f8mme fra denne pod vil \"h\u00e6nge\" <i>(throttle)<\/i> i de n\u00e6ste 80 ms. Det forv\u00e6rrer allerede den n\u00e6vnte situation <noindex><a rel=\"nofollow\" href=\"https:\/\/bugzilla.kernel.org\/show_bug.cgi?id=198197\">planl\u00e6gningsfejl<\/a><\/noindex>, som medf\u00f8rer overdreven throttling, og containeren kan ikke engang opfylde sin tildelte kvote.<\/p>\n<h2>Hvordan vurderer man throttling i pod&#8217;er?<\/h2>\n<p>\nBare log ind i pod'en og udf\u00f8r <code>cat \/sys\/fs\/cgroup\/cpu\/cpu.stat<\/code>.<\/p>\n<ul>\n<li> <code>nr_periods<\/code> \u2014 det samlede antal planl\u00e6gningsperioder;<\/li>\n<li> <code>nr_throttled<\/code> \u2014 antallet af throttled-perioder ud af <code>nr_periods<\/code>;<\/li>\n<li> <code>throttled_time<\/code> \u2014 det samlede throttled-tid i nanosekunder.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/a1818614914a8c31f7f7f1331cc02e8b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Hvad sker der egentlig?<\/h3>\n<p>\nResultatet er h\u00f8j throttling i alle applikationer. Nogle gange er det <b>1,5 gange<\/b> st\u00e6rkere end forventet!<\/p>\n<p>Dette f\u00f8rer til forskellige fejl \u2014 fejl ved beredskabscheck (readiness), h\u00e6ngende containere, netv\u00e6rksafbrydelser, timeout i servicekald. I sidste ende resulterer det i \u00f8get forsinkelse og flere fejl.<\/p>\n<h2>L\u00f8sning og konsekvenser<\/h2>\n<p>\nHer er det enkelt. Vi har opgivet CPU-gr\u00e6nserne og har opdateret kernens OS i klyngerne til den nyeste version, hvor fejlen er rettet. Antallet af fejl (HTTP 5xx) i vores tjenester faldt straks betydeligt:<\/p>\n<h3>HTTP 5xx-fejl<\/h3>\n<p>\n<img decoding=\"async\" alt=\"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/86ab1694b952b5451a4ae075cbda2788.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>HTTP 5xx-fejl for en kritisk service<\/i><\/p>\n<h3>p95 svartid<\/h3>\n<p>\n<img decoding=\"async\" alt=\"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/63922c8eb468366a7d05154a3adf40e6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Forsinkelse af anmodninger til en kritisk service, 95. percentil<\/i><\/p>\n<h3>Driftsomkostninger<\/h3>\n<p>\n<img decoding=\"async\" alt=\"CPU-gr\u00e6nser og aggressiv throttling i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/8405c26fcbd82853e296fa7e3bcba131.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Antallet af forbrugt eksemplartimer<\/i><\/p>\n<h2>Hvor ligger finten?<\/h2>\n<p>\nSom n\u00e6vnt i begyndelsen af artiklen:<\/p>\n<blockquote><p>Man kan lave en analogi med en f\u00e6lles lejlighed\u2026 Kubernetes fungerer som en udlejer. Men hvordan kan man holde lejerne fra at skabe konflikter med hinanden? Hvad hvis en af dem, lad os sige, beslutter at tage badev\u00e6relset i et halvt d\u00f8gn?<\/p><\/blockquote>\n<p>\nHer er finten. En uansvarlig container kan overtage alle tilg\u00e6ngelige CPU-ressourcer p\u00e5 maskinen. Hvis du har en solid stack af applikationer (for eksempel korrekt konfigurerede JVM, Go, Node VM), s\u00e5 er det ikke et problem: man kan arbejde under s\u00e5danne forhold i lang tid. Men hvis applikationerne er d\u00e5rligt optimeret eller slet ikke optimeret (<code>FROM java:latest<\/code>), kan situationen komme ud af kontrol. Hos Omio har vi automatiserede grundl\u00e6ggende Dockerfiles med passende standardindstillinger til de prim\u00e6re sprog, s\u00e5 vi har ikke oplevet dette problem.<\/p>\n<p>Vi anbefaler at overv\u00e5ge metrikker <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/usemethod.html\">USE<\/a><\/noindex> (brug, m\u00e6tning og fejl), API-forsinkelser og fejlrate. S\u00f8rg for, at resultaterne lever op til forventningerne.<\/p>\n<h2>Links<\/h2>\n<p>\nS\u00e5dan er vores historie. De f\u00f8lgende materialer har v\u00e6ret til stor hj\u00e6lp til at forst\u00e5, hvad der foreg\u00e5r:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.kernel.org\/doc\/Documentation\/scheduler\/sched-design-CFS.txt\">kernel.org \u2192 CFS-scheduler<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.kernel.org\/doc\/Documentation\/scheduler\/sched-bwc.txt\">kernel.org \u2192 CFS-b\u00e5ndbreddekontrol<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/engineering.squarespace.com\/blog\/2017\/understanding-linux-container-scheduling\">Forst\u00e5else af Linux-containerplanl\u00e6gning<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.linuxjournal.com\/content\/everything-you-need-know-about-linux-containers-part-i-linux-control-groups-and-process\">Alt hvad du beh\u00f8ver at vide om Linux-containere, del I: Linux Control Groups og procesisolering<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/k8s.af\/\">Kubernetes Failure Stories<\/a><\/noindex> \u2014 s\u00f8g efter \u00abcpu throttling\u00bb.<\/li>\n<\/ul>\n<p>\nKubernetes-fejlrapporter:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/51135#issuecomment-373454012\">#51135: Avoid setting CPU limits for Guaranteed pods<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/67577\">#67577: CFS quotas can lead to unnecessary throttling<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/bobrik\/2030ff040fad360327a5fab7a09c4ff1\">For aggressiv CFS<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nHar du oplevet lignende problemer i din praksis, eller har du erfaring med throttling i containeriserede produktionsmilj\u00f8er? Del din historie i kommentarfeltet!<\/p>\n<h2>P.S. fra overs\u00e6tteren<\/h2>\n<p>\nL\u00e6s ogs\u00e5 p\u00e5 vores blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459326\/\">Autoskalering og ressourceh\u00e5ndtering i Kubernetes (oversigt og video pr\u00e6sentation)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/418269\/\">S\u00e5dan fungerer CPU-manageren i Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/342822\/\">Hvad sker der i Kubernetes, n\u00e5r du k\u00f8rer kubectl run? Del 2<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/489668\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u044d\u0442\u0430 \u043f\u043e\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f Omio \u2014 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u043e\u0433\u043e \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0439 \u2014 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u0435\u043e\u0440\u0438\u0438 \u0434\u043e \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Kubernetes. \u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u043b\u0443\u0447\u0430\u044f\u043c\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043a\u0440\u0443\u0433\u043e\u0437\u043e\u0440, \u043d\u043e \u0438 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0414\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0432\u0430\u043c \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u00ab\u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u043b\u043e\u00bb \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":77694,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-77693","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=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u044d\u0442\u0430 \u043f\u043e\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f Omio \u2014 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u043e\u0433\u043e \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0439 \u2014 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u0435\u043e\u0440\u0438\u0438 \u0434\u043e \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Kubernetes.\" \/>\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\/cpu-limity-i-agressivnyj-trottling-v-kubernetes\" \/>\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\udd47CPU-\u043b\u0438\u043c\u0438\u0442\u044b \u0438 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0442\u0440\u043e\u0442\u0442\u043b\u0438\u043d\u0433 \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u044d\u0442\u0430 \u043f\u043e\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f Omio \u2014 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u043e\u0433\u043e \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0439 \u2014 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u0435\u043e\u0440\u0438\u0438 \u0434\u043e \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Kubernetes.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes\" \/>\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-04-12T23:42:39+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-12T23:42:39+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\udd47CPU-gr\u00e6nser og aggressiv throttling i Kubernetes | ProHoster","description":"Obs. overs.: Denne oplysende historie om Omio \u2014 Europas rejseaggregator \u2014 f\u00f8rer l\u00e6serne fra grundl\u00e6ggende teori til sp\u00e6ndende praktiske detaljer om Kubernetes-konfiguration.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes","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\udd47CPU-\u043b\u0438\u043c\u0438\u0442\u044b \u0438 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0442\u0440\u043e\u0442\u0442\u043b\u0438\u043d\u0433 \u0432 Kubernetes | ProHoster","og:description":"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u044d\u0442\u0430 \u043f\u043e\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f Omio \u2014 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u043e\u0433\u043e \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u0430 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0439 \u2014 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u0435\u043e\u0440\u0438\u0438 \u0434\u043e \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Kubernetes.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes","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-04-12T23:42:39+00:00","article:modified_time":"2020-04-12T23:42:39+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"77693","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 17:13:23","updated":"2022-09-29 12:06:45","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\/77693","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=77693"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/77693\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/77694"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=77693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=77693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=77693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}