{"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\/de\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes","title":{"rendered":"CPU-Grenzen und aggressives Throttling in Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Anmerkung des \u00dcbersetzers.<\/b>: Diese lehrreiche Geschichte von Omio \u2013 dem europ\u00e4ischen Reiseaggregator \u2013 f\u00fchrt die Leser von den grundlegenden Theorien zu spannenden praktischen Feinheiten in der Kubernetes-Konfiguration. Das Kennenlernen solcher F\u00e4lle hilft nicht nur, den Horizont zu erweitern, sondern auch, nicht triviale Probleme zu vermeiden.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"CPU-Grenzen und aggressives Throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/1175c9df746e43b5a7d81476164929db.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHatten Sie schon einmal das Problem, dass eine Anwendung \"h\u00e4ngengeblieben\" ist, nicht mehr auf Health-Check-Anfragen reagiert hat und Sie die Ursache f\u00fcr dieses Verhalten nicht verstehen konnten? Eine m\u00f6gliche Erkl\u00e4rung h\u00e4ngt mit dem CPU-Ressourcenlimit zusammen. Darum soll es in diesem Artikel gehen.<\/p>\n<p><b>TL;DR:<br \/>\nWir empfehlen dringend, von CPU-Limits in Kubernetes abzusehen (oder die CFS-Quoten in Kubelet zu deaktivieren), wenn eine Version des Linux-Kernels mit einem Fehler bei CFS-Quoten verwendet wird. Im Kernel. <noindex><a rel=\"nofollow\" href=\"https:\/\/bugzilla.kernel.org\/show_bug.cgi?id=198197\">gibt es<\/a><\/noindex> gibt es einen schwerwiegenden und <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/67577\">wohlbekannten<\/a><\/noindex> Bug, der zu \u00fcberm\u00e4\u00dfigem Drosseln und Verz\u00f6gerungen f\u00fchrt.<\/b>.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Bei Omio <b>wird die gesamte Infrastruktur von Kubernetes verwaltet.<\/b>. Alle unsere stateful- und stateless-Lasten laufen ausschlie\u00dflich auf Kubernetes (wir nutzen Google Kubernetes Engine). In den letzten sechs Monaten haben wir zuf\u00e4llige Verz\u00f6gerungen festgestellt. Anwendungen h\u00e4ngen oder antworten nicht mehr auf Health-Checks, verlieren die Netzwerkverbindung usw. Dieses Verhalten hat uns lange Zeit besch\u00e4ftigt, und schlie\u00dflich haben wir uns entschlossen, das Problem intensiv anzugehen.<\/p>\n<p>Zusammenfassung des Artikels:<\/p>\n<ul>\n<li> Einige Worte \u00fcber Container und Kubernetes;<\/li>\n<li> Wie sind CPU-Requests und -Limits umgesetzt;<\/li>\n<li> Wie CPU-Limits in Umgebungen mit mehreren Kernen wirken;<\/li>\n<li> Wie man CPU-Drosselung \u00fcberwacht;<\/li>\n<li> L\u00f6sungen f\u00fcr das Problem und Tipps.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Einige Worte \u00fcber Container und Kubernetes<\/h2>\n<p>\nKubernetes ist im Wesentlichen der moderne Standard in der Welt der Infrastruktur. Seine Hauptaufgabe ist die Orchestrierung von Containern.<\/p>\n<h3>Container<\/h3>\n<p>\nIn der Vergangenheit mussten wir Artefakte wie Java JARs\/WARs, Python Eggs oder ausf\u00fchrbare Dateien erstellen, um sie anschlie\u00dfend auf Servern auszuf\u00fchren. Um sie jedoch funktionsf\u00e4hig zu machen, war zus\u00e4tzliche Arbeit erforderlich: die Laufzeitumgebung (Java\/Python) zu installieren, die notwendigen Dateien an die richtigen Stellen zu platzieren, die Kompatibilit\u00e4t mit einer bestimmten Version des Betriebssystems sicherzustellen usw. Mit anderen Worten, es war notwendig, viel Augenmerk auf das Konfigurationsmanagement zu legen (was oft zu Konflikten zwischen Entwicklern und Systemadministratoren f\u00fchrte).<\/p>\n<p><b>Container haben alles ver\u00e4ndert.<\/b> Jetzt fungiert das Artefakt als Container-Image. Es kann als eine Art erweitete ausf\u00fchrbare Datei betrachtet werden, die nicht nur das Programm, sondern auch eine vollst\u00e4ndige Laufzeitumgebung (Java\/Python\/\u2026) sowie die notwendigen Dateien\/Pakete enth\u00e4lt, vorinstalliert und bereit zur Ausf\u00fchrung. Container k\u00f6nnen auf verschiedenen Servern bereitgestellt und gestartet werden, ohne dass zus\u00e4tzliche Ma\u00dfnahmen erforderlich sind.<\/p>\n<p>Dar\u00fcber hinaus arbeiten Container in einer eigenen Sandbox-Umgebung. Sie verf\u00fcgen \u00fcber einen eigenen virtuellen Netzwerkadapter, ein Dateisystem mit eingeschr\u00e4nktem Zugriff, eine eigene Prozesshierarchie, eigene CPU- und Speicherkapazit\u00e4tsbeschr\u00e4nkungen usw. All dies wird durch ein spezielles Subsystem des Linux-Kernels \u2013 Namespaces \u2013 erm\u00f6glicht.<\/p>\n<h3>Kubernetes<\/h3>\n<p>\nWie bereits erw\u00e4hnt, ist Kubernetes ein Container-Orchestrator. Er funktioniert folgenderma\u00dfen: Sie stellen ihm einen Pool von Maschinen zur Verf\u00fcgung und sagen dann: \u201eHey, Kubernetes, starte zehn Instanzen meines Containers mit 2 Prozessoren und 3 GB RAM pro Einheit und halte sie am Laufen!\u201c. Kubernetes k\u00fcmmert sich um den Rest. Er findet verf\u00fcgbare Kapazit\u00e4ten, startet die Container und startet sie bei Bedarf neu, rollt Updates bei Versionswechseln aus usw. Im Grunde genommen erm\u00f6glicht Kubernetes, sich von der Hardware abzukoppeln und macht die Vielfalt der Systeme f\u00fcr die Bereitstellung und den Betrieb von Anwendungen nutzbar.<\/p>\n<p><img decoding=\"async\" alt=\"CPU-Grenzen und aggressives Throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/6509bb1b66a4a0f5e9a479d0bd6ececb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kubernetes aus der Sicht eines einfachen B\u00fcrgers<\/i><\/p>\n<h2>Was sind Requests und Limits in Kubernetes?<\/h2>\n<p>\nOkay, wir haben die Container und Kubernetes gekl\u00e4rt. Au\u00dferdem wissen wir, dass mehrere Container auf einer Maschine laufen k\u00f6nnen.<\/p>\n<p>Man kann eine Analogie zu einer Wohngemeinschaft ziehen. Ein ger\u00e4umiger Raum (Maschinen\/Knoten) wird genommen und an mehrere Mieter (Container) vermietet. Kubernetes fungiert als Immobilienmakler. Die Frage ist, wie man die Mieter von Konflikten untereinander abhalten kann? Was ist, wenn einer von ihnen beschlie\u00dft, das Badezimmer f\u00fcr einen halben Tag zu besetzen?<\/p>\n<p>Hier kommen die Requests und Limits ins Spiel. CPU. <b>Request<\/b> ist ausschlie\u00dflich f\u00fcr die Planung gedacht. Es ist eine Art \u201eWunschliste\u201c des Containers und wird verwendet, um den am besten geeigneten Knoten zu finden. Gleichzeitig kann CPU <b>Begrenzung<\/b> mit einem Mietvertrag verglichen werden \u2013 sobald wir einen Knoten f\u00fcr den Container gefunden haben, kann dieser <b>nicht<\/b> die festgelegten Grenzen \u00fcberschreiten. Und hier entsteht das Problem\u2026<\/p>\n<h3>Wie sind Requests und Limits in Kubernetes umgesetzt?<\/h3>\n<p>\nKubernetes verwendet einen im Kernel integrierten Mechanismus zum Drosseln (Throttling), um CPU-Limits umzusetzen. Wenn eine Anwendung das Limit \u00fcberschreitet, wird Drosselung aktiviert (d.h. sie erh\u00e4lt weniger CPU-Zyklen). Requests und Limits f\u00fcr Speicher sind anders organisiert, weshalb sie einfacher zu erkennen sind. Es gen\u00fcgt, den letzten Status des Pod-Neustarts zu \u00fcberpr\u00fcfen: Wurde er nicht \"OOMKilled\"? Mit CPU-Drosselung ist es nicht so einfach, da K8s nur Metriken zur Nutzung bereitstellt, aber keine zu cgroups.<\/p>\n<h4>CPU-Anfrage<\/h4>\n<p>\n<img decoding=\"async\" alt=\"CPU-Grenzen und aggressives Throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/fbc8bf3f775ffd9513374ce94b20535d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wie die CPU-Anfrage umgesetzt ist<\/i><\/p>\n<p>Zur Vereinfachung betrachten wir den Prozess am Beispiel einer Maschine mit 4-Kern-CPU.<\/p>\n<p>K8s verwendet den Mechanismus der Kontrollgruppen (cgroups), um die Verteilung von Ressourcen (Speicher und Prozessor) zu steuern. Es steht ein hierarchisches Modell zur Verf\u00fcgung: Ein Nachkomme erbt die Limits der \u00fcbergeordneten Gruppe. Einzelheiten zur Verteilung werden im virtuellen Dateisystem gespeichert (<code>\/sys\/fs\/cgroup<\/code>). Im Falle des Prozessors ist das <code>\/sys\/fs\/cgroup\/cpu,cpuacct\/*<\/code>.<\/p>\n<p>K8s verwendet die Datei <code>cpu.share<\/code> zur Zuteilung von Prozessorrressourcen. In unserem Fall erh\u00e4lt die Wurzel-Kontrollgruppe 4096 Anteile der CPU-Ressourcen \u2013 100% der verf\u00fcgbaren CPU-Leistung (1 Kern = 1024; das ist ein fester Wert). Die Wurzelgruppe verteilt die Ressourcen proportional entsprechend den Anteilen der Nachkommen, die in <code>cpu.share<\/code>vermerkt sind, und diese verfahren ihrerseits \u00e4hnlich mit ihren Nachkommen usw. In einem typischen Kubernetes-Knoten hat die Wurzel-Kontrollgruppe drei Nachkommen: <code>system.slice<\/code>, <code>user.slice<\/code> und <code>kubepods<\/code>. Die ersten beiden Untergruppen werden zur Ressourcenzuteilung zwischen kritischen Systemlasten und Benutzerprogrammen au\u00dferhalb von K8s verwendet. Die letzte \u2013 <code>kubepods<\/code> \u2014 wird von Kubernetes erstellt, um Ressourcen zwischen Pods zu verteilen.<\/p>\n<p>In der obigen Abbildung ist zu sehen, dass die erste und zweite Untergruppe jeweils <b>1024<\/b> Anteile erhalten haben, w\u00e4hrend der Untergruppe kubepod <b>4096<\/b> Anteile zugewiesen wurden. Wie ist das m\u00f6glich: Die Wurzelgruppe hat nur <b>4096<\/b> Anteile zur Verf\u00fcgung, w\u00e4hrend die Summe der Anteile ihrer Nachkommen diese Zahl erheblich \u00fcbersteigt (<b>6144<\/b>)? Die Sache ist, dass der Wert eine logische Bedeutung hat, weshalb der Linux-Scheduler (CFS) ihn f\u00fcr die proportionale Zuteilung von CPU-Ressourcen verwendet. In unserem Fall erhalten die ersten beiden Gruppen jeweils <b>680<\/b> reale Anteile (16,6% von 4096), w\u00e4hrend kubepod die verbleibenden <b>2736<\/b> Anteile erh\u00e4lt. Im Falle von Leerlauf werden die ersten beiden Gruppen die zugewiesenen Ressourcen nicht verwenden.<\/p>\n<p>Gl\u00fccklicherweise gibt es im Scheduler einen Mechanismus, der den Verlust ungenutzter CPU-Ressourcen vermeidet. Er \u00fcbertr\u00e4gt \u00abunt\u00e4tige\u00bb Kapazit\u00e4ten in einen globalen Pool, aus dem sie an Gruppen verteilt werden, die zus\u00e4tzliche Prozessorleistung ben\u00f6tigen (die \u00dcbertragung erfolgt in Chargen, um Verluste durch Rundung zu vermeiden). Ein \u00e4hnliches Verfahren wird auch auf alle Nachfahren der Nachfahren angewandt.<\/p>\n<p>Dieser Mechanismus sorgt f\u00fcr eine faire Verteilung der Prozessorleistung und \u00fcberwacht, dass kein Prozess Ressourcen von anderen \u00abstehlt\u00bb.<\/p>\n<h4>CPU-Limit<\/h4>\n<p>\nObwohl die Konfigurationen von Limits und Requests in K8s \u00e4hnlich aussehen, unterscheiden sie sich grundlegend in der Umsetzung: Es ist <b>die irref\u00fchrendste<\/b> und am wenigsten dokumentierte Komponente.<\/p>\n<p>K8s nutzt <noindex><a rel=\"nofollow\" href=\"https:\/\/www.kernel.org\/doc\/Documentation\/scheduler\/sched-design-CFS.txt\">den CFS-Quota-Mechanismus<\/a><\/noindex> zur Umsetzung von Limits. Ihre Einstellungen werden in den Dateien <code>cfs_period_us<\/code> und <code>cfs_quota_us<\/code> im cgroup-Verzeichnis festgelegt (dort befindet sich auch die Datei <code>cpu.share<\/code>).<\/p>\n<p>Im Gegensatz zu <code>cpu.share<\/code>, basiert die Quote auf <b>der Zeitperiode<\/b>, nicht auf der verf\u00fcgbaren Prozessorleistung. <code>cfs_period_us<\/code> legt die Dauer der Periode (Epoche) fest \u2013 dies sind immer 100.000 \u00b5s (100 ms). In K8s gibt es die M\u00f6glichkeit, diesen Wert zu \u00e4ndern, allerdings ist dies bislang nur in der Alpha-Version verf\u00fcgbar. Der Scheduler verwendet die Epoche, um verbrauchte Quoten zur\u00fcckzusetzen. Die zweite Datei, <code>cfs_quota_us<\/code>, legt die verf\u00fcgbare Zeit (Quote) in jeder Epoche fest. Beachten Sie, dass sie ebenfalls in Mikrosekunden angegeben wird. Die Quote kann die Dauer der Epoche \u00fcberschreiten; mit anderen Worten, sie kann mehr als 100 ms betragen.<\/p>\n<p>Lassen Sie uns zwei Szenarien auf 16-Kern-Maschinen (die h\u00e4ufigste Art von Computern bei uns in Omio) betrachten:<\/p>\n<p><img decoding=\"async\" alt=\"CPU-Grenzen und aggressives Throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/61c6105320af3a92a91cec1007da0d45.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Szenario 1: 2 Threads und ein Limit von 200 ms. Ohne Drosselung<\/i><\/p>\n<p><img decoding=\"async\" alt=\"CPU-Grenzen und aggressives Throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/c33993341d5395bb73dda1f4c8482a11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Szenario 2: 10 Threads und ein Limit von 200 ms. Die Drosselung beginnt nach 20 ms, der Zugriff auf die CPU-Ressourcen wird nach weiteren 80 ms wiederhergestellt.<\/i><\/p>\n<p>Angenommen, Sie haben das CPU-Limit auf <b>2<\/b> Kerne festgelegt; Kubernetes wandelt diesen Wert in 200 ms um. Das bedeutet, dass der Container maximal 200 ms CPU-Zeit ohne Drosselung verwenden kann.<\/p>\n<p>Und hier wird es interessant. Wie oben erw\u00e4hnt, betr\u00e4gt die verf\u00fcgbare Quote 200 ms. Wenn Sie gleichzeitig <b>zehn<\/b> Datenstr\u00f6me auf einer 12-Kern-Maschine (siehe Illustration zu Szenario 2), w\u00e4hrend alle anderen Pods inaktiv sind, wird das Kontingent in nur 20 ms ersch\u00f6pft sein (da 10 * 20 ms = 200 ms), und alle Streams dieses Pods werden \"stillstehen\". <i>(throttle)<\/i> auf die n\u00e4chsten 80 ms. Die Situation wird durch den bereits erw\u00e4hnten <noindex><a rel=\"nofollow\" href=\"https:\/\/bugzilla.kernel.org\/show_bug.cgi?id=198197\">Planer-Bug<\/a><\/noindex>, aufgrund dessen \u00fcberm\u00e4\u00dfiges Throttling auftritt und der Container nicht einmal das vorhandene Kontingent nutzen kann.<\/p>\n<h2>Wie bewertet man Throttling in Pods?<\/h2>\n<p>\nTreten Sie einfach in den Pod ein und f\u00fchren Sie <code>cat \/sys\/fs\/cgroup\/cpu\/cpu.stat<\/code>.<\/p>\n<ul>\n<li> <code>nr_periods<\/code> \u2014 die Gesamtzahl der Planungsperioden;<\/li>\n<li> <code>nr_throttled<\/code> \u2014 die Anzahl der gedrosselten Perioden; <code>nr_periods<\/code>;<\/li>\n<li> <code>throttled_time<\/code> \u2014 die kumulierte Throttled-Zeit in Nanosekunden.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"CPU-Grenzen und aggressives Throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/a1818614914a8c31f7f7f1331cc02e8b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Was passiert eigentlich?<\/h3>\n<p>\nAm Ende haben wir ein hohes Throttling in allen Anwendungen. Manchmal ist es um <b>das 1,5-fache<\/b> st\u00e4rker als berechnet!<\/p>\n<p>Dies f\u00fchrt zu verschiedenen Fehlern \u2013 Problemen mit der Bereitschaftspr\u00fcfung, h\u00e4ngenbleibenden Containern, Verbindungsabbr\u00fcchen und Zeit\u00fcberschreitungen innerhalb der Dienstaufrufe. Letztendlich \u00e4u\u00dfert sich dies in einer erh\u00f6hten Verz\u00f6gerung und einer steigenden Anzahl von Fehlern.<\/p>\n<h2>Die L\u00f6sung und die Konsequenzen<\/h2>\n<p>\nHier ist alles einfach. Wir haben auf CPU-Limits verzichtet und das Betriebssystem im Cluster auf die neueste Version aktualisiert, in der der Bug behoben wurde. Die Anzahl der Fehler (HTTP 5xx) in unseren Diensten ist sofort erheblich gesunken:<\/p>\n<h3>HTTP 5xx Fehler<\/h3>\n<p>\n<img decoding=\"async\" alt=\"CPU-Grenzen und aggressives Throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/86ab1694b952b5451a4ae075cbda2788.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>HTTP 5xx Fehler eines kritischen Dienstes<\/i><\/p>\n<h3>Antwortzeit p95<\/h3>\n<p>\n<img decoding=\"async\" alt=\"CPU-Grenzen und aggressives Throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/63922c8eb468366a7d05154a3adf40e6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Verz\u00f6gerung bei Anfragen eines kritischen Dienstes, 95. Perzentil<\/i><\/p>\n<h3>Betriebskosten<\/h3>\n<p>\n<img decoding=\"async\" alt=\"CPU-Grenzen und aggressives Throttling in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/04\/8405c26fcbd82853e296fa7e3bcba131.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Anzahl der verbrauchten Instanzstunden<\/i><\/p>\n<h2>Wo liegt der Haken?<\/h2>\n<p>\nWie zu Beginn des Artikels erw\u00e4hnt:<\/p>\n<blockquote><p>Man kann eine Analogie zu einer Wohngemeinschaft ziehen\u2026 Kubernetes fungiert als Immobilienverwalter. Aber wie kann man die Mieter daran hindern, Konflikte miteinander zu haben? Was, wenn einer von ihnen beschlie\u00dft, das Badezimmer f\u00fcr einen halben Tag zu besetzen?<\/p><\/blockquote>\n<p>\nHier liegt das Problem. Ein nachl\u00e4ssiger Container kann alle verf\u00fcgbaren CPU-Ressourcen des Systems aufbrauchen. Wenn Sie einen soliden Anwendungsstapel haben (zum Beispiel richtig konfigurierte JVM, Go, Node VM), ist das kein Problem: Unter solchen Bedingungen kann man lange Zeit arbeiten. Wenn die Anwendungen jedoch schlecht oder gar nicht optimiert sind (<code>FROM java:latest<\/code>), kann die Situation au\u00dfer Kontrolle geraten. Bei uns in Omio haben wir automatisierte Basis-Dockerfiles mit angemessenen Standardeinstellungen f\u00fcr die wichtigsten Programmiersprachen, sodass dieses Problem nicht aufgetreten ist.<\/p>\n<p>Wir empfehlen, die Metriken zu \u00fcberwachen. <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/usemethod.html\">USE<\/a><\/noindex> (Nutzung, Saturierung und Fehler), API-Verz\u00f6gerungen und H\u00e4ufigkeit des Auftretens von Fehlern. Achten Sie darauf, dass die Ergebnisse Ihren Erwartungen entsprechen.<\/p>\n<h2>Links<\/h2>\n<p>\nDas ist unsere Geschichte. Die folgenden Materialien haben sehr geholfen, zu verstehen, was passiert:<\/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\">Verstehen der Planung von Linux-Containern<\/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, was Sie \u00fcber Linux-Container wissen m\u00fcssen, Teil I: Linux Control Groups und Prozessisolation<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/k8s.af\/\">Kubernetes-Fehlergeschichten<\/a><\/noindex> \u2014 suchen Sie nach \u201ecpu throttling\u201c.<\/li>\n<\/ul>\n<p>\nFehlerberichte zu Kubernetes:<\/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\">\u00dcberm\u00e4\u00dfig aggressives CFS<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nHatten Sie \u00e4hnliche Probleme in Ihrer Praxis oder verf\u00fcgen Sie \u00fcber Erfahrungen im Zusammenhang mit Throttling in containerisierten Produktionsumgebungen? Teilen Sie Ihre Geschichte in den Kommentaren!<\/p>\n<h2>P.S. vom \u00dcbersetzer<\/h2>\n<p>\nLesen Sie auch in unserem Blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459326\/\">Dailymotion's Kubernetes-Abenteuer: Infrastruktur in Clouds + On-Premises<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/418269\/\">Wie funktioniert der CPU-Manager in Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/342822\/\">Was passiert in Kubernetes, wenn kubectl run ausgef\u00fchrt wird? Teil 2<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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-Limits und aggressives Throttling in Kubernetes | ProHoster","description":"Hinweis zur \u00dcbersetzung: Diese lehrreiche Geschichte von Omio \u2014 dem europ\u00e4ischen Reiseaggregator \u2014 f\u00fchrt die Leser von der grundlegenden Theorie zu spannenden praktischen Feinheiten in der Kubernetes-Konfiguration.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/cpu-limity-i-agressivnyj-trottling-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/77693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=77693"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/77693\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/77694"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=77693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=77693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=77693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}