{"id":83787,"date":"2020-06-03T07:42:26","date_gmt":"2020-06-03T05:42:26","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2"},"modified":"2020-06-03T07:42:26","modified_gmt":"2020-06-03T05:42:26","slug":"devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","title":{"rendered":"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kubernetes es una excelente herramienta para ejecutar contenedores Docker en un entorno de producci\u00f3n clusterizado. Sin embargo, existen tareas que Kubernetes no puede resolver. Con implementaciones frecuentes en el entorno laboral, necesitamos un despliegue autom\u00e1tico Blue\/Green completamente integrado, para evitar tiempos de inactividad en este proceso, donde tambi\u00e9n es necesario manejar solicitudes HTTP externas y gestionar la carga de SSL. Esto requiere integraci\u00f3n con un balanceador de carga, como ha-proxy. Otra tarea es el escalado semi-autom\u00e1tico del propio cl\u00faster de Kubernetes mientras trabaja en un entorno de nube, por ejemplo, reduciendo parcialmente el tama\u00f1o del cl\u00faster por la noche.<\/p>\n<p>Aunque Kubernetes no posee estas funciones directamente 'de serie', proporciona una API que se puede utilizar para abordar tales tareas. Se han desarrollado herramientas para el despliegue Blue\/Green automatizado y el escalado del cl\u00faster de Kubernetes en el marco del proyecto Cloud RTI, el cual fue creado sobre bases open-source.<\/p>\n<p>En este art\u00edculo, la transcripci\u00f3n del video, se describe c\u00f3mo configurar Kubernetes junto con otros componentes de c\u00f3digo abierto para obtener un entorno listo para producci\u00f3n que recibe el c\u00f3digo de un commit de git sin tiempos de inactividad en producci\u00f3n.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/43a4ba56526a91b6f3d1fb16c159cc1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/504666\/\">DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, escalado autom\u00e1tico y automatizaci\u00f3n de despliegue. Parte 1.<\/a><\/noindex><\/p>\n<p>Entonces, una vez que ha accedido a sus aplicaciones desde el mundo externo, puede proceder a la configuraci\u00f3n completa de la automatizaci\u00f3n, es decir, llevarla a un punto en el que se pueda ejecutar un commit de git y asegurarse de que ese commit finaliza en producci\u00f3n. Es evidente que, al implementar estos pasos y realizar el despliegue, no queremos enfrentar tiempos de inactividad. Por lo tanto, toda automatizaci\u00f3n en Kubernetes comienza con la API. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/aa470c1562e49d98a164e0485196426e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKubernetes no es una herramienta que se pueda utilizar productivamente 'directamente de la caja'. Por supuesto, puede hacerlo, usar kubectl y dem\u00e1s, pero a\u00fan as\u00ed, la API es lo m\u00e1s interesante y \u00fatil de esta plataforma. Usando la API como un conjunto de funciones, puede acceder a pr\u00e1cticamente todo lo que desee hacer en Kubernetes. El propio kubectl tambi\u00e9n utiliza la REST API. <\/p>\n<p>Este es un REST, as\u00ed que puedes usar cualquier lenguaje y herramienta para interactuar con esta API, pero las bibliotecas de usuario facilitar\u00e1n mucho tu vida. Mi equipo ha escrito 2 de estas bibliotecas: una para Java \/ OSGi y otra para Go. La segunda se utiliza con menos frecuencia, pero de todos modos, tienes estas herramientas \u00fatiles a tu disposici\u00f3n. Son un proyecto open-source parcialmente licenciado. Hay muchas bibliotecas de este tipo para diferentes lenguajes, as\u00ed que puedes elegir las m\u00e1s adecuadas. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/808865e4cda6023c6775ec9e581fc46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs\u00ed que, antes de comenzar con la automatizaci\u00f3n del despliegue, es necesario asegurarse de que este proceso no sufra ning\u00fan tiempo de inactividad. Por ejemplo, nuestro equipo realiza el despliegue de producci\u00f3n a media jornada, cuando la gente usa las aplicaciones al m\u00e1ximo, por lo que es muy importante evitar retrasos en este proceso. Para evitar los tiempos de inactividad, se utilizan 2 m\u00e9todos: el despliegue blue\/green o las actualizaciones progresivas. En este \u00faltimo caso, si tienes 5 r\u00e9plicas de la aplicaci\u00f3n en funcionamiento, se actualizan secuencialmente una tras otra. Este m\u00e9todo funciona muy bien, pero no es adecuado si en el proceso de despliegue tienes distintas versiones de la aplicaci\u00f3n en ejecuci\u00f3n. En ese caso, puedes actualizar la interfaz de usuario mientras el backend sigue funcionando con la versi\u00f3n anterior, lo que interrumpir\u00e1 el funcionamiento de la aplicaci\u00f3n. Por lo tanto, desde el punto de vista de la programaci\u00f3n, trabajar en tales condiciones es bastante complicado. <\/p>\n<p>Esa es una de las razones por las que preferimos utilizar el despliegue blue\/green para la automatizaci\u00f3n del despliegue de nuestras aplicaciones. Con este m\u00e9todo, debes asegurarte de que en un momento dado, solo una versi\u00f3n de la aplicaci\u00f3n est\u00e9 activa. <\/p>\n<p>El mecanismo de despliegue blue\/green funciona de la siguiente manera. Recibimos el tr\u00e1fico para nuestras aplicaciones a trav\u00e9s de ha-proxy, que redirige a las r\u00e9plicas en funcionamiento de la aplicaci\u00f3n de la misma versi\u00f3n. <\/p>\n<p>Cuando se realiza un nuevo despliegue, utilizamos Deployer, al que se le proporcionan los nuevos componentes, y \u00e9l lleva a cabo el despliegue de la nueva versi\u00f3n. El despliegue de una nueva versi\u00f3n de la aplicaci\u00f3n significa que se 'levantan' un nuevo conjunto de r\u00e9plicas, y luego estas r\u00e9plicas de la nueva versi\u00f3n se inician en un nuevo pod separado. Sin embargo, ha-proxy no sabe nada de ellas y, por el momento, no dirige ninguna carga de trabajo hacia ellas.<\/p>\n<p>Por lo tanto, en primer lugar, es necesario realizar una verificaci\u00f3n de la funcionalidad de las nuevas versiones mediante health checking, para asegurarse de que las r\u00e9plicas est\u00e9n listas para manejar la carga.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/6134f89567ac3627197883b2f4c768d4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTodos los componentes del despliegue deben soportar alg\u00fan tipo de health check. Esto puede ser una verificaci\u00f3n HTTP sencilla, donde se recibe un c\u00f3digo con estado 200, o una verificaci\u00f3n m\u00e1s profunda, en la que se comprueba la conexi\u00f3n de las r\u00e9plicas con la base de datos y otros servicios, la resistencia de las conexiones en el entorno din\u00e1mico, y si todo se inicia y funciona correctamente. Este proceso puede ser bastante complicado. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/fdc537599187b32ab97bc00970283e1a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUna vez que el sistema verifique la funcionalidad de todas las r\u00e9plicas actualizadas, Deployer actualizar\u00e1 la configuraci\u00f3n y pasar\u00e1 el confd correcto, que reconfigurar\u00e1 ha-proxy. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/099240482096c2ac4aafe7e803409511.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSolo despu\u00e9s de eso, el tr\u00e1fico se dirigir\u00e1 al pod con las r\u00e9plicas de la nueva versi\u00f3n y el antiguo pod desaparecer\u00e1. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/f656b3a3adfc27e782e5d9785b8b615e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste mecanismo no es exclusivo de Kubernetes. El concepto de Blue\/green deployment ha existido durante bastante tiempo, y siempre ha utilizado un balanceador de carga. Primero, se dirige todo el tr\u00e1fico a la versi\u00f3n antigua de la aplicaci\u00f3n y, despu\u00e9s de la actualizaci\u00f3n, se redirige completamente a la nueva versi\u00f3n. Este principio se utiliza no solo en Kubernetes.<\/p>\n<p>Ahora les presentar\u00e9 un nuevo componente de despliegue: Deployer, que realiza la verificaci\u00f3n de funcionalidad, reconfigura el proxy, etc. Este es un concepto que no se relaciona con el mundo exterior y existe dentro de Kubernetes. Les mostrar\u00e9 c\u00f3mo se puede crear su propio concepto de Deployer utilizando herramientas open-source. <\/p>\n<p>Entonces, lo primero que hace Deployer es crear un controlador de replicaci\u00f3n RC utilizando la API de Kubernetes. Esta API crea pods y servicios para futuros despliegues, es decir, crea un cl\u00faster completamente nuevo para nuestras aplicaciones. Una vez que el RC asegura que las r\u00e9plicas han iniciado, realizar\u00e1 una verificaci\u00f3n de su funcionamiento, el Health check. Para esto, Deployer utiliza el comando GET \/health. Este comando inicia los componentes de verificaci\u00f3n correspondientes y comprueba todos los elementos que garantizan el funcionamiento del cl\u00faster. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/f2ef0232e17bc69f0b70ea9eabc2f456.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDespu\u00e9s de que todos los pods informen sobre su \"salud\", Deployer crea un nuevo elemento de configuraci\u00f3n: un almacenamiento distribuido etcd, que se utiliza dentro de Kubernetes, incluyendo el almacenamiento de la configuraci\u00f3n del equilibrador de carga. Escribimos los datos en etcd, y una peque\u00f1a herramienta llamada confd monitorea etcd en busca de nuevos datos. <\/p>\n<p>Si detecta cambios en la configuraci\u00f3n original, genera un nuevo archivo de configuraci\u00f3n y lo pasa a ha-proxy. En este caso, ha-proxy se reinicia sin perder ninguna conexi\u00f3n y dirige la carga a los nuevos services, que aseguran el funcionamiento de la nueva versi\u00f3n de nuestras aplicaciones. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/bef1536c2b8dee6b0da710fc6c6fda99.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo pueden ver, a pesar de la abundancia de componentes, aqu\u00ed no hay nada complicado. Solo necesitan prestar un poco m\u00e1s de atenci\u00f3n a la API y a etcd. Quiero hablarles sobre un desplegador de c\u00f3digo abierto que nosotros mismos utilizamos: Amdatu Kubernetes Deployer.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/34124e093d2e16fcbb80fd112c7d223f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs una herramienta para orquestar despliegues en Kubernetes, que tiene las siguientes funciones: <\/p>\n<ul>\n<li>despliegue Blue\/Green;<\/li>\n<li>configuraci\u00f3n de un equilibrador de carga externo;<\/li>\n<li>gesti\u00f3n de descriptores de despliegue;<\/li>\n<li>gesti\u00f3n del despliegue real;<\/li>\n<li>verificaciones de salud durante el despliegue;<\/li>\n<li>inserci\u00f3n de variables de entorno en los pods.<\/li>\n<\/ul>\n<p>\nEste Deployer se crea sobre la API de Kubernetes y proporciona una API REST para gestionar descriptores y despliegues, as\u00ed como una API Websocket para el streaming de logs durante el despliegue.<\/p>\n<p>Coloca los datos de configuraci\u00f3n del equilibrador de carga en etcd, por lo que no es necesario utilizar ha-proxy con soporte \"directo desde la caja\", sino que puedes usar f\u00e1cilmente tu propio archivo de configuraci\u00f3n del equilibrador. Amdatu Deployer est\u00e1 escrito en Go, al igual que Kubernetes, y tiene licencia Apache.<\/p>\n<p>Antes de comenzar a utilizar esta versi\u00f3n del desplegador, utilic\u00e9 el siguiente descriptor de despliegue, que especifica los par\u00e1metros que necesito. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/14e9ecca6ad772a43afcf95a4950fad8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUno de los par\u00e1metros importantes de este c\u00f3digo es la inclusi\u00f3n de la bandera \"useHealthCheck\". Necesitamos especificar que durante el proceso de despliegue se debe realizar una verificaci\u00f3n de la operatividad. Este par\u00e1metro puede desactivarse cuando se utilizan contenedores de terceros que no necesitan ser verificados. En este descriptor tambi\u00e9n se indica el n\u00famero de r\u00e9plicas y la URL del frontend que necesita ha-proxy. Al final se menciona la bandera de especificaci\u00f3n de pod \"podspec\", que se comunica con Kubernetes para obtener informaci\u00f3n sobre la configuraci\u00f3n de puertos, im\u00e1genes, etc. Este es un descriptor bastante simple en formato JSON. <\/p>\n<p>Otra herramienta que forma parte del proyecto de c\u00f3digo abierto Amdatu es Deploymentctl. Tiene una interfaz de usuario (UI) para configurar el despliegue, almacena el historial de despliegue y contiene webhooks para callbacks de usuarios y desarrolladores externos. No es obligatorio utilizar la UI, ya que el mismo Amdatu Deployer es un REST API, pero esta interfaz puede facilitar mucho el despliegue sin necesidad de recurrir a ninguna API. Deploymentctl est\u00e1 escrito en OSGi\/Vertx utilizando Angular 2. <\/p>\n<p>Ahora demostrar\u00e9 lo anteriormente mencionado en la pantalla, utilizando una grabaci\u00f3n previa, as\u00ed que no tendr\u00e1s que esperar. Vamos a desplegar una aplicaci\u00f3n simple en Go. No te preocupes si no has trabajado con Go antes, es una aplicaci\u00f3n muy sencilla, as\u00ed que todo deber\u00eda ser claro para ti. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/ab61ada396143e980d73a0bb8ff95076.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAqu\u00ed estamos creando un servidor HTTP que solo responde a \/health, por lo que esta aplicaci\u00f3n solo comprueba la operatividad del health check y nada m\u00e1s. Si la verificaci\u00f3n es exitosa, se activa la estructura JSON mostrada a continuaci\u00f3n. Esta contiene la versi\u00f3n de la aplicaci\u00f3n que ser\u00e1 desplegada, un mensaje que ves en la parte superior del archivo y un valor booleano que indica si nuestra aplicaci\u00f3n est\u00e1 operativa o no.<\/p>\n<p>Con la \u00faltima l\u00ednea he sido un poco astuto, porque puse un valor booleano fijo al principio del archivo, que me ayudar\u00e1 a desplegar incluso una aplicaci\u00f3n \"no saludable\". M\u00e1s adelante nos ocuparemos de esto. <\/p>\n<p>Empecemos. Primero, comprobamos si hay pods en ejecuci\u00f3n utilizando el comando ~ kubectl get pods y, al no recibir respuesta del URL del frontend, confirmamos que no se est\u00e1n realizando despliegues en este momento. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/4da1ae467993d6e60ec539ae5ff136ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA continuaci\u00f3n, en la pantalla ves la interfaz Deploymentctl que mencion\u00e9, donde se configuran los par\u00e1metros del despliegue: espacio de nombres, nombre de la aplicaci\u00f3n, versi\u00f3n del despliegue, n\u00famero de r\u00e9plicas, URL del frontend, nombre del contenedor, imagen, l\u00edmites de recursos, n\u00famero de puerto para health check, etc. Los l\u00edmites de recursos son muy importantes, ya que permiten utilizar la m\u00e1xima capacidad de hardware posible. Tambi\u00e9n puedes ver el registro de despliegue, Deployment log.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/edf6a02b336f1abce61f0a323edeee9d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi repites ahora el comando ~ kubectl get pods, ver\u00e1s que el sistema 'se congela' durante 20 segundos, durante los cuales se realiza la reconfiguraci\u00f3n de ha-proxy. Despu\u00e9s de eso, el pod se inicia y nuestra r\u00e9plica puede ser vista en el registro de despliegue. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/c6c8f6335e00d3a9cfcf4d4792ecf795.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHe cortado del video la espera de 20 segundos, y ahora puedes ver en la pantalla que la primera versi\u00f3n de la aplicaci\u00f3n est\u00e1 desplegada. Todo esto se hizo solo con la ayuda de la interfaz gr\u00e1fica. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/d21fa9ad71e22b2bb9efdfc7bc9c8771.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAhora intentemos la segunda versi\u00f3n. Para ello, voy a cambiar el mensaje de la aplicaci\u00f3n de '\u00a1Hola, Kubernetes!' a '\u00a1Hola, Deployer!', el sistema crea esta imagen y la coloca en el registro de Docker, despu\u00e9s de lo cual simplemente presionamos nuevamente el bot\u00f3n 'Deploy' en la ventana de Deploymentctl. De esta manera, se inicia autom\u00e1ticamente el registro de despliegue, de la misma manera que ocurri\u00f3 durante el despliegue de la primera versi\u00f3n de la aplicaci\u00f3n. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/e4ef784649fd18b1580d2562b318ac0f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl comando ~ kubectl get pods muestra que actualmente hay 2 versiones de la aplicaci\u00f3n en ejecuci\u00f3n, sin embargo, el frontend indica que todav\u00eda estamos utilizando la versi\u00f3n 1. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/1d4a9c91f836007325a2a2c833da8eff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl balanceador de carga espera a que se realice la verificaci\u00f3n de estado, despu\u00e9s de lo cual redirigir\u00e1 el tr\u00e1fico a la nueva versi\u00f3n. Despu\u00e9s de 20 segundos, cambiamos a curl y vemos que ahora tenemos la versi\u00f3n 2 de la aplicaci\u00f3n desplegada, mientras que la primera ha sido eliminada. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/e123618251e9fcb1c14829772634b6e8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste fue el despliegue de una aplicaci\u00f3n 'saludable' \u2014 healthy. Veamos qu\u00e9 sucede si cambio el valor del par\u00e1metro Healthy de true a false para la nueva versi\u00f3n de la aplicaci\u00f3n, es decir, intento desplegar una aplicaci\u00f3n no saludable, que no ha pasado la verificaci\u00f3n de funcionamiento. Esto puede suceder si en la etapa de desarrollo se cometieron algunos errores de configuraci\u00f3n en la aplicaci\u00f3n, y se envi\u00f3 as\u00ed a producci\u00f3n. <\/p>\n<p>Como puede ver, el despliegue sigue todos los pasos mencionados anteriormente, y ~ kubectl get pods muestra que ambos pods est\u00e1n en funcionamiento. Pero a diferencia del despliegue anterior, el registro muestra un estado de timeout. Esto significa que, debido a que la verificaci\u00f3n de health check no pas\u00f3, la nueva versi\u00f3n de la aplicaci\u00f3n no puede desplegarse. Como resultado, ver\u00e1 que el sistema ha vuelto a utilizar la versi\u00f3n antigua de la aplicaci\u00f3n, y la nueva versi\u00f3n ha sido simplemente eliminada. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/4542761328603596704f21cef4c9d4a3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa ventaja de esto es que incluso si tiene una gran cantidad de solicitudes simult\u00e1neas que llegan a la aplicaci\u00f3n, ni siquiera notar\u00e1n la inactividad durante el procedimiento de despliegue. Si prueba esta aplicaci\u00f3n utilizando el marco Gatling, que le env\u00eda la mayor cantidad posible de solicitudes, ninguna de estas solicitudes ser\u00e1 rechazada. Esto significa que nuestros usuarios ni siquiera notar\u00e1n la actualizaci\u00f3n de versiones en tiempo real. Si falla, el trabajo continuar\u00e1 con la versi\u00f3n antigua; si tiene \u00e9xito, los usuarios cambiar\u00e1n a la nueva versi\u00f3n. <\/p>\n<p>Solo hay una cosa que puede llevar al fracaso: si la verificaci\u00f3n de health check pas\u00f3 exitosamente y la aplicaci\u00f3n fall\u00f3 tan pronto como recibi\u00f3 la carga de trabajo, es decir, el colapso ocurrir\u00e1 solo despu\u00e9s de completar el despliegue. En este caso, tendr\u00e1 que revertir manualmente a la versi\u00f3n anterior. As\u00ed que hemos visto c\u00f3mo usar Kubernetes con herramientas de c\u00f3digo abierto dise\u00f1adas para ello. El procedimiento de despliegue ser\u00e1 mucho m\u00e1s sencillo si incorpora estas herramientas en los pipelines de creaci\u00f3n\/despliegue. Para iniciar el despliegue, puede usar tanto la interfaz de usuario como automatizar completamente este proceso, aplicando, por ejemplo, el commit a master. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/43b638be9d334c6c4f8e9f4fc00ce2f9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNuestro servidor de compilaci\u00f3n Build Server crear\u00e1 la imagen de Docker, la insertar\u00e1 en Docker Hub o en cualquier otro registro que utilice. Docker Hub admite webhook, por lo que podemos iniciar un despliegue remoto a trav\u00e9s de Deployer de la manera mostrada anteriormente. De esta manera, se puede automatizar completamente el despliegue de la aplicaci\u00f3n en el entorno de producci\u00f3n potencial. <\/p>\n<p>Pasemos a considerar el siguiente tema: la escalabilidad del cl\u00faster de Kubernetes. Cabe destacar que el comando kubectl es un comando de escalado. Adem\u00e1s, con \u00e9l es f\u00e1cil aumentar el n\u00famero de r\u00e9plicas en nuestro cl\u00faster existente. Sin embargo, en la pr\u00e1ctica, generalmente queremos aumentar la cantidad de no pods, sino de nodos. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/890f436b4bc52c81f5db5b35e64e7e18.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn este sentido, es posible que necesite un aumento durante el horario laboral, mientras que por la noche, para reducir el costo de los servicios de Amazon, puede requerir una disminuci\u00f3n en la cantidad de instancias de aplicaci\u00f3n en ejecuci\u00f3n. Esto no significa que sea suficiente escalar solo la cantidad de pods, ya que incluso si uno de los nodos no est\u00e1 ocupado, a\u00fan tendr\u00e1 que pagar por \u00e9l a Amazon. Es decir, adem\u00e1s de escalar los pods, tambi\u00e9n necesitar\u00e1 escalar el n\u00famero de m\u00e1quinas utilizadas. <\/p>\n<p>Esto puede causar complicaciones, porque independientemente de si estamos usando Amazon o otro servicio en la nube, Kubernetes no tiene conocimiento del n\u00famero de m\u00e1quinas utilizadas. No dispone de una herramienta para escalar el sistema a nivel de nodos. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/2f00b19f1cb665d8e7bd896fa419554c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor lo tanto, tendremos que preocuparnos tanto por los nodos como por los pods. Podemos escalar f\u00e1cilmente el lanzamiento de nuevos nodos utilizando la API de AWS y grupos de escalado para ajustar la cantidad de nodos de trabajo en Kubernetes. Tambi\u00e9n se puede usar cloud-init o un script similar para registrar nodos en el cl\u00faster de Kubernetes. <\/p>\n<p>Una nueva m\u00e1quina se inicia en el grupo de escalado, se registra como un nodo, se inscribe en el registro del maestro y comienza a funcionar. Despu\u00e9s de esto, se puede aumentar el n\u00famero de r\u00e9plicas para usar en los nodos reci\u00e9n creados. La reducci\u00f3n de escala requiere m\u00e1s esfuerzo, ya que es necesario asegurarse de que este paso no lleve a la destrucci\u00f3n de aplicaciones ya en funcionamiento tras deshabilitar las m\u00e1quinas \"innecesarias\". Para evitar tal escenario, es necesario llevar los nodos a un estado \"unschedulable\". Esto significa que el programador por defecto ignorar\u00e1 estos nodos al programar pods DaemonSet. El programador no eliminar\u00e1 nada de estos servidores, pero tampoco iniciar\u00e1 nuevos contenedores all\u00ed. El siguiente paso es drenar el nodo, es decir, transferir los pods en funcionamiento a otra m\u00e1quina o a otros nodos que tengan suficiente capacidad para ello. Una vez que se asegure que no quedan contenedores en estos nodos, se pueden eliminar de Kubernetes. Despu\u00e9s de esto, simplemente dejar\u00e1n de existir para Kubernetes. Luego se debe utilizar la API de AWS para desactivar los nodos innecesarios, o m\u00e1quinas. <br \/>\nPuedes usar Amdatu Scalerd, otra herramienta open-source para escalado, similar a la API de AWS. Proporciona una CLI para agregar o eliminar nodos en el cl\u00faster. Una de sus caracter\u00edsticas interesantes es la posibilidad de configurar el programador utilizando el siguiente archivo json. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/f70c7c722cacb4792c316e9f80a7500a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl c\u00f3digo representado reduce a la mitad la capacidad del cl\u00faster durante la noche. Est\u00e1 configurado tanto para el n\u00famero de r\u00e9plicas existentes como para la capacidad deseada del cl\u00faster de Amazon. Usar este programador reducir\u00e1 autom\u00e1ticamente el n\u00famero de nodos durante la noche y los aumentar\u00e1 por la ma\u00f1ana, permitiendo ahorrar en el costo de uso de nodos de un servicio en la nube como Amazon. Esta funci\u00f3n no est\u00e1 integrada en Kubernetes, pero usar Scalerd te permitir\u00e1 escalar esta plataforma como desees. <\/p>\n<p>Quiero llamar su atenci\u00f3n sobre el hecho de que muchas personas me dicen: \u00abTodo esto est\u00e1 bien, pero \u00bfqu\u00e9 pasa con mi base de datos, que normalmente permanece en un estado est\u00e1tico?\u00bb \u00bfC\u00f3mo se puede ejecutar algo as\u00ed en un entorno din\u00e1mico como Kubernetes? En mi opini\u00f3n, no deber\u00edas hacerlo, no deber\u00edas intentar organizar el funcionamiento de un almac\u00e9n de datos en Kubernetes. T\u00e9cnicamente es posible, y hay gu\u00edas en Internet al respecto, sin embargo, complicar\u00e1 seriamente tu vida. <\/p>\n<p>S\u00ed, en Kubernetes existe el concepto de almacenamiento persistente, y puedes intentar ejecutar almacenes de datos como Mongo o MySQL, pero es una tarea bastante ardua. Esto se debe a que los almacenes de datos no admiten completamente la interacci\u00f3n con un entorno din\u00e1mico. La mayor\u00eda de las bases de datos requieren una configuraci\u00f3n significativa, incluyendo la configuraci\u00f3n manual del cl\u00faster, no les gusta el escalado autom\u00e1tico y otras cosas similares. <br \/>\nPor lo tanto, no compliques tu vida tratando de ejecutar un almac\u00e9n de datos en Kubernetes. Organiza su funcionamiento de manera tradicional utilizando servicios familiares y simplemente permite que Kubernetes los utilice.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/129e8d403f42b7aa6fb022b386955e9e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara concluir el tema, quiero presentarte la plataforma Cloud RTI basada en Kubernetes en la que trabaja mi equipo. Proporciona un registro centralizado, monitoreo de aplicaciones y cl\u00fasteres, y cuenta con muchas otras funciones \u00fatiles que te ser\u00e1n de ayuda. Utiliza diversas herramientas de c\u00f3digo abierto, como Grafana para la visualizaci\u00f3n del monitoreo.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/a0e79033dbc0a2683e3567934c9ba014.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, autoescalado y automatizaci\u00f3n del despliegue. Parte 2.\" src=\"\/wp-content\/uploads\/2020\/06\/2b1b7ba139053fc492c7ad25e96f362f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe plante\u00f3 la pregunta de por qu\u00e9 usar un balanceador de carga ha-proxy con Kubernetes. Buena pregunta, porque actualmente existen dos niveles de balanceo de carga. Los servicios de Kubernetes todav\u00eda est\u00e1n en direcciones IP virtuales. No puedes usarlos para puertos de m\u00e1quinas anfitrionas externas, porque si Amazon sobrecarga su hospedaje en la nube, la direcci\u00f3n cambiar\u00e1. Por eso colocamos ha-proxy frente a los servicios, para crear una estructura m\u00e1s est\u00e1tica para la interacci\u00f3n ininterrumpida del tr\u00e1fico con Kubernetes. <\/p>\n<p>Otra buena pregunta: \u00bfc\u00f3mo se puede gestionar el cambio en el esquema de la base de datos durante un despliegue blue\/green? El hecho es que, independientemente del uso de Kubernetes, cambiar el esquema de la base de datos es una tarea compleja. Necesitas asegurar la compatibilidad entre el esquema antiguo y el nuevo, despu\u00e9s de lo cual podr\u00e1s actualizar la base de datos y luego actualizar las aplicaciones. Puedes realizar un \u00abcambio en caliente\u00bb de la base de datos y luego actualizar las aplicaciones. Conozco personas que han cargado un cl\u00faster de base de datos completamente nuevo con un nuevo esquema, esa es una opci\u00f3n si tienes una base de datos sin esquema como Mongo, pero en cualquier caso no es una tarea sencilla. Si no hay m\u00e1s preguntas, \u00a1gracias por su atenci\u00f3n!<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"-Ci4vd4rh4M\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/-Ci4vd4rh4M\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Un poco de publicidad \ud83d\ude42<\/h3>\n<p>\nGracias por permanecer con nosotros. \u00bfTe gustan nuestros art\u00edculos? \u00bfQuieres ver m\u00e1s contenido interesante? Ap\u00f3yanos haciendo un pedido o recomendando a tus conocidos, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS en la nube para desarrolladores desde $4.99<\/a><\/noindex>, <b>un an\u00e1logo \u00fanico de servidores entry-level que hemos dise\u00f1ado para Ti:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Toda la verdad sobre VPS (KVM) E5-2697 v3 (6 n\u00facleos) 10GB DDR4 480GB SSD 1Gbps desde $19, o c\u00f3mo dividir correctamente un servidor?<\/a><\/noindex> (disponibles opciones con RAID1 y RAID10, hasta 24 n\u00facleos y hasta 40GB DDR4).<\/p>\n<p><b>\u00bfDell R730xd a mitad de precio en el centro de datos Equinix Tier IV en \u00c1msterdam?<\/b> Solo aqu\u00ed <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB desde $199<\/a><\/noindex> \u00a1en los Pa\u00edses Bajos! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 \u00a1desde $99!<\/b><\/b> Lee sobre c\u00f3mo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Construir infraestructura de clase empresarial usando servidores Dell R730xd E5-2650 v4 que cuestan 9000 euros a un precio asequible?<\/a><\/noindex><br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/504672\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u041f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0441\u0440\u0435\u0434\u0435 \u043c\u044b \u043d\u0443\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c Blue\/Green deployment, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435\u0432 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443 SSL. \u042d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83788,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83787","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=\"description\" content=\"Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.\" \/>\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\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2\" \/>\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\udd47DEVOXX UK. Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Blue\/Green deployment, \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2\" \/>\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-06-03T05:42:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-03T05:42:26+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\udd47DEVOXX UK. Kubernetes en producci\u00f3n: Despliegue Blue\/Green, escalado autom\u00e1tico y automatizaci\u00f3n del despliegue. Parte 2 | ProHoster","description":"Kubernetes es una excelente herramienta para ejecutar contenedores Docker en un entorno de producci\u00f3n en cl\u00faster. Sin embargo, hay tareas que Kubernetes no puede resolver.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","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\udd47DEVOXX UK. Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Blue\/Green deployment, \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster","og:description":"Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","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-06-03T05:42:26+00:00","article:modified_time":"2020-06-03T05:42:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83787","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 15:11:01","updated":"2022-09-28 11:45:41","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\/83787","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=83787"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/83787\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/83788"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=83787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=83787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=83787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}