{"id":28993,"date":"2024-02-22T12:33:30","date_gmt":"2024-02-22T11:33:30","guid":{"rendered":"https:\/\/inlab.fib.upc.edu\/?p=28993"},"modified":"2024-04-02T10:54:54","modified_gmt":"2024-04-02T08:54:54","slug":"gestionando-produccion-con-estilo","status":"publish","type":"post","link":"https:\/\/inlab.fib.upc.edu\/es\/articulos\/gestionando-produccion-con-estilo","title":{"rendered":"Gestionando producci\u00f3n con estilo"},"content":{"rendered":"\n<p>En los a\u00f1os 90, cuando apareci\u00f3 la WWW, los recursos se publicaban en internet subiendo los ficheros directamente a un servidor mediante FTP y, si aquel ten\u00eda todas las dependencias necesarias configuradas por el administrador de sistemas, la web se volv\u00eda accesible. Aquello que parec\u00eda una maravilla durante aquellos a\u00f1os, se fue volviendo una tarea muy compleja a medida que los softwares iban evolucionando y los a\u00f1os pasaban. M\u00e1s dependencias, m\u00e1s frameworks y muchas configuraciones que se hab\u00edan de trasladar para ejecutar un determinado servicio. Se fue popularizando la expresi\u00f3n \u00aben mi m\u00e1quina funciona\u00bb entre los desarrolladores y la gente de operaciones ten\u00eda muchos problemas de dependencias para desplegar estas nuevas versiones de las aplicaciones.<\/p>\n\n<p>Para solucionar este problema, en 2013 naci\u00f3 Docker y la tecnolog\u00eda de los contenedores, una forma de virtualizaci\u00f3n m\u00e1s ligera (comparte Kernel con el host) que las m\u00e1quinas virtuales porque no contiene un hardware virtual como s\u00ed lo hacen las VM.<\/p>\n\n<figure class=\"wp-block-image aligncenter size-full is-resized is-style-default\"><img fetchpriority=\"high\" decoding=\"async\" width=\"631\" height=\"461\" src=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/primerdia-12.png\" alt=\"\" class=\"wp-image-29020\" style=\"width:557px;height:auto\" srcset=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/primerdia-12.png 631w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/primerdia-12-300x219.png 300w\" sizes=\"(max-width: 631px) 100vw, 631px\" \/><\/figure>\n\n<p>Un contenedor encapsula todas las dependencias software y las configuraciones que necesita un programa generando un entorno cerrado para que el programa funcione adecuadamente. De esta forma, ganamos portabilidad, que es la principal ventaja de Docker. Esto simplific\u00f3 much\u00edsimo los despliegues y se empez\u00f3 a popularizar la cultura de los microservicios, encapsular todo tipo de programas en estos contenedores para simplificar su gesti\u00f3n.<\/p>\n\n<p>El problema es que cuando esto fue adoptado por la industria, la gesti\u00f3n manual de los contenedores, se volvi\u00f3 ineficiente. Por ejemplo, es imposible pensar que Google solo gestiona unos 10 contenedores, probablemente gestiona millones, y simplificar el despliegue era genial, pero con ello, naci\u00f3 una nueva necesidad. Un software que gestionara todos los contenedores y que minimizara tareas de optimizaci\u00f3n y revisi\u00f3n manuales como mejoras en la escalabilidad, revisara que no se produjeran fallos, o tuviera en cuenta la comunicaci\u00f3n entre estos contenedores, aislados por defecto.<\/p>\n\n<p>Todos estos aspectos fomentaron, en 2015, la creaci\u00f3n, por parte de Google, de Kubernetes, un orquestrador de contenedores que solucionaba y simplificaba todos esos detalles. Este orquestrador funciona separando los componentes funcionales, por un lado, el Control Plane y por otra, los nodos Worker.<\/p>\n\n<p>El Control Plane es el encargado del funcionamiento del cl\u00faster, tiene cuatro piezas fundamentales:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Etcd: almacena la configuraci\u00f3n (etcd).<\/li>\n\n\n\n<li>Controller Manager: Contiene todos los controladores, por ejemplo el de los nodos, encargado de monitorizar los workers y saber su estado, entre otros.<\/li>\n\n\n\n<li>Scheduler: Es el encargado de decidir qu\u00e9 contenedores van a cada nodo.<\/li>\n\n\n\n<li>Kube-apiserver: El Api que ofrece el Control Plane para gestionar todos estos detalles.<\/li>\n<\/ul>\n\n<p>Los nodos Workers, son los encargados de ejecutar las cargas de trabajo, se dividen en tres partes. Podemos tener <em>n<\/em> workers y la funcionalidad del Control Plane es gestionarlos y dividirles las cargas de trabajo:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Kubelet: Es un agente que se ejecuta en cada nodo y se encarga de que los contenedores est\u00e9n desplegados en unas instancias llamadas \u00abpods\u00bb. Una de las funcionalidades principales es la supervisi\u00f3n de la salud y correcta ejecuci\u00f3n de estos contenedores.<\/li>\n\n\n\n<li>Kube-proxy: Es el responsable del networking dentro de la red Kubernetes. Redirige peticiones, controla los permisos y aplica las pol\u00edticas pertinentes para cumplir la comunicaci\u00f3n deseada.<\/li>\n\n\n\n<li>Container runtime: Es el motor de ejecuci\u00f3n de contenedores que utilizamos para la virtualizaci\u00f3n, t\u00edpicamente containerd (Docker).<\/li>\n<\/ul>\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"741\" height=\"522\" src=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/Kubernetes.png\" alt=\"\" class=\"wp-image-29014\" srcset=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/Kubernetes.png 741w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/Kubernetes-300x211.png 300w\" sizes=\"(max-width: 741px) 100vw, 741px\" \/><\/figure>\n\n<p>Las aplicaciones para ejecutarse en Kubernetes tienen que ser descritas mediante un archivo llamado manifiesto. Existen un tipo de recursos que se denominan Deployments y que son los encargados de definir nuestra aplicaci\u00f3n.<\/p>\n\n<figure class=\"wp-block-image aligncenter size-large is-resized is-style-default\"><img decoding=\"async\" width=\"1024\" height=\"611\" src=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/img3-1024x611.png\" alt=\"\" class=\"wp-image-28958\" style=\"width:796px;height:auto\" srcset=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/img3-1024x611.png 1024w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/img3-300x179.png 300w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/img3-768x458.png 768w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/img3-1536x916.png 1536w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2024\/02\/img3.png 1553w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n<p>M\u00e1s all\u00e1 de esta peque\u00f1a base, el networking por defecto es aislado, igual que en Docker, por defecto solo se pueden acceder a los contenidos internos, en Kubernetes igual. Aun as\u00ed, hay mecanismos que indican al Proxy que tiene que permitir un flujo de comunicaci\u00f3n determinado. Por eso existen unos componentes llamados Services, que tienen como funci\u00f3n principal exponer una aplicaci\u00f3n para que pueda ser accesible desde fuera del cl\u00faster (el caso del Load Balancer en la imagen superior).<\/p>\n\n<p>Las principales ventajas de Kubernetes son la flexibilidad, la resiliencia y la alta disponibilidad que ofrece. Por ejemplo, cuando detecta que un contenedor ha tenido un fallo, lo vuelve a desplegar autom\u00e1ticamente. Cuando ve que un nodo Worker est\u00e1 muy cargado a nivel de recursos intenta (siempre que sea posible) balancear la carga entre los otros nodos del cl\u00faster, cosa que puede hacer gracias a la portabilidad de los contenedores, puesto que es muy sencillo mover un contenedor entre dos nodos.<\/p>\n\n<p>Pero una de las funcionalidades m\u00e1s importantes de Kubernetes, teniendo en cuenta el auge del Cloud Computing, es la alta escalabilidad que ofrece. Tenemos componentes dentro de Kubernetes que son capaces de monitorizar la carga que est\u00e1 teniendo un contenedor y al superar unos determinados l\u00edmites de recursos marcados por el administrador, escala la aplicaci\u00f3n generando una copia del contenedor y dividiendo la carga entre los contenedores resultantes. De esta forma, aligera la carga del primer contenedor y reparte las peticiones entre los dos.<\/p>\n\n<p>Esta casu\u00edstica se ha vuelto muy interesante en el entorno Cloud, puesto que un sistema puede eventualmente, llegar a ser tan escalable como queramos. Si una aplicaci\u00f3n tiene un pico de carga, Kubernetes de forma aut\u00f3noma puede distribuir la carga entre el cl\u00faster para verificar el correcto funcionamiento de la aplicaci\u00f3n. Pero dado el caso en que todos los nodos del cl\u00faster estuvieran experimentando una carga que impidiera el funcionamiento normal de la aplicaci\u00f3n, hay otras herramientas que permiten aprovisionar nodos de forma autom\u00e1tica al cl\u00faster con m\u00e1quinas de proveedores Cloud para solucionar este pico sin downtimes.<\/p>\n\n<p>En definitiva, los tiempos actuales han hecho de Kubernetes no una gran ventaja en la infraestructura, sino una necesidad debido a todas las ventajas que presenta, que solucionan problem\u00e1ticas cotidianas y como hemos podido ver en este art\u00edculo, aligeran much\u00edsimo la carga de trabajo de los administradores de sistemas y en entornos de grandes empresas donde esta complejidad se puede volver gigante si no se tiene un mecanismo de gesti\u00f3n adecuada como este.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En los a\u00f1os 90, cuando apareci\u00f3 la WWW, los recursos se publicaban en internet subiendo los ficheros directamente a un servidor mediante FTP y, si aquel ten\u00eda todas las dependencias necesarias configuradas por el administrador de sistemas, la web se volv\u00eda accesible. Aquello que parec\u00eda una maravilla durante aquellos a\u00f1os, se fue volviendo una tarea [&hellip;]<\/p>\n","protected":false},"author":1242,"featured_media":29032,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[496],"tags":[],"experteses":[],"class_list":["post-28993","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articulos"],"acf":[],"_links":{"self":[{"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/posts\/28993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/users\/1242"}],"replies":[{"embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/comments?post=28993"}],"version-history":[{"count":4,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/posts\/28993\/revisions"}],"predecessor-version":[{"id":29035,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/posts\/28993\/revisions\/29035"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/media\/29032"}],"wp:attachment":[{"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/media?parent=28993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/categories?post=28993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/tags?post=28993"},{"taxonomy":"experteses","embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/experteses?post=28993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}