{"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\/nl\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes","title":{"rendered":"CPU-limieten en agressieve throttling in Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Opmerking vertaler.<\/b>: dit leerzame verhaal van Omio \u2014 de Europese reisaggregator \u2014 leidt de lezers van basisprincipes naar fascinerende praktische details in de configuratie van Kubernetes. Het kennismaken met dergelijke gevallen helpt niet alleen om de horizon te verbreden, maar ook om niet-triviale problemen te voorkomen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"CPU-limieten en agressieve throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/1175c9df746e43b5a7d81476164929db.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHeeft u ooit te maken gehad met een applicatie die 'vastliep', niet meer reageerde op gezondheidscontroles en u de oorzaak van dit gedrag niet kon begrijpen? Een mogelijke verklaring heeft te maken met de CPU-quotumlimieten. Daarover gaat dit artikel.<\/p>\n<p><b>TL;DR:<br \/>\nWij raden ten zeerste aan om CPU-limieten in Kubernetes (of CFS-quoteringen in Kubelet uit te schakelen) te vermijden, als er gebruik wordt gemaakt van een Linux-kernel met een fout in CFS-quoteringen. In de kernel <noindex><a rel=\"nofollow\" href=\"https:\/\/bugzilla.kernel.org\/show_bug.cgi?id=198197\">is beschikbaar<\/a><\/noindex> is er een ernstige en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/67577\">goed bekende<\/a><\/noindex> bug die leidt tot overmatige throttling en vertragingen.<\/b>.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Bij Omio <b>wordt alle infrastructuur beheerd door Kubernetes.<\/b>. Al onze stateful en stateless workloads draaien uitsluitend op Kubernetes (wij gebruiken Google Kubernetes Engine). In de afgelopen zes maanden hebben we willekeurige haperingen waargenomen. Applicaties bevriezen of reageren niet meer op gezondheidscontroles, verliezen het netwerk en dergelijke. Dit gedrag heeft ons lange tijd in verwarring gebracht, en uiteindelijk hebben we besloten om het probleem grondig aan te pakken.<\/p>\n<p>Korte samenvatting van het artikel:<\/p>\n<ul>\n<li> Enkele woorden over containers en Kubernetes;<\/li>\n<li> Hoe zijn CPU-aanvragen en limieten ge\u00efmplementeerd;<\/li>\n<li> Hoe CPU-limiet werkt in omgevingen met meerdere cores;<\/li>\n<li> Hoe throttling van CPU te monitoren;<\/li>\n<li> Oplossing van het probleem en nuances.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Enkele woorden over containers en Kubernetes<\/h2>\n<p>\nKubernetes is in essentie de moderne standaard in de wereld van infrastructuur. De belangrijkste taak is containerorkestratie.<\/p>\n<h3>Containers<\/h3>\n<p>\nIn het verleden moesten we artefacten cre\u00ebren zoals Java JAR's\/WAR's, Python Eggs of uitvoerbare bestanden voor later gebruik op servers. Echter, om ze te laten functioneren, was extra werk nodig: het installeren van een runtime-omgeving (Java\/Python), de noodzakelijke bestanden op de juiste plaatsen plaatsen, zorgen voor compatibiliteit met een specifieke versie van het besturingssysteem, enzovoort. Met andere woorden, we moesten veel aandacht besteden aan configuratiemanagement (wat vaak leidde tot onenigheid tussen ontwikkelaars en systeembeheerders).<\/p>\n<p><b>Containers hebben alles veranderd.<\/b> Nu is de artefact een container image. Dit kan worden gezien als een soort uitgebreide uitvoerbare bestand, dat niet alleen het programma bevat, maar ook een volledige uitvoeringsomgeving (Java\/Python\/\u2026), evenals de benodigde bestanden\/pakketten, voorge\u00efnstalleerd en klaar voor gebruik. Containers kunnen op verschillende servers worden ingezet en uitgevoerd zonder enige extra handelingen.<\/p>\n<p>Bovendien werken containers in hun eigen sandbox-omgeving. Ze hebben hun eigen virtuele netwerkaart, een eigen bestandssysteem met beperkte toegang, hun eigen proces hi\u00ebrarchie, hun eigen beperkingen op CPU en geheugengebruik, enzovoort. Dit alles is gerealiseerd door een speciale subsystem van de Linux-kernel \u2013 namespaces.<\/p>\n<h3>Kubernetes<\/h3>\n<p>\nZoals eerder vermeld is Kubernetes een containerorchestrator. Het werkt als volgt: je geeft een pool van machines op en zegt dan: \"H\u00e9, Kubernetes, draai tien exemplaren van mijn container met 2 processors en 3 GB geheugen per stuk, en houd ze draaiende!\" Kubernetes zorgt voor de rest. Het vindt beschikbare capaciteit, start de containers en herstart ze indien nodig, en voert updates uit bij versiewijzigingen, enzovoort. In essentie stelt Kubernetes je in staat om te abstraheren van de hardwarecomponent en maakt het diverse systemen geschikt voor het implementeren en draaien van applicaties.<\/p>\n<p><img decoding=\"async\" alt=\"CPU-limieten en agressieve throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/6509bb1b66a4a0f5e9a479d0bd6ececb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kubernetes vanuit het perspectief van de gewone burger<\/i><\/p>\n<h2>Wat zijn aanvragen en limieten in Kubernetes<\/h2>\n<p>\nOk\u00e9, we hebben de containers en Kubernetes begrepen. We weten ook dat meerdere containers op \u00e9\u00e9n machine kunnen staan.<\/p>\n<p>Je kunt een analogie trekken met een gemeenschappelijke woning. Een ruime ruimte (machines\/nodes) wordt gehuurd door meerdere huurders (containers). Kubernetes fungeert als makelaar. De vraag is: hoe voorkom je conflicten tussen huurders? Wat als \u00e9\u00e9n van hen bijvoorbeeld besluit de badkamer voor een halve dag te bezetten?<\/p>\n<p>Hier komen aanvragen en limieten in het spel. CPU <b>Request<\/b> is uitsluitend voor planning. Het is iets als een \"verlanglijst\" van de container, en wordt gebruikt om de meest geschikte node te selecteren. Tegelijkertijd kan de CPU <b>Beperking<\/b> vergeleken worden met een huurovereenkomst \u2014 zodra we een node voor de container hebben gekozen, <b>kan deze<\/b> geen overschrijdingen hebben van de vastgestelde grenzen. En hier komt het probleem\u2026<\/p>\n<h3>Hoe zijn aanvragen en limieten ge\u00efmplementeerd in Kubernetes<\/h3>\n<p>\nKubernetes gebruikt een mechanisme voor throttling (taktijd doorgeven) dat in de kernel is ingebouwd om CPU-limieten te implementeren. Als een applicatie de limiet overschrijdt, wordt throttling geactiveerd (d.w.z. het krijgt minder CPU-takten). Aanvragen en limieten voor geheugen zijn anders georganiseerd, waardoor ze gemakkelijker te detecteren zijn. Het is voldoende om de laatste status van de herstart van de pod te controleren: is deze niet 'OOMKilled'? Met CPU-throttling is het iets ingewikkelder, omdat K8s alleen gebruiksstatistieken beschikbaar stelt, niet cgroups.<\/p>\n<h4>CPU Request<\/h4>\n<p>\n<img decoding=\"async\" alt=\"CPU-limieten en agressieve throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/fbc8bf3f775ffd9513374ce94b20535d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Hoe wordt een CPU request ge\u00efmplementeerd<\/i><\/p>\n<p>Laten we voor de eenvoud het proces bekijken aan de hand van een machine met een 4-core CPU.<\/p>\n<p>K8s maakt gebruik van het cgroups-mechanisme voor het beheer van de toewijzing van resources (geheugen en CPU). Het biedt een hi\u00ebrarchisch model: een afgeleide erft de limieten van de bovenliggende groep. Details over de toewijzing worden opgeslagen in het virtuele bestandssysteem (<code>\/sys\/fs\/cgroup<\/code>). In het geval van de processor is dit <code>\/sys\/fs\/cgroup\/cpu,cpuacct\/*<\/code>.<\/p>\n<p>K8s gebruikt het bestand <code>cpu.share<\/code> voor de verdeling van CPU-middelen. In ons geval ontvangt de hoofdcontrolegroep 4096 aandelen CPU-middelen - 100% van de beschikbare CPU-kracht (1 core = 1024; dit is een vaste waarde). De hoofdgroep verdeelt middelen proportioneel op basis van de aandelen van de kinderen, die zijn vastgelegd in <code>cpu.share<\/code>, en zij op hun beurt doen hetzelfde met hun kinderen, enz. In een typische Kubernetes-knooppunt heeft de hoofdcontrolegroep drie kinderen: <code>system.slice<\/code>, <code>user.slice<\/code> en <code>kubepods<\/code>. De eerste twee subgroepen worden gebruikt voor het verdelen van middelen tussen kritieke systeemlasten en gebruikersprogramma's buiten K8s. De laatste - <code>kubepods<\/code> \u2014 dat door Kubernetes wordt aangemaakt om resources tussen pods te verdelen.<\/p>\n<p>In het bovenstaande diagram is te zien dat de eerste en tweede subgroepen elk ontvangen <b>1024<\/b> aandelen, terwijl de kubepod-subgroep <b>4096<\/b> aandelen toegewezen krijgt. Hoe is dit mogelijk: immers, de hoofdgroep heeft slechts toegang tot <b>4096<\/b> aandelen, en de som van de aandelen van zijn kinderen overstijgt dit aantal aanzienlijk (<b>6144<\/b>)? Het punt is dat de waarde logisch zinvol is, daarom gebruikt de Linux-scheduler (CFS) het voor de proportionele toewijzing van CPU-middelen. In ons geval ontvangen de eerste twee groepen elk <b>680<\/b> echte aandelen (16,6% van 4096), terwijl de kubepod de resterende <b>2736<\/b> aandelen krijgt. In het geval van inactiviteit zullen de eerste twee groepen de toegewezen middelen niet gebruiken.<\/p>\n<p>Gelukkig biedt de planner een mechanisme om het verlies van ongebruikte CPU-bronnen te voorkomen. Het geeft 'inactieve' capaciteit door aan een globale pool, waaruit deze wordt toegewezen aan groepen die extra verwerkingskracht nodig hebben (de overdracht gebeurt in batches om verlies door afronding te voorkomen). Een soortgelijke methode wordt toegepast op alle nakomelingen van nakomelingen.<\/p>\n<p>Dit mechanisme zorgt voor een eerlijke verdeling van de verwerkingscapaciteit en houdt ervoor zorg dat geen enkel proces 'bronnen steelt' van anderen.<\/p>\n<h4>CPU Limiet<\/h4>\n<p>\nHoewel de configuraties voor limieten en aanvragen in K8s vergelijkbaar lijken, verschilt de uitvoering fundamenteel: dit is <b>het meest misleidende<\/b> en het minst gedocumenteerde gedeelte.<\/p>\n<p>K8s gebruikt <noindex><a rel=\"nofollow\" href=\"https:\/\/www.kernel.org\/doc\/Documentation\/scheduler\/sched-design-CFS.txt\">het CFS-quota-mechanisme<\/a><\/noindex> om limieten te implementeren. De instellingen worden gedefinieerd in bestanden <code>cfs_period_us<\/code> en <code>cfs_quota_us<\/code> in de cgroup-map (dezelfde map bevat het bestand <code>cpu.share<\/code>).<\/p>\n<p>In tegenstelling tot <code>cpu.share<\/code>, is de quota gebaseerd op <b>een tijdsperiode<\/b>, niet op de beschikbare verwerkingscapaciteit. <code>cfs_period_us<\/code> stelt de duur van de periode (epoch) in \u2014 dit is altijd 100000 \u03bcs (100 ms). In K8s is het mogelijk om deze waarde te wijzigen, maar deze optie is momenteel alleen beschikbaar in de alfa-versie. De planner gebruikt de epoch om de gebruikte quota opnieuw in te stellen. Het tweede bestand, <code>cfs_quota_us<\/code>, stelt de beschikbare tijd (quota) in elke epoch in. Houd er rekening mee dat dit ook in microseconden wordt aangegeven. De quota kan de duur van de epoch overschrijden; met andere woorden, deze kan groter zijn dan 100 ms.<\/p>\n<p>Laten we twee scenario's bekijken op 16-core machines (de meest voorkomende computerconfiguratie bij ons bij Omio):<\/p>\n<p><img decoding=\"async\" alt=\"CPU-limieten en agressieve throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/61c6105320af3a92a91cec1007da0d45.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Scenario 1: 2 threads en een limiet van 200 ms. Geen throttling.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"CPU-limieten en agressieve throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/c33993341d5395bb73dda1f4c8482a11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Scenario 2: 10 threads en een limiet van 200 ms. Throttling begint na 20 ms, toegang tot de CPU-bronnen herstart na nog eens 80 ms.<\/i><\/p>\n<p>Stel dat je de CPU-limiet instelt op <b>2<\/b> cores; Kubernetes zal deze waarde omzetten naar 200 ms. Dit betekent dat de container maximaal 200 ms verwerkingstijd kan gebruiken zonder throttling.<\/p>\n<p>En hier begint het interessante. Zoals hierboven vermeld, is de beschikbare quota 200 ms. Als je gelijktijdig hebt <b>tien<\/b> stroom op een 12-core machine (zie illustratie bij scenario 2), terwijl alle andere pods inactief zijn, zal de quota binnen slechts 20 ms verbruikt zijn (aangezien 10 * 20 ms = 200 ms), en alle stromen van deze pod zullen \"vastlopen\". <i>(throttle)<\/i> voor de volgende 80 ms. De situatie wordt verergerd door de eerder genoemde <noindex><a rel=\"nofollow\" href=\"https:\/\/bugzilla.kernel.org\/show_bug.cgi?id=198197\">bug in de planner<\/a><\/noindex>, waardoor er overmatige throttling optreedt en de container niet eens haar toegewezen quotum kan halen.<\/p>\n<h2>Hoe schat je throttling in pods in?<\/h2>\n<p>\nVoer simpelweg de pod binnen en voer uit <code>cat \/sys\/fs\/cgroup\/cpu\/cpu.stat<\/code>.<\/p>\n<ul>\n<li> <code>nr_periods<\/code> \u2014 het totale aantal planningsperioden;<\/li>\n<li> <code>nr_throttled<\/code> \u2014 het aantal throttled-perioden in totaal <code>nr_periods<\/code>;<\/li>\n<li> <code>throttled_time<\/code> \u2014 de totale throttled-tijd in nanoseconden.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"CPU-limieten en agressieve throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/a1818614914a8c31f7f7f1331cc02e8b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Wat gebeurt er daadwerkelijk?<\/h3>\n<p>\nUiteindelijk ervaren we hoge throttling in alle applicaties. Soms is het <b>anderhalve keer<\/b> sterker dan berekend!<\/p>\n<p>Dit leidt tot verschillende fouten \u2014 falen van readiness checks, vastlopen van containers, onderbrekingen van netwerkverbindingen, time-outs binnen servicecalls. Uiteindelijk resulteert dit in verhoogde latentie en een toename van het aantal fouten.<\/p>\n<h2>Oplossing en gevolgen<\/h2>\n<p>\nHier is het eenvoudig. We hebben de CPU-limieten opgeheven en zijn overgestapt op het bijwerken van de OS-kernel in clusters naar de nieuwste versie, waarin de bug was opgelost. Het aantal fouten (HTTP 5xx) in onze diensten is onmiddellijk aanzienlijk afgenomen:<\/p>\n<h3>HTTP 5xx-fouten<\/h3>\n<p>\n<img decoding=\"async\" alt=\"CPU-limieten en agressieve throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/86ab1694b952b5451a4ae075cbda2788.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>HTTP 5xx-fouten van \u00e9\u00e9n kritiek belangrijke service<\/i><\/p>\n<h3>P95 Reactietijd<\/h3>\n<p>\n<img decoding=\"async\" alt=\"CPU-limieten en agressieve throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/63922c8eb468366a7d05154a3adf40e6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vertraging van aanvragen voor een kritieke service, 95e percentiel<\/i><\/p>\n<h3>Operationele kosten<\/h3>\n<p>\n<img decoding=\"async\" alt=\"CPU-limieten en agressieve throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/8405c26fcbd82853e296fa7e3bcba131.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Aantal verbruikte instance-uren<\/i><\/p>\n<h2>Wat is de catch?<\/h2>\n<p>\nZoals aan het begin van het artikel werd vermeld:<\/p>\n<blockquote><p>Je kunt het vergelijken met een gedeeld appartement\u2026 Kubernetes fungeert als de makelaar. Maar hoe houd je huurders uit elkaar?<\/p><\/blockquote>\n<p>\nDat is de catch. E\u00e9n slordige container kan alle beschikbare CPU-bronnen op de machine opslokken. Als je een goed functionerende applicatiestack hebt (zoals correct geconfigureerde JVM's, Go, Node VM), dan is dat geen probleem: je kunt lange tijd onder zulke omstandigheden werken. Maar als de applicaties slecht of helemaal niet geoptimaliseerd zijn (<code>FROM java:latest<\/code>), kan de situatie uit de hand lopen. Bij Omio hebben we geautomatiseerde basis Dockerfiles met redelijke standaardinstellingen voor de belangrijkste taalstacks, dus dat probleem heeft zich niet voorgedaan.<\/p>\n<p>We raden aan om de metrics in de gaten te houden. <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/usemethod.html\">USE<\/a><\/noindex> (gebruik, verzadiging en fouten), API-vertragingen en foutfrequentie. Zorg ervoor dat de resultaten aan de verwachtingen voldoen.<\/p>\n<h2>Links<\/h2>\n<p>\nDit is ons verhaal. De volgende materialen hebben ons enorm geholpen om te begrijpen wat er aan de hand is:<\/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 Bandwidth Control<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/engineering.squarespace.com\/blog\/2017\/understanding-linux-container-scheduling\">Begrijpen van Linux Container Scheduling<\/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\">Alles wat je moet weten over Linux Containers, Deel I: Linux Control Groups en Procesisolatie<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/k8s.af\/\">Kubernetes Faalverhalen<\/a><\/noindex> \u2014 zoek naar 'cpu throttling'.<\/li>\n<\/ul>\n<p>\nKubernetes foutmeldingen:<\/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\">Te agressieve CFS<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nHeb je soortgelijke problemen ervaren in je praktijk of heb je ervaring met throttling in gecontaineriseerde productieomgevingen? Deel je verhaal in de reacties!<\/p>\n<h2>P.S. van de vertaler<\/h2>\n<p>\nLees ook op onze blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459326\/\">Autoscaling en resourcebeheer in Kubernetes (overzicht en video van de presentatie)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/418269\/\">Hoe de CPU Manager werkt in Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/342822\/\">Wat er gebeurt in Kubernetes wanneer je kubectl run uitvoert? Deel 2<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47 CPU-limieten en agressief throttling in Kubernetes | ProHoster","description":"Opmerk. vert.: dit leerzame verhaal van Omio \u2014 een Europese reisaggregator \u2014 leidt lezers van de basisprincipes naar boeiende praktische nuances in de configuratie van Kubernetes.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/77693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=77693"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/77693\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/77694"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=77693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=77693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=77693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}