{"id":31139,"date":"2019-10-31T21:39:40","date_gmt":"2019-10-31T18:39:40","guid":{"rendered":"https:\/\/prohoster.info\/blog\/monitorim-resursy-klasterov-kubernetes\/"},"modified":"2019-10-31T21:39:40","modified_gmt":"2019-10-31T18:39:40","slug":"monitorim-resursy-klasterov-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes","title":{"rendered":"\u00dcberwachen von Ressourcen in Kubernetes-Clustern","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/bn\/g6\/jg\/bng6jgpkvlzy8-2zahywzsnz8du.png\"><img decoding=\"async\" alt=\"\u00dcberwachen von Ressourcen in Kubernetes-Clustern\" src=\"\/wp-content\/uploads\/2019\/04\/e3e07ee5a2271263948b3d3b39f3b66d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Ich habe Kube Eagle erstellt \u2013 einen Prometheus-Exporter. Es stellte sich als beeindruckendes Werkzeug heraus, das hilft, die Ressourcen kleiner und mittlerer Cluster besser zu verstehen. Am Ende habe ich mehrere Hundert Dollar gespart, weil ich die richtigen Maschinentypen ausgew\u00e4hlt und die Ressourcenlimits der Anwendungen an die Arbeitslasten angepasst habe.<\/p>\n<p><\/p>\n<p>Ich werde \u00fcber die Vorteile sprechen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/google-cloud-tools\/kube-eagle\">Kube Eagle<\/a><\/noindex>, aber zuerst erkl\u00e4re ich, warum es zu Problemen kam und warum eine qualitativ hochwertige \u00dcberwachung erforderlich war.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ich habe mehrere Cluster mit 4\u201350 Knoten verwaltet. In jedem Cluster gab es bis zu 200 Mikrodienste und Anwendungen. Um die vorhandene Hardware effizienter zu nutzen, waren die meisten Deployments mit burstable RAM und CPU-Ressourcen konfiguriert. So k\u00f6nnen Pods verf\u00fcgbare Ressourcen nutzen, wenn n\u00f6tig, ohne die anderen Anwendungen auf diesem Knoten zu st\u00f6ren. Ist das nicht gro\u00dfartig?<\/p>\n<p><\/p>\n<p>Und obwohl der Cluster relativ wenig CPU (8%) und RAM (40%) verbrauchte, hatten wir st\u00e4ndig Probleme mit dem Abdr\u00e4ngen von Pods, wenn sie mehr Speicher anforderten, als auf dem Knoten verf\u00fcgbar war. Damals hatten wir nur ein Dashboard zur \u00dcberwachung der Kubernetes-Ressourcen. So sah es aus:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/qr\/cp\/x2\/qrcpx2avguhqnbxxg7trlxfnh4u.png\"><img decoding=\"async\" alt=\"\u00dcberwachen von Ressourcen in Kubernetes-Clustern\" src=\"\/wp-content\/uploads\/2019\/04\/4ff784375fd4d01cc420d0d5b6389524.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<em>Grafana-Dashboard nur mit cAdvisor-Metriken<\/em><\/p>\n<p><\/p>\n<p>Mit einem solchen Dashboard ist es kein Problem, Knoten zu sehen, die viel Speicher und CPU verbrauchen. Das Problem ist, die Ursache zu verstehen. Um die Pods am Platz zu halten, h\u00e4tte man nat\u00fcrlich garantierte Ressourcen f\u00fcr alle Pods einrichten k\u00f6nnen (die angeforderten Ressourcen entsprechen dem Limit). Aber das ist nicht die intelligenteste Nutzung der Hardware. Der Cluster hatte mehrere hundert Gigabyte RAM, w\u00e4hrend einige Knoten kaum Ressourcen hatten und andere noch 4\u201310 GB \u00fcbrig hatten.<\/p>\n<p><\/p>\n<p>Es stellte sich heraus, dass der Kubernetes-Scheduler die Arbeitslasten ungleichm\u00e4\u00dfig auf die verf\u00fcgbaren Ressourcen verteilte. Der Kubernetes-Scheduler ber\u00fccksichtigt verschiedene Konfigurationen: Affinit\u00e4tsregeln, Taints und Toleranzen, Knoten-Selectoren, die den Zugang zu den verf\u00fcgbaren Knoten einschr\u00e4nken k\u00f6nnen. Aber in meinem Fall gab es nichts dergleichen, und die Pods wurden je nach den angeforderten Ressourcen auf jedem Knoten geplant.<\/p>\n<p><\/p>\n<p>F\u00fcr einen Pod wurde ein Knoten ausgew\u00e4hlt, der die meisten freien Ressourcen hatte und die Anforderungen erf\u00fcllte. Wir erhielten, dass die angeforderten Ressourcen auf den Knoten nicht mit der tats\u00e4chlichen Nutzung \u00fcbereinstimmten, und hier kam Kube Eagle mit seinen Monitoring-M\u00f6glichkeiten ins Spiel.<\/p>\n<p><\/p>\n<p>Jedoch wurden fast alle meine Kubernetes-Cluster nur mit <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/prometheus\/node_exporter\">Node exporter<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kube-state-metrics\">Kube State Metrics<\/a><\/noindex>. Node Exporter liefert Statistiken \u00fcber Ein- und Ausgaben sowie die Nutzung von Festplatte, CPU und Arbeitsspeicher, w\u00e4hrend Kube State Metrics Metriken von Kubernetes-Objekten anzeigt, wie zum Beispiel CPU- und Arbeitsspeicheranforderungen und -limits.<\/p>\n<p><\/p>\n<p>Wir m\u00fcssen die Nutzungsmetriken mit den Metriken f\u00fcr Anforderungen und Limits in Grafana kombinieren, um alle Informationen \u00fcber das Problem zu erhalten. Das klingt einfach, aber in diesen beiden Tools werden die Labels unterschiedlich bezeichnet, und einige Metriken haben \u00fcberhaupt keine Metadaten-Labels. Kube Eagle erledigt das alles automatisch, und das Dashboard sieht so aus:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/u3\/ce\/hk\/u3cehkycztlwc9m7lpip-4lw2xe.png\"><img decoding=\"async\" alt=\"\u00dcberwachen von Ressourcen in Kubernetes-Clustern\" src=\"\/wp-content\/uploads\/2019\/04\/53898543679d337df5a151b54fb75f5d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/po\/zi\/fm\/pozifm1dgtkf9nsasb42k1faqi4.png\"><img decoding=\"async\" alt=\"\u00dcberwachen von Ressourcen in Kubernetes-Clustern\" src=\"\/wp-content\/uploads\/2019\/04\/a549c865b24f90fcc4375ffbb76ea270.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<em><noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/dashboards\/9871\">Kube Eagle Dashboard<\/a><\/noindex><\/em><\/p>\n<p><\/p>\n<p>Wir konnten viele Probleme mit Ressourcen l\u00f6sen und die Hardware schonen:<\/p>\n<p><\/p>\n<ol>\n<li>Einige Entwickler wussten nicht, wie viele Ressourcen ihre Mikrodienste ben\u00f6tigten (oder waren einfach nicht daran interessiert). Uns fehlten die Mittel, um falsche Ressourcenanforderungen zu finden \u2013 daf\u00fcr ben\u00f6tigt man die Verbrauchswerte sowie die Anforderungen und Limits. Jetzt sehen sie die Prometheus-Metriken, \u00fcberwachen die tats\u00e4chliche Nutzung und passen die Anforderungen und Limits an.<\/li>\n<li>JVM-Anwendungen nutzen so viel Arbeitsspeicher, wie sie k\u00f6nnen. Der Garbage Collector gibt Speicher nur dann frei, wenn mehr als 75 % belegt sind. Da der Arbeitsspeicher der meisten Dienste burstable ist, wurde er immer vom JVM belegt. Daher ben\u00f6tigten all diese Java-Dienste viel mehr Arbeitsspeicher als erwartet.<\/li>\n<li>Einige Anwendungen forderten zu viel Arbeitsspeicher an, und der Kubernetes-Scheduler gab diese Nodes nicht an andere Anwendungen weiter, obwohl sie tats\u00e4chlich freier waren als andere Nodes. Ein Entwickler hatte versehentlich eine zus\u00e4tzliche Ziffer in der Anforderung hinzugef\u00fcgt und damit einen gro\u00dfen Teil des Arbeitsspeichers belegt: 20 GB statt 2. Niemand bemerkte es. Die Anwendung hatte 3 Replikate, sodass gleich 3 Nodes betroffen waren.<\/li>\n<li>Wir haben Ressourcenlimits eingef\u00fchrt, die Pods mit den richtigen Anforderungen umgeplant und einen idealen Nutzungsausgleich \u00fcber alle Nodes erhalten. Einige Nodes h\u00e4tten sogar komplett abgeschaltet werden k\u00f6nnen. Dann stellten wir fest, dass wir die falschen Maschinen (auf CPU optimiert, nicht auf Arbeitsspeicher) hatten. Wir haben den Typ ge\u00e4ndert und noch mehrere Nodes entfernt.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"itogi\">Ergebnisse<\/h3>\n<p><\/p>\n<p>Mit burstable Ressourcen im Cluster nutzt man die vorhandene Hardware effektiver, aber der Kubernetes-Scheduler plant Pods basierend auf den Ressourcenanforderungen, was problematisch sein kann. Um zwei Fliegen mit einer Klappe zu schlagen: Probleme zu vermeiden und Ressourcen vollst\u00e4ndig zu nutzen, ben\u00f6tigt man ein gutes Monitoring. Dazu ist es hilfreich. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/google-cloud-tools\/kube-eagle\">Kube Eagle<\/a><\/noindex> (Exporter Prometheus und Dashboard Grafana).<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/447336\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0441\u043e\u0437\u0434\u0430\u043b Kube Eagle\u00a0\u2014 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 Prometheus. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043a\u0440\u0443\u0442\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0438 \u0441\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b \u043d\u0435 \u043e\u0434\u043d\u0443 \u0441\u043e\u0442\u043d\u044e \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043c\u0430\u0448\u0438\u043d \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0434 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u0445 Kube Eagle, \u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044e, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0432\u044b\u0448\u0435\u043b \u0441\u044b\u0440-\u0431\u043e\u0440 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23107,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31139","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=\"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\/monitorim-resursy-klasterov-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\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monitorim-resursy-klasterov-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=\"2019-10-31T18:39:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:39:40+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\u00dcberwachen Sie die Ressourcen von Kubernetes-Clustern | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monitorim-resursy-klasterov-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\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kubernetes | ProHoster","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monitorim-resursy-klasterov-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":"2019-10-31T18:39:40+00:00","article:modified_time":"2019-10-31T18:39:40+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31139","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":"2026-01-21 04:42:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:22:34","updated":"2026-01-21 04:42:20","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\/31139","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=31139"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/31139\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/23107"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=31139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=31139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=31139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}