{"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\/pt\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes","title":{"rendered":"Monitorando os recursos de clusters Kubernetes","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=\"Monitorando os recursos de clusters Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/e3e07ee5a2271263948b3d3b39f3b66d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Criei o Kube Eagle \u2013 um exportador do Prometheus. Descobri que \u00e9 uma ferramenta incr\u00edvel que ajuda a entender melhor os recursos de pequenos e m\u00e9dios clusters. No final, economizei centenas de d\u00f3lares, pois consegui selecionar os tipos corretos de m\u00e1quinas e ajustar as limita\u00e7\u00f5es de recursos dos aplicativos para as cargas de trabalho.<\/p>\n<p><\/p>\n<p>Vou falar sobre as vantagens <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/google-cloud-tools\/kube-eagle\">Kube Eagle<\/a><\/noindex>, mas primeiro, vou explicar por que surgiu a confus\u00e3o e para que precisamos de monitoramento de qualidade.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Eu gerenciei v\u00e1rios clusters com 4 a 50 n\u00f3s. Em cada cluster, havia at\u00e9 200 microsservi\u00e7os e aplicativos. Para utilizar melhor o hardware dispon\u00edvel, a maioria dos deployments foi configurada com mem\u00f3ria e recursos de CPU do tipo burstable. Assim, os pods podem acessar os recursos dispon\u00edveis, se necess\u00e1rio, sem interferir em outros aplicativos naquele n\u00f3. N\u00e3o \u00e9 incr\u00edvel?<\/p>\n<p><\/p>\n<p>E embora o cluster consumisse relativamente pouca CPU (8%) e mem\u00f3ria (40%), enfrent\u00e1vamos constantemente problemas de expuls\u00e3o de pods quando eles tentavam alocar mais mem\u00f3ria do que dispon\u00edvel no n\u00f3. Naquela \u00e9poca, t\u00ednhamos apenas um painel para monitorar os recursos do Kubernetes. Aqui est\u00e1:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/qr\/cp\/x2\/qrcpx2avguhqnbxxg7trlxfnh4u.png\"><img decoding=\"async\" alt=\"Monitorando os recursos de clusters Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/4ff784375fd4d01cc420d0d5b6389524.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<em>Painel do Grafana apenas com m\u00e9tricas do cAdvisor<\/em><\/p>\n<p><\/p>\n<p>Com esse painel, n\u00e3o \u00e9 um problema identificar n\u00f3s que consomem muita mem\u00f3ria e CPU. O problema \u00e9 entender a causa. Para que os pods permanecessem no lugar, seria poss\u00edvel configurar recursos garantidos para todos os pods (recursos solicitados iguais ao limite). Mas isso n\u00e3o \u00e9 a maneira mais inteligente de usar o hardware. O cluster tinha v\u00e1rios centenas de gigabytes de mem\u00f3ria, enquanto alguns n\u00f3s estavam famintos e outros tinham de 4 a 10 GB de sobra.<\/p>\n<p><\/p>\n<p>Consequentemente, o agendador do Kubernetes distribu\u00eda as cargas de trabalho de forma desigual pelos recursos dispon\u00edveis. O agendador do Kubernetes considera diferentes configura\u00e7\u00f5es: regras de affinity, taints e tolerations, seletores de n\u00f3s que podem limitar os n\u00f3s dispon\u00edveis. Mas no meu caso, nada disso estava presente, e os pods eram agendados com base nos recursos solicitados em cada n\u00f3.<\/p>\n<p><\/p>\n<p>Para um pod, selecionava-se o n\u00f3 com mais recursos livres que atendesse \u00e0s condi\u00e7\u00f5es do pedido. Isso resultava em uma discrep\u00e2ncia entre os recursos solicitados nos n\u00f3s e o uso real, e foi aqui que o Kube Eagle entrou com suas capacidades de monitoramento de recursos.<\/p>\n<p><\/p>\n<p>Quase todos os meus clusters Kubernetes eram monitorados apenas com <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/prometheus\/node_exporter\">Node exporter<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kube-state-metrics\">Kube State Metrics<\/a><\/noindex>. O Node Exporter fornece estat\u00edsticas sobre I\/O e uso de disco, CPU e mem\u00f3ria RAM, enquanto o Kube State Metrics mostra m\u00e9tricas de objetos Kubernetes, como solicita\u00e7\u00f5es e limites de recursos de CPU e mem\u00f3ria.<\/p>\n<p><\/p>\n<p>Precisamos combinar m\u00e9tricas de uso com m\u00e9tricas de solicita\u00e7\u00f5es e limites no Grafana, e assim teremos todas as informa\u00e7\u00f5es sobre o problema. Parece simples, mas na pr\u00e1tica, nesses dois instrumentos, os r\u00f3tulos s\u00e3o diferentes, e algumas m\u00e9tricas n\u00e3o t\u00eam r\u00f3tulos de metadados. O Kube Eagle faz tudo isso automaticamente e o painel fica assim:<\/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=\"Monitorando os recursos de clusters Kubernetes\" 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=\"Monitorando os recursos de clusters Kubernetes\" 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\">Painel de Monitoramento do Kube Eagle<\/a><\/noindex><\/em><\/p>\n<p><\/p>\n<p>Conseguimos resolver muitos problemas de recursos e economizar hardware:<\/p>\n<p><\/p>\n<ol>\n<li>Alguns desenvolvedores n\u00e3o sabiam quanta mem\u00f3ria era necess\u00e1ria para os microservi\u00e7os (ou simplesmente n\u00e3o se preocupavam). N\u00e3o t\u00ednhamos como identificar solicita\u00e7\u00f5es de recursos incorretas \u2014 para isso, precisamos conhecer o consumo, al\u00e9m das solicita\u00e7\u00f5es e limites. Agora, eles podem ver m\u00e9tricas do Prometheus, monitorar o uso real e ajustar solicita\u00e7\u00f5es e limites.<\/li>\n<li>As aplica\u00e7\u00f5es JVM consomem tanto mem\u00f3ria RAM quanto conseguem. O coletor de lixo libera mem\u00f3ria somente se mais de 75% estiver ocupado. E como a maioria dos servi\u00e7os tem mem\u00f3ria burstable, sempre ocupava mais mem\u00f3ria do que o esperado pela JVM. Portanto, todos esses servi\u00e7os Java consumiam muito mais mem\u00f3ria RAM do que prev\u00edamos.<\/li>\n<li>Alguns aplicativos solicitavam mais mem\u00f3ria do que o necess\u00e1rio, e o escalonador do Kubernetes n\u00e3o disponibilizava esses n\u00f3s para os outros aplicativos, embora na pr\u00e1tica estivessem mais livres do que os outros n\u00f3s. Um desenvolvedor acidentalmente adicionou um d\u00edgito extra na solicita\u00e7\u00e3o e acabou usando uma grande quantidade de mem\u00f3ria RAM: 20 GB em vez de 2. Ningu\u00e9m percebeu. O aplicativo tinha 3 r\u00e9plicas, ent\u00e3o 3 n\u00f3s foram afetados.<\/li>\n<li>Implementamos limites de recursos, replanejamos os pods com as solicita\u00e7\u00f5es corretas e alcan\u00e7amos um equil\u00edbrio ideal de uso de hardware em todos os n\u00f3s. Alguns n\u00f3s poderiam, na verdade, ser desligados. Depois, percebemos que t\u00ednhamos m\u00e1quinas inadequadas (otimizadas para CPU, e n\u00e3o para mem\u00f3ria). Mudamos o tipo e removemos mais alguns n\u00f3s.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"itogi\">Resultados<\/h3>\n<p><\/p>\n<p>Com recursos burstable no cluster, voc\u00ea utiliza o hardware dispon\u00edvel de forma mais eficiente, mas o escalonador do Kubernetes aloca os pods com base nas solicita\u00e7\u00f5es de recursos, o que pode ser problem\u00e1tico. Para resolver isso e evitar problemas enquanto utiliza os recursos ao m\u00e1ximo, \u00e9 necess\u00e1rio um bom monitoramento. \u00c9 para isso que ele servir\u00e1. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/google-cloud-tools\/kube-eagle\">Kube Eagle<\/a><\/noindex> (exportador Prometheus e painel de monitoramento Grafana).<\/p>\n<p>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Monitoramos os recursos dos clusters Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/31139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=31139"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/31139\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/23107"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=31139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=31139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=31139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}