{"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\/es\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes","title":{"rendered":"Monitoreamos los recursos de los cl\u00fasteres de 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=\"Monitoreamos los recursos de los cl\u00fasteres de Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/e3e07ee5a2271263948b3d3b39f3b66d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>He creado Kube Eagle, un exportador de Prometheus. Result\u00f3 ser una herramienta genial que ayuda a comprender mejor los recursos de cl\u00fasteres peque\u00f1os y medianos. Al final, ahorr\u00e9 m\u00e1s de cien d\u00f3lares, porque seleccion\u00e9 los tipos correctos de m\u00e1quinas y ajust\u00e9 los l\u00edmites de recursos de las aplicaciones seg\u00fan las cargas de trabajo.<\/p>\n<p><\/p>\n<p>Les hablar\u00e9 de las ventajas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/google-cloud-tools\/kube-eagle\">Kube Eagle<\/a><\/noindex>, pero primero explicar\u00e9 por qu\u00e9 surgi\u00f3 el problema y para qu\u00e9 se necesitaba un monitoreo de calidad.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>He administrado varios cl\u00fasteres con entre 4 y 50 nodos. En cada cl\u00faster hay hasta 200 microservicios y aplicaciones. Para utilizar mejor el hardware disponible, la mayor\u00eda de los despliegues estaban configurados con memoria RAM y recursos de CPU tipo burstable. As\u00ed, los pods pueden aprovechar los recursos disponibles si es necesario, sin perjudicar a otras aplicaciones en el mismo nodo. \u00bfNo es genial?<\/p>\n<p><\/p>\n<p>Y aunque el cl\u00faster consum\u00eda relativamente poca CPU (8%) y memoria (40%), constantemente ten\u00edamos problemas con la expulsi\u00f3n de pods cuando intentaban asignar m\u00e1s memoria de la que estaba disponible en el nodo. Entonces, solo ten\u00edamos un panel para monitorear los recursos de Kubernetes. Este:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/qr\/cp\/x2\/qrcpx2avguhqnbxxg7trlxfnh4u.png\"><img decoding=\"async\" alt=\"Monitoreamos los recursos de los cl\u00fasteres de Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/4ff784375fd4d01cc420d0d5b6389524.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<em>Panel de Grafana solo con m\u00e9tricas de cAdvisor<\/em><\/p>\n<p><\/p>\n<p>Con ese panel, no es un problema ver los nodos que consumen mucha memoria y CPU. El problema es entender cu\u00e1l es la causa. Para que los pods se mantengan en su lugar, se podr\u00edan haber configurado recursos garantizados en todos los pods (los recursos solicitados son iguales al l\u00edmite). Pero no es la forma m\u00e1s inteligente de usar el hardware. En el cl\u00faster hab\u00eda varios cientos de gigas de memoria, mientras que algunos nodos estaban hambrientos, y otros ten\u00edan entre 4 y 10 GB de sobra.<\/p>\n<p><\/p>\n<p>Resulta que el planificador de Kubernetes distribu\u00eda las cargas de trabajo de manera desigual seg\u00fan los recursos disponibles. El planificador de Kubernetes considera diferentes configuraciones: reglas de afinidad, taints y tolerations, selectores de nodos, que pueden limitar los nodos disponibles. Pero en mi caso no hab\u00eda nada de eso, y los pods se planificaban seg\u00fan los recursos solicitados en cada nodo.<\/p>\n<p><\/p>\n<p>Para un pod se eleg\u00eda el nodo con m\u00e1s recursos libres que cumpliera con las condiciones de la solicitud. As\u00ed, nos dimos cuenta de que los recursos solicitados en los nodos no coincid\u00edan con el uso real, y aqu\u00ed es donde Kube Eagle y sus capacidades de monitoreo de recursos vinieron al rescate.<\/p>\n<p><\/p>\n<p>Casi todos mis cl\u00fasteres de Kubernetes eran monitoreados solo con <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/prometheus\/node_exporter\">Node exporter<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kube-state-metrics\">Kube State Metrics<\/a><\/noindex>. Node Exporter proporciona estad\u00edsticas sobre la entrada-salida y el uso del disco, CPU y memoria, mientras que Kube State Metrics muestra m\u00e9tricas de objetos de Kubernetes, como las solicitudes y l\u00edmites de recursos de CPU y memoria.<\/p>\n<p><\/p>\n<p>Necesitamos combinar las m\u00e9tricas de uso con las m\u00e9tricas de solicitudes y l\u00edmites en Grafana, y as\u00ed obtendremos toda la informaci\u00f3n sobre el problema. Suena simple, pero en la pr\u00e1ctica, estos dos instrumentos utilizan nombres diferentes para las etiquetas, y algunas m\u00e9tricas ni siquiera tienen etiquetas de metadatos. Kube Eagle lo hace todo autom\u00e1ticamente y el panel se ve as\u00ed:<\/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=\"Monitoreamos los recursos de los cl\u00fasteres de 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=\"Monitoreamos los recursos de los cl\u00fasteres de 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\">Panel de monitoreo de Kube Eagle<\/a><\/noindex><\/em><\/p>\n<p><\/p>\n<p>Hemos logrado resolver muchos problemas de recursos y ahorrar en hardware:<\/p>\n<p><\/p>\n<ol>\n<li>Algunos desarrolladores no sab\u00edan cu\u00e1ntos recursos necesitaban los microservicios (o simplemente no se preocupaban). No ten\u00edamos forma de identificar las solicitudes de recursos incorrectas, ya que necesit\u00e1bamos conocer el consumo adem\u00e1s de las solicitudes y l\u00edmites. Ahora ven las m\u00e9tricas de Prometheus, monitorean el uso real y ajustan sus solicitudes y l\u00edmites.<\/li>\n<li>Las aplicaciones JVM toman tanto memoria RAM como pueden. El recolector de basura libera memoria solo si se utiliza m\u00e1s del 75%. Y dado que la mayor\u00eda de los servicios tienen memoria burstable, el JVM siempre estaba ocupando esa memoria. Por lo tanto, todos estos servicios Java consum\u00edan mucha m\u00e1s memoria de la esperada.<\/li>\n<li>Algunas aplicaciones solicitaban demasiada memoria, y el programador de Kubernetes no le asignaba esos nodos a otras aplicaciones, aunque en realidad estaban m\u00e1s libres que otros nodos. Un desarrollador accidentalmente agreg\u00f3 un d\u00edgito adicional a su solicitud y ocup\u00f3 una gran cantidad de memoria: 20 GB en lugar de 2. Nadie se percat\u00f3. La aplicaci\u00f3n ten\u00eda 3 r\u00e9plicas, as\u00ed que afect\u00f3 a 3 nodos.<\/li>\n<li>Hemos establecido l\u00edmites de recursos, replanificado los pods con las solicitudes correctas y logrado un balance ideal en el uso del hardware en todos los nodos. Algunos nodos podr\u00edan cerrarse por completo. Luego vimos que ten\u00edamos m\u00e1quinas incorrectas (enfocadas en CPU y no en memoria). Cambiamos el tipo y eliminamos otros nodos.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"itogi\">Resultados<\/h3>\n<p><\/p>\n<p>Con recursos burstable en el cl\u00faster, utilizas de manera m\u00e1s eficiente el hardware disponible, pero el programador de Kubernetes planifica los pods seg\u00fan las solicitudes de recursos, lo cual puede ser problem\u00e1tico. Para matar dos p\u00e1jaros de un tiro: evitar problemas y usar los recursos al m\u00e1ximo, se necesita un buen monitoreo. Para esto es \u00fatil. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/google-cloud-tools\/kube-eagle\">Kube Eagle<\/a><\/noindex> (exportador de Prometheus y panel de control de Grafana).<\/p>\n<p>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Monitoreamos los recursos de los cl\u00fasteres de Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/monitorim-resursy-klasterov-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/31139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=31139"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/31139\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/23107"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=31139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=31139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=31139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}