{"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\/pt\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","title":{"rendered":"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kubernetes \u00e9 uma excelente ferramenta para executar cont\u00eaineres Docker em um ambiente de produ\u00e7\u00e3o clusterizado. No entanto, existem tarefas que o Kubernetes n\u00e3o consegue resolver. Com implanta\u00e7\u00f5es frequentes em um ambiente de produ\u00e7\u00e3o, precisamos de um Blue\/Green deployment totalmente automatizado para evitar interrup\u00e7\u00f5es nesse processo, que tamb\u00e9m requer o manuseio de solicita\u00e7\u00f5es HTTP externas e a execu\u00e7\u00e3o de descargas SSL. Isso exige integra\u00e7\u00e3o com um balanceador de carga, como o ha-proxy. Outra tarefa \u00e9 o escalonamento semi-autom\u00e1tico do pr\u00f3prio cluster Kubernetes ao operar em um ambiente de nuvem, como, por exemplo, a redu\u00e7\u00e3o parcial do cluster durante a noite.<\/p>\n<p>Embora o Kubernetes n\u00e3o possua essas funcionalidades 'prontas para uso', ele fornece uma API que pode ser utilizada para resolver essas tarefas. Ferramentas para implanta\u00e7\u00e3o autom\u00e1tica de Blue\/Green e escalonamento do cluster Kubernetes foram desenvolvidas no \u00e2mbito do projeto Cloud RTI, que foi baseado em c\u00f3digo aberto.<\/p>\n<p>Neste artigo, uma transcri\u00e7\u00e3o de v\u00eddeo, \u00e9 explicado como configurar o Kubernetes junto com outros componentes de c\u00f3digo aberto para criar um ambiente pronto para produ\u00e7\u00e3o, que lida com o c\u00f3digo do commit git commit sem interrup\u00e7\u00f5es em produ\u00e7\u00e3o.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. 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 em Produ\u00e7\u00e3o: Blue\/Green deployment, autoscaling e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 1.<\/a><\/noindex><\/p>\n<p>Assim, ap\u00f3s ter acesso aos seus aplicativos a partir do mundo externo, voc\u00ea pode come\u00e7ar a configurar a automa\u00e7\u00e3o completa, ou seja, lev\u00e1-la ao est\u00e1gio em que pode executar um git commit e garantir que esse git commit finalize em produ\u00e7\u00e3o. Naturalmente, ao realizar esses passos durante a implanta\u00e7\u00e3o, n\u00e3o queremos enfrentar interrup\u00e7\u00f5es. Portanto, toda automa\u00e7\u00e3o no Kubernetes come\u00e7a com a API. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/aa470c1562e49d98a164e0485196426e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKubernetes n\u00e3o \u00e9 a ferramenta que pode ser utilizada de maneira produtiva 'pronta para uso'. Claro, voc\u00ea pode fazer isso, usar kubectl e assim por diante, mas ainda assim a API \u00e9 o aspecto mais interessante e \u00fatil desta plataforma. Usando a API como um conjunto de fun\u00e7\u00f5es, voc\u00ea pode acessar praticamente tudo o que deseja fazer no Kubernetes. O kubectl em si tamb\u00e9m utiliza a REST API. <\/p>\n<p>Este \u00e9 um REST, ent\u00e3o voc\u00ea pode usar qualquer linguagem e ferramentas para trabalhar com esta API, mas bibliotecas personalizadas facilitar\u00e3o muito sua vida. Minha equipe escreveu 2 dessas bibliotecas: uma para Java \/ OSGi e uma para Go. A segunda n\u00e3o \u00e9 muito utilizada, mas, de qualquer forma, voc\u00ea tem essas ferramentas \u00fateis \u00e0 sua disposi\u00e7\u00e3o. Elas constituem um projeto open-source parcialmente licenciado. Existem muitas dessas bibliotecas para v\u00e1rias linguagens, ent\u00e3o voc\u00ea pode escolher as mais adequadas. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/808865e4cda6023c6775ec9e581fc46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAssim, antes de come\u00e7ar a automatizar a implanta\u00e7\u00e3o, \u00e9 necess\u00e1rio garantir que esse processo n\u00e3o enfrentar\u00e1 per\u00edodos de inatividade. Por exemplo, nossa equipe realiza implanta\u00e7\u00f5es em produ\u00e7\u00e3o durante o meio do dia, quando as pessoas utilizam os aplicativos ao m\u00e1ximo, portanto, \u00e9 muito importante evitar atrasos nesse processo. Para evitar per\u00edodos de inatividade, utilizamos 2 m\u00e9todos: implanta\u00e7\u00e3o blue\/green ou atualiza\u00e7\u00e3o cont\u00ednua. No \u00faltimo caso, se voc\u00ea tiver 5 r\u00e9plicas do aplicativo em opera\u00e7\u00e3o, elas s\u00e3o atualizadas sequencialmente, uma ap\u00f3s a outra. Este m\u00e9todo funciona muito bem, mas n\u00e3o \u00e9 adequado se voc\u00ea tiver vers\u00f5es diferentes do aplicativo em execu\u00e7\u00e3o simultaneamente durante o processo de implanta\u00e7\u00e3o. Nesse caso, voc\u00ea pode atualizar a interface do usu\u00e1rio enquanto o backend ainda estiver rodando uma vers\u00e3o anterior, e a funcionalidade do aplicativo ser\u00e1 interrompida. Portanto, do ponto de vista da programa\u00e7\u00e3o, trabalhar nessas condi\u00e7\u00f5es \u00e9 bastante complicado. <\/p>\n<p>Essa \u00e9 uma das raz\u00f5es pelas quais preferimos usar a implanta\u00e7\u00e3o blue\/green para automatizar a implanta\u00e7\u00e3o de nossos aplicativos. Com esse m\u00e9todo, voc\u00ea deve garantir que em um determinado momento somente uma vers\u00e3o do aplicativo esteja ativa. <\/p>\n<p>O mecanismo de implanta\u00e7\u00e3o blue\/green funciona da seguinte forma. Recebemos o tr\u00e1fego para nossos aplicativos atrav\u00e9s do ha-proxy, que o direciona para as r\u00e9plicas em execu\u00e7\u00e3o da mesma vers\u00e3o do aplicativo. <\/p>\n<p>Quando uma nova implanta\u00e7\u00e3o ocorre, usamos o Deployer, que recebe os novos componentes e realiza o deploy da nova vers\u00e3o. O deploy da nova vers\u00e3o do aplicativo significa que um novo conjunto de r\u00e9plicas \u00e9 'levantado', ap\u00f3s o que essas r\u00e9plicas da nova vers\u00e3o s\u00e3o iniciadas em um novo pod separado. No entanto, o ha-proxy n\u00e3o tem conhecimento delas e ainda n\u00e3o direciona nenhuma carga de trabalho para elas.<\/p>\n<p>Portanto, \u00e9 necess\u00e1rio primeiro realizar uma verifica\u00e7\u00e3o de opera\u00e7\u00e3o das novas vers\u00f5es por meio de health checking, para garantir que as r\u00e9plicas estejam prontas para lidar com a carga.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/6134f89567ac3627197883b2f4c768d4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTodos os componentes de implanta\u00e7\u00e3o devem suportar alguma forma de health check. Isso pode ser apenas uma verifica\u00e7\u00e3o simples de HTTP, onde voc\u00ea recebe um c\u00f3digo de status 200, ou uma verifica\u00e7\u00e3o mais profunda, na qual voc\u00ea verifica a conex\u00e3o das r\u00e9plicas com o banco de dados e outros servi\u00e7os, a resili\u00eancia das conex\u00f5es do ambiente din\u00e2mico, se tudo est\u00e1 sendo iniciado e funcionando corretamente. Esse processo pode ser bastante complexo. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/fdc537599187b32ab97bc00970283e1a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDepois que o sistema confirmar a opera\u00e7\u00e3o de todas as r\u00e9plicas atualizadas, o Deployer atualizar\u00e1 a configura\u00e7\u00e3o e transmitir\u00e1 o confd correto, que reconfigurar\u00e1 o ha-proxy. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/099240482096c2ac4aafe7e803409511.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSomente depois disso o tr\u00e1fego ser\u00e1 direcionado para o pod com as r\u00e9plicas da nova vers\u00e3o, enquanto o pod antigo desaparecer\u00e1. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/f656b3a3adfc27e782e5d9785b8b615e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsse mecanismo n\u00e3o \u00e9 uma caracter\u00edstica do Kubernetes. O conceito de Blue\/green deployment existe h\u00e1 bastante tempo e sempre utilizou um balanceador de carga. Primeiro, voc\u00ea direciona todo o tr\u00e1fego para a vers\u00e3o antiga do aplicativo e, ap\u00f3s a atualiza\u00e7\u00e3o, migra totalmente para a nova vers\u00e3o. Esse princ\u00edpio \u00e9 usado n\u00e3o apenas no Kubernetes.<\/p>\n<p>Agora, vou apresentar a voc\u00eas um novo componente de implanta\u00e7\u00e3o \u2013 o Deployer, que realiza verifica\u00e7\u00f5es de opera\u00e7\u00e3o, reconfigura o proxy e assim por diante. Este \u00e9 um conceito que n\u00e3o diz respeito ao mundo externo e existe dentro do Kubernetes. Vou mostrar como criar seu pr\u00f3prio conceito de Deployer usando ferramentas open-source. <\/p>\n<p>Ent\u00e3o, a primeira coisa que o Deployer faz \u00e9 criar um controlador de replica\u00e7\u00e3o RC usando a API do Kubernetes. Essa API cria pods e servi\u00e7os para o pr\u00f3ximo desdobramento, ou seja, cria um cluster totalmente novo para nossos aplicativos. Assim que o RC confirma que as r\u00e9plicas foram iniciadas, ele realiza um teste de sa\u00fade (Health check). Para isso, o Deployer utiliza o comando GET \/health. Este comando ativa os componentes de verifica\u00e7\u00e3o correspondentes e verifica todos os elementos necess\u00e1rios para o funcionamento do cluster. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/f2ef0232e17bc69f0b70ea9eabc2f456.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDepois que todos os pods reportam sua 'sa\u00fade', o Deployer cria um novo item de configura\u00e7\u00e3o \u2013 um armazenamento distribu\u00eddo etcd, usado internamente pelo Kubernetes, incluindo para o armazenamento da configura\u00e7\u00e3o do balanceador de carga. Gravamos os dados no etcd, e uma pequena ferramenta chamada confd monitora o etcd para detectar novos dados. <\/p>\n<p>Se detectar alguma altera\u00e7\u00e3o na configura\u00e7\u00e3o original, ele gera um novo arquivo de configura\u00e7\u00f5es e o envia para o ha-proxy. Nesse caso, o ha-proxy reinicia sem perder qualquer conex\u00e3o e direciona a carga para os novos services que garantem o funcionamento da nova vers\u00e3o dos nossos aplicativos. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/bef1536c2b8dee6b0da710fc6c6fda99.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo voc\u00ea pode ver, apesar da variedade de componentes, n\u00e3o h\u00e1 nada complicado aqui. Voc\u00ea s\u00f3 precisa prestar mais aten\u00e7\u00e3o \u00e0 API e ao etcd. Quero falar sobre um deploier open-source que usamos \u2013 o Amdatu Kubernetes Deployer.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/34124e093d2e16fcbb80fd112c7d223f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsse \u00e9 um instrumento para orquestra\u00e7\u00e3o de desdobramentos do Kubernetes, com as seguintes funcionalidades: <\/p>\n<ul>\n<li>desdobramento Blue\/Green;<\/li>\n<li>configura\u00e7\u00e3o de balanceador de carga externo;<\/li>\n<li>gerenciamento de descritores de desdobramento;<\/li>\n<li>gerenciamento do desdobramento real;<\/li>\n<li>verifica\u00e7\u00e3o de sa\u00fade (Health checks) durante o desdobramento;<\/li>\n<li>inje\u00e7\u00e3o de vari\u00e1veis de ambiente nos pods.<\/li>\n<\/ul>\n<p>\nEste Deployer \u00e9 constru\u00eddo sobre a API do Kubernetes e fornece uma API REST para gerenciar descritores e desdobramentos, al\u00e9m de uma API Websocket para logs em tempo real durante o processo de desdobramento.<\/p>\n<p>Ele coloca os dados de configura\u00e7\u00e3o do balanceador de carga no etcd, portanto, voc\u00ea pode n\u00e3o usar o ha-proxy com suporte 'pronto para uso', mas facilmente utilizar seu pr\u00f3prio arquivo de configura\u00e7\u00e3o do balanceador. O Amdatu Deployer \u00e9 escrito em Go, assim como o pr\u00f3prio Kubernetes, e licenciado sob a Apache.<\/p>\n<p>Antes de utilizar esta vers\u00e3o do depurador, utilizei o seguinte descritor de implanta\u00e7\u00e3o, no qual est\u00e3o especificados os par\u00e2metros que preciso. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/14e9ecca6ad772a43afcf95a4950fad8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUm dos par\u00e2metros importantes deste c\u00f3digo \u00e9 a habilita\u00e7\u00e3o da flag \"useHealthCheck\". Precisamos especificar que, durante o processo de implanta\u00e7\u00e3o, a verifica\u00e7\u00e3o de sa\u00fade deve ser realizada. Este par\u00e2metro pode ser desativado quando a implanta\u00e7\u00e3o envolve cont\u00eaineres de terceiros que n\u00e3o precisam ser verificados. Este descritor tamb\u00e9m especifica o n\u00famero de r\u00e9plicas e a URL do frontend que o ha-proxy necessita. No final, est\u00e1 a flag da especifica\u00e7\u00e3o do pod \"podspec\", que se comunica com o Kubernetes para obter informa\u00e7\u00f5es sobre a configura\u00e7\u00e3o de portas, imagens, etc. Este \u00e9 um descritor simples no formato JSON. <\/p>\n<p>Outra ferramenta que faz parte do projeto open-source Amdatu \u00e9 o Deploymentctl. Ele possui uma interface de usu\u00e1rio (UI) para configurar a implanta\u00e7\u00e3o, mant\u00e9m um hist\u00f3rico das implanta\u00e7\u00f5es e cont\u00e9m webhooks para chamadas de retorno de usu\u00e1rios e desenvolvedores externos. Voc\u00ea pode optar por n\u00e3o usar a UI, uma vez que o pr\u00f3prio Amdatu Deployer \u00e9 uma REST API, mas essa interface pode facilitar muito a sua implanta\u00e7\u00e3o sem o uso de qualquer API. O Deploymentctl \u00e9 escrito em OSGi\/Vertx utilizando Angular 2. <\/p>\n<p>Agora vou demonstrar o que foi dito na tela, usando uma grava\u00e7\u00e3o pr\u00e9-feita, para que voc\u00ea n\u00e3o precise esperar. Vamos implantar um aplicativo simples em Go. N\u00e3o se preocupe se voc\u00ea nunca tiver trabalhado com Go antes, este \u00e9 um aplicativo muito simples, ent\u00e3o tudo deve ser claro para voc\u00ea. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/ab61ada396143e980d73a0bb8ff95076.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAqui estamos criando um servidor HTTP que responde apenas a \/health, ent\u00e3o este aplicativo apenas verifica a sa\u00fade e nada mais. Se a verifica\u00e7\u00e3o for bem-sucedida, \u00e9 acionada a estrutura JSON mostrada abaixo. Ela cont\u00e9m a vers\u00e3o do aplicativo que ser\u00e1 implantada pelo depurador, a mensagem que voc\u00ea v\u00ea na parte superior do arquivo e um tipo de dado booleano - se o nosso aplicativo est\u00e1 funcionando ou n\u00e3o.<\/p>\n<p>Quanto \u00e0 \u00faltima linha, eu fui um pouco astuto, pois coloquei um valor booleano fixo no in\u00edcio do arquivo, que me ajudar\u00e1 a implantar at\u00e9 mesmo um aplicativo \"n\u00e3o saud\u00e1vel\". Vamos tratar disso mais tarde. <\/p>\n<p>Vamos come\u00e7ar. Primeiro, verificamos a exist\u00eancia de qualquer pod em execu\u00e7\u00e3o com o comando ~ kubectl get pods e, na aus\u00eancia de resposta da URL do frontend, confirmamos que nenhuma implanta\u00e7\u00e3o est\u00e1 sendo realizada no momento. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/4da1ae467993d6e60ec539ae5ff136ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEm seguida, na tela, voc\u00ea v\u00ea a interface Deploymentctl que mencionei, onde s\u00e3o definidos os par\u00e2metros de implanta\u00e7\u00e3o: namespace, nome do aplicativo, vers\u00e3o da implanta\u00e7\u00e3o, n\u00famero de r\u00e9plicas, URL do frontend, nome do cont\u00eainer, imagem, limites de recursos, n\u00famero da porta para verifica\u00e7\u00e3o de sa\u00fade e assim por diante. Os limites de recursos s\u00e3o muito importantes, pois permitem utilizar a quantidade m\u00e1xima poss\u00edvel de 'hardware'. Aqui tamb\u00e9m \u00e9 poss\u00edvel visualizar o log da implanta\u00e7\u00e3o, o Deployment log.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/edf6a02b336f1abce61f0a323edeee9d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe agora repetirmos o comando ~ kubectl get pods, veremos que o sistema 'congela' por 20 segundos, durante os quais ocorre a reconfigura\u00e7\u00e3o do ha-proxy. Ap\u00f3s isso, o pod \u00e9 iniciado e nossa r\u00e9plica pode ser vista no log da implanta\u00e7\u00e3o. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/c6c8f6335e00d3a9cfcf4d4792ecf795.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEu cortei do v\u00eddeo a espera de 20 segundos, e agora voc\u00ea v\u00ea na tela que a primeira vers\u00e3o do aplicativo foi implantada. Tudo isso foi realizado apenas com a ajuda da interface gr\u00e1fica. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/d21fa9ad71e22b2bb9efdfc7bc9c8771.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAgora vamos tentar a segunda vers\u00e3o. Para isso, eu altero a mensagem do aplicativo de 'Hello, Kubernetes!' para 'Hello, Deployer!', o sistema cria esta imagem e a coloca no registro Docker, e ent\u00e3o simplesmente clicamos novamente no bot\u00e3o 'Deploy' na janela do Deploymentctl. Isso automaticamente inicia o log de implanta\u00e7\u00e3o da mesma forma que ocorreu na implanta\u00e7\u00e3o da primeira vers\u00e3o do aplicativo. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/e4ef784649fd18b1580d2562b318ac0f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO comando ~ kubectl get pods mostra que atualmente est\u00e3o em execu\u00e7\u00e3o 2 vers\u00f5es do aplicativo, no entanto, o frontend indica que ainda estamos usando a vers\u00e3o 1. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/1d4a9c91f836007325a2a2c833da8eff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO balanceador de carga aguarda at\u00e9 que a verifica\u00e7\u00e3o de sa\u00fade seja conclu\u00edda, ap\u00f3s o que redirecionar\u00e1 o tr\u00e1fego para a nova vers\u00e3o. Depois de 20 segundos, mudamos para o curl e vemos que agora temos a 2\u00aa vers\u00e3o do aplicativo implantada, enquanto a primeira foi removida. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/e123618251e9fcb1c14829772634b6e8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEssa foi a implanta\u00e7\u00e3o de um aplicativo 'saud\u00e1vel' \u2014 healthy. Vamos ver o que acontece se eu alterar o valor do par\u00e2metro Healthy da nova vers\u00e3o do aplicativo de true para false, ou seja, se eu tentar implantar um aplicativo unhealthy que n\u00e3o passou na verifica\u00e7\u00e3o de funcionalidade. Isso pode ocorrer se, durante a fase de desenvolvimento, ocorreram erros de configura\u00e7\u00e3o no aplicativo e ele foi enviado para produ\u00e7\u00e3o dessa forma. <\/p>\n<p>Como voc\u00ea pode ver, o deployment passa por todas as etapas mencionadas acima, e ~ kubectl get pods mostra que ambos os pods est\u00e3o em execu\u00e7\u00e3o. Por\u00e9m, ao contr\u00e1rio do deployment anterior, o log mostra o estado de timeout. Ou seja, devido \u00e0 falha na verifica\u00e7\u00e3o de health check, a nova vers\u00e3o do aplicativo n\u00e3o pode ser implantada. Como resultado, voc\u00ea v\u00ea que o sistema voltou a utilizar a vers\u00e3o antiga do aplicativo, enquanto a nova vers\u00e3o foi simplesmente removida. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/4542761328603596704f21cef4c9d4a3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA boa not\u00edcia \u00e9 que, mesmo que voc\u00ea tenha um grande n\u00famero de solicita\u00e7\u00f5es simult\u00e2neas chegando ao aplicativo, os usu\u00e1rios nem perceber\u00e3o a interrup\u00e7\u00e3o durante a execu\u00e7\u00e3o do procedimento de deployment. Se voc\u00ea testar esse aplicativo com o framework Gatling, que lhe envia o maior n\u00famero poss\u00edvel de solicita\u00e7\u00f5es, nenhuma dessas solicita\u00e7\u00f5es ser\u00e1 descartada. Isso significa que nossos usu\u00e1rios nem notar\u00e3o a atualiza\u00e7\u00e3o de vers\u00f5es em tempo real. Se a atualiza\u00e7\u00e3o falhar, a opera\u00e7\u00e3o continuar\u00e1 na vers\u00e3o antiga; se for bem-sucedida, os usu\u00e1rios migrar\u00e3o para a nova vers\u00e3o. <\/p>\n<p>H\u00e1 apenas uma coisa que pode levar a uma falha \u2013 se a verifica\u00e7\u00e3o de health check passar com sucesso, mas o aplicativo falhar assim que receber a carga de trabalho, ou seja, o colapso ocorrer\u00e1 apenas ap\u00f3s a conclus\u00e3o do deployment. Nesse caso, voc\u00ea ter\u00e1 que reverter manualmente para a vers\u00e3o antiga. Assim, discutimos como utilizar o Kubernetes com as ferramentas open-source criadas para ele. O procedimento de deployment ser\u00e1 muito mais f\u00e1cil se voc\u00ea integrar essas ferramentas aos pipelines de constru\u00e7\u00e3o\/deployment. Com isso, voc\u00ea pode usar tanto a interface do usu\u00e1rio quanto automatizar completamente esse processo, aplicando, por exemplo, commit to master. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/43b638be9d334c6c4f8e9f4fc00ce2f9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNosso servidor de build criar\u00e1 uma imagem Docker, enviando-a para o Docker Hub ou qualquer outro registro que voc\u00ea estiver utilizando. O Docker Hub suporta webhook, portanto, podemos iniciar um deployment remoto atrav\u00e9s do Deployer, conforme mostrado acima. Dessa forma, \u00e9 poss\u00edvel automatizar completamente a implanta\u00e7\u00e3o do aplicativo em um ambiente de produ\u00e7\u00e3o potencial. <\/p>\n<p>Vamos passar para o pr\u00f3ximo t\u00f3pico \u2013 a escalabilidade do cluster Kubernetes. Observe que o comando kubectl \u00e9 o comando de escalabilidade. Com ele, \u00e9 f\u00e1cil aumentar o n\u00famero de r\u00e9plicas no nosso cluster existente. No entanto, na pr\u00e1tica, normalmente queremos aumentar o n\u00famero de n\u00f3s, n\u00e3o de pods. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/890f436b4bc52c81f5db5b35e64e7e18.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNesse sentido, durante o hor\u00e1rio comercial, pode ser necess\u00e1rio aumentar a capacidade, enquanto \u00e0 noite, para reduzir os custos dos servi\u00e7os da Amazon, ser\u00e1 necess\u00e1rio diminuir o n\u00famero de inst\u00e2ncias do aplicativo em execu\u00e7\u00e3o. Isso n\u00e3o significa que ser\u00e1 suficiente escalar apenas o n\u00famero de pods, pois mesmo que um dos n\u00f3s esteja ocioso, voc\u00ea ainda ter\u00e1 que pagar por ele \u00e0 Amazon. Ou seja, al\u00e9m de escalar os pods, voc\u00ea precisar\u00e1 escalonar tamb\u00e9m o n\u00famero de m\u00e1quinas utilizadas. <\/p>\n<p>Isso pode causar complica\u00e7\u00f5es, porque independentemente de estarmos usando a Amazon ou outro servi\u00e7o de nuvem, o Kubernetes n\u00e3o tem conhecimento sobre o n\u00famero de m\u00e1quinas utilizadas. Falta uma ferramenta que permita escalar o sistema ao n\u00edvel dos n\u00f3s. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/2f00b19f1cb665d8e7bd896fa419554c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPortanto, teremos que cuidar tanto dos n\u00f3s quanto dos pods. Podemos facilmente escalar o lan\u00e7amento de novos n\u00f3s usando a API da AWS e grupos de m\u00e1quinas de escalonamento para configurar o n\u00famero de n\u00f3s de trabalho do Kubernetes. Tamb\u00e9m \u00e9 poss\u00edvel usar cloud-init ou um script semelhante para registrar os n\u00f3s no cluster Kubernetes. <\/p>\n<p>Uma nova m\u00e1quina \u00e9 iniciada no grupo de Scaling, se registra como um n\u00f3, \u00e9 registrada no registro mestre e come\u00e7a a operar. Depois disso, \u00e9 poss\u00edvel aumentar o n\u00famero de r\u00e9plicas para uso nos n\u00f3s criados. Reduzir o tamanho requer mais esfor\u00e7o, pois \u00e9 necess\u00e1rio garantir que essa a\u00e7\u00e3o n\u00e3o levar\u00e1 \u00e0 destrui\u00e7\u00e3o de aplicativos j\u00e1 em funcionamento ap\u00f3s a desativa\u00e7\u00e3o de m\u00e1quinas \"desnecess\u00e1rias\". Para evitar tal cen\u00e1rio, os n\u00f3s devem ser colocados no status \"unschedulable\". Isso significa que o planejador padr\u00e3o ignorar\u00e1 esses n\u00f3s ao agendar pods do DaemonSet. O planejador n\u00e3o remover\u00e1 nada desses servidores, mas tamb\u00e9m n\u00e3o iniciar\u00e1 novos cont\u00eaineres l\u00e1. A pr\u00f3xima etapa \u00e9 drenar o n\u00f3, ou seja, mover os pods ativos para outra m\u00e1quina ou outros n\u00f3s que tenham capacidade suficiente para isso. Depois de garantir que n\u00e3o h\u00e1 mais cont\u00eaineres nesses n\u00f3s, eles podem ser removidos do Kubernetes. Ap\u00f3s isso, para o Kubernetes, eles simplesmente deixar\u00e3o de existir. Em seguida, \u00e9 necess\u00e1rio usar a API da AWS para desativar n\u00f3s ou m\u00e1quinas desnecess\u00e1rias. <br \/>\nVoc\u00ea pode usar o Amdatu Scalerd \u2014 outra ferramenta open-source para escalonamento, semelhante \u00e0 API da AWS. Ele fornece uma CLI para adicionar ou remover n\u00f3s no cluster. Uma caracter\u00edstica interessante \u00e9 a possibilidade de configurar o planejador usando o seguinte arquivo json. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/f70c7c722cacb4792c316e9f80a7500a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO c\u00f3digo mostrado reduz pela metade a capacidade do cluster durante a noite. Nele, est\u00e1 configurado tanto o n\u00famero de r\u00e9plicas existentes quanto a capacidade desejada do cluster da Amazon. O uso deste planejador reduzir\u00e1 automaticamente o n\u00famero de n\u00f3s durante a noite e aumentar\u00e1 pela manh\u00e3, permitindo economizar nos custos de uso de n\u00f3s de um servi\u00e7o em nuvem como a Amazon. Esta fun\u00e7\u00e3o n\u00e3o est\u00e1 embutida no Kubernetes, mas o uso do Scalerd permitir\u00e1 escalonar esta plataforma como voc\u00ea desejar. <\/p>\n<p>Quero chamar sua aten\u00e7\u00e3o para o fato de que muitas pessoas me dizem: \"Tudo isso \u00e9 bom, mas e quanto ao meu banco de dados, que geralmente permanece em um estado est\u00e1tico?\" Como pode ser executado algo assim em um ambiente din\u00e2mico como o Kubernetes? Na minha opini\u00e3o, voc\u00ea n\u00e3o deve fazer isso, n\u00e3o deve tentar organizar o trabalho de um armazenamento de dados no Kubernetes. Tecnicamente \u00e9 poss\u00edvel, e existem guias na internet sobre isso, mas isso complicar\u00e1 seriamente sua vida. <\/p>\n<p>Sim, no Kubernetes existe o conceito de volumes persistentes, e voc\u00ea pode tentar executar armazenamentos de dados como Mongo ou MySQL, mas \u00e9 uma tarefa bastante trabalhosa. Isso se deve ao fato de que os armazenamentos de dados n\u00e3o suportam completamente a intera\u00e7\u00e3o com o ambiente din\u00e2mico. A maioria dos bancos de dados requer configura\u00e7\u00f5es significativas, incluindo a configura\u00e7\u00e3o manual do cluster, n\u00e3o gosta de autoescalonamento e outras coisas do tipo. <br \/>\nPortanto, n\u00e3o complique sua vida tentando executar um armazenamento de dados no Kubernetes. Organize seu funcionamento da maneira tradicional usando servi\u00e7os familiares e apenas permita que o Kubernetes os utilize.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/129e8d403f42b7aa6fb022b386955e9e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara concluir o tema, quero apresentar a voc\u00eas a plataforma Cloud RTI baseada em Kubernetes, na qual minha equipe est\u00e1 trabalhando. Ela fornece gerenciamento centralizado de logs, monitoramento de aplicativos e clusters e possui muitas outras fun\u00e7\u00f5es \u00fateis que ser\u00e3o valiosas para voc\u00ea. Utiliza diversas ferramentas open-source, como Grafana para exibi\u00e7\u00e3o de monitoramento.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. 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 em produ\u00e7\u00e3o: Blue\/Green deployment, escalabilidade autom\u00e1tica e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2\" src=\"\/wp-content\/uploads\/2020\/06\/2b1b7ba139053fc492c7ad25e96f362f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFoi feita uma pergunta sobre por que usar o balanceador de carga ha-proxy com Kubernetes. \u00c9 uma boa pergunta, pois atualmente existem 2 n\u00edveis de balanceamento de carga. Os servi\u00e7os Kubernetes ainda est\u00e3o em endere\u00e7os IP virtuais. Voc\u00ea n\u00e3o pode us\u00e1-los para as portas de m\u00e1quinas host externas, porque se a Amazon sobrecarregar seu host em nuvem, o endere\u00e7o mudar\u00e1. \u00c9 por isso que colocamos o ha-proxy na frente dos servi\u00e7os \u2014 para criar uma estrutura mais est\u00e1tica para a intera\u00e7\u00e3o cont\u00ednua do tr\u00e1fego com o Kubernetes. <\/p>\n<p>Outra boa pergunta - como cuidar da mudan\u00e7a no esquema do banco de dados durante o blue\/green deployment? O fato \u00e9 que, independentemente do uso do Kubernetes, mudar o esquema do banco de dados \u00e9 uma tarefa complexa. \u00c9 necess\u00e1rio garantir a compatibilidade entre o esquema antigo e o novo, depois voc\u00ea poder\u00e1 atualizar o banco de dados e, em seguida, atualizar as pr\u00f3prias aplica\u00e7\u00f5es. Voc\u00ea pode realizar a \"substitui\u00e7\u00e3o quente\" (hot swapping) do banco de dados e, em seguida, atualizar as aplica\u00e7\u00f5es. Eu conhe\u00e7o pessoas que carregaram um cluster de banco de dados completamente novo com um novo esquema, essa \u00e9 uma op\u00e7\u00e3o se voc\u00ea tiver um banco de dados sem esquema como o Mongo, mas de qualquer forma, n\u00e3o \u00e9 uma tarefa simples. Se n\u00e3o houver mais perguntas, obrigado pela aten\u00e7\u00e3o!<\/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=\"Por que no hosting comum a administra\u00e7\u00e3o do PrestaShop \u00e9 lenta, e no seu n\u00e3o \u00e9?\" 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>Um pouco de publicidade \ud83d\ude42<\/h3>\n<p>\nObrigado por permanecer conosco. Voc\u00ea gosta dos nossos artigos? Quer ver mais materiais interessantes? Apoie-nos fazendo um pedido ou recomendando para conhecidos. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS em nuvem para desenvolvedores a partir de $4.99<\/a><\/noindex>, <b>uma alternativa \u00fanica aos servidores entry-level, que criamos para voc\u00ea:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Toda a verdade sobre VPS (KVM) E5-2697 v3 (6 N\u00facleos) 10GB DDR4 480GB SSD 1Gbps a partir de $19 ou como dividir um servidor corretamente?<\/a><\/noindex> (dispon\u00edveis op\u00e7\u00f5es com RAID1 e RAID10, at\u00e9 24 n\u00facleos e at\u00e9 40GB DDR4).<\/p>\n<p><b>Dell R730xd por 2 vezes mais barato no datacenter Equinix Tier IV em Amsterd\u00e3?<\/b> Somente conosco <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 100TB a partir de $199<\/a><\/noindex> na Holanda! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 a partir de $99!<\/b><\/b> Leia sobre <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Como construir uma infraestrutura de classe corporativa utilizando servidores Dell R730xd E5-2650 v4 com custo de 9000 euros por centavos?<\/a><\/noindex><br \/>\n<br \/>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2\" \/>\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\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\/pt\/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 em produ\u00e7\u00e3o: Blue\/Green deployment, autoescalonamento e automa\u00e7\u00e3o de implanta\u00e7\u00f5es. Parte 2 | ProHoster","description":"O Kubernetes \u00e9 uma \u00f3tima ferramenta para executar cont\u00eaineres Docker em um ambiente de produ\u00e7\u00e3o em cluster. No entanto, existem tarefas que o Kubernetes n\u00e3o consegue resolver.","canonical_url":"https:\/\/prohoster.info\/pt\/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":"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\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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/83787","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=83787"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/83787\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/83788"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=83787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=83787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=83787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}