Gerenciamento avançado de cluster e gerenciamento de aplicativos da Red Hat, parte 2. Implementação azul / verde, migração ...

Olá a todos neste blog! No post anterior, cobrimos os conceitos básicos do ciclo de vida do aplicativo no Red Hat Advanced Cluster Management (ACM) e mostramos como aplicá-los implementando um aplicativo em dois clusters. Hoje mostraremos como usar o ACM para implantações azul-esverdeadas, migração de aplicativos entre clusters e recuperação de desastres.







Lembre-se de que estamos usando a configuração do modelo mostrada no diagrama abaixo e preste atenção aos rótulos disponíveis lá, pois os usaremos ativamente em nossos exemplos.



Componentes de software Versões
Plataforma de contêiner Red Hat OpenShift 4.5.7
Gerenciamento avançado de cluster da Red Hat 2.0 Fix Pack 2.0.2


Repositório Git



Também usaremos o repositório Git do artigo anterior:



Ramo Descrição
config Armazena arquivos base para aplicativos que são usados ​​em todos os ambientes.
Prod Armazena arquivos de sobreposição para aplicativos usados ​​em ambientes de produção.
etapa Armazena arquivos de sobreposição para aplicativos que são usados ​​em ambientes de teste


Implantação azul / verde com Red Hat ACM



No artigo anterior, implementamos nosso aplicativo de palavras reversas em dois ambientes, desenvolvimento e produção. Digamos que, em Desenvolvimento, tenhamos a versão 0.0.3 e em Produção - 0.0.2.



Agora, digamos que os desenvolvedores tenham lançado a versão 0.0.4 e queremos fazer uma implantação azul-verde para os clusters de desenvolvimento e produção usando os recursos GitOps do ACM.



No artigo anterior, criamos os recursos necessários de Channel, PlacementRules, Subscriptions e Applications no ACM, para que, quando implantarmos a nova versão, apenas o Git funcione em ambos os clusters.



Atualização do aplicativo no ambiente de desenvolvimento



Uma vez que todos os recursos necessários já foram criados, precisamos apenas alterar as descrições do aplicativo no Git para atualizar as versões nos ambientes correspondentes.



NOTA. Como aqui estamos apenas demonstrando os recursos do GitOps do ACM, enviaremos as alterações diretamente para as ramificações do repositório, o que não é bom. Na vida real, você deve ter um processo bem definido para fazer alterações em diferentes ambientes, você pode ler mais sobre isso aqui .



1. Vá para o nosso repositório Git clonado:



NOTA: Se você reproduziu os exemplos do artigo anterior, então você já tem um branch clonado deste repositório .



cd /path/to/acm-app-lifecycle-blog/forked/repository/


2. Primeiro, queremos atualizar a versão do aplicativo no ambiente de desenvolvimento para que possamos testá-lo antes de enviar as alterações para o ambiente de produção. Portanto, estaremos trabalhando com o branch de palco.



git checkout stage


3. Agora você precisa atualizar a sobreposição para a implantação do aplicativo para que esta implantação use a imagem da nova versão (0.0.4).



Até agora, a versão 0.0.3 está sendo executada no cluster de Desenvolvimento.



sed -i "s/v0.0.3/v0.0.4/g" apps/reversewords/overlays/deployment.yaml


4. Antes de confirmar as alterações, verifique o estado atual do aplicativo no cluster de desenvolvimento.



curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080


Como você pode ver, a versão 0.0.3 está atualmente em execução no ambiente de desenvolvimento:



Reverse Words Release: Stage Release v0.0.3. App version: v0.0.3


5. Confirme o arquivo e envie-o para a ramificação do palco.



NOTA. Mais uma vez, na vida real, você não deveria. Você deve ter um processo bem definido para isso.



git add apps/reversewords/overlays/deployment.yaml
git commit -m "Pushed development reverse-words app version to v0.0.4"
git push origin stage


6. Como já temos uma Subscrição, ao detectar um novo commit em nosso repositório e branch, o ACM executará ações para mudar o estado atual para o desejado, conforme escrito em Git.



oc --context dev -n reverse-words-stage get pods


Como você pode ver, as mudanças foram detectadas e a nova versão do pod é implantada com a nova versão do aplicativo.



NAME                             READY   STATUS              RESTARTS   AGE
reverse-words-5ff744d4bd-kkfvn   0/1     ContainerCreating   0          3s
reverse-words-68b9b894dd-jfgpf   1/1     Running             0          109m


7. Agora vamos executar a solicitação para o aplicativo e verificar se implementamos a versão 0.0.4.



curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080

Reverse Words Release: Stage Release v0.0.4. App version: v0.0.4


8. A versão de produção permanece intacta.



curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080

Reverse Words Release: Production release v0.0.2. App version: v0.0.2


9. Agora você pode executar testes de validação e, se tudo estiver bem, implantar a nova versão do aplicativo em produção.



Atualização do aplicativo no ambiente de produção



1. Vá para o repositório Git clonado.



cd /path/to/acm-app-lifecycle-blog/forked/repository/


2. Acreditamos ter testado com sucesso a nova versão do aplicativo no cluster de Desenvolvimento e é hora de fazer as mudanças apropriadas para implantá-lo no cluster de Produção, então agora trabalharemos com o ramo de produção.



git checkout prod


3. Você precisa atualizar a sobreposição para a implantação do aplicativo para que esta implantação use a imagem da nova versão (0.0.4).



Até agora, a versão 0.0.2 está sendo executada no cluster de produção



sed -i "s/v0.0.2/v0.0.4/g" apps/reversewords/overlays/deployment.yaml


4. Antes de confirmar as mudanças, verifique o estado atual do aplicativo no cluster de produção.



curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080


Como você pode ver, a versão 0.0.2 está atualmente em execução no ambiente de produção:



Reverse Words Release: Stage Release v0.0.2. App version: v0.0.2


5. Confirme o arquivo e envie-o ao branch prod.



NOTA. Mais uma vez, na vida real, você não deveria. Você deve ter um processo bem definido para isso.



git add apps/reversewords/overlays/deployment.yaml
git commit -m "Pushed production reverse-words app version to v0.0.4"
git push origin prod


6. Como já temos uma Subscrição, ao detectar um novo commit em nosso repositório e branch, o ACM executará ações para mudar o estado atual para o desejado, conforme escrito em Git.



oc --context pro -n reverse-words-prod get pods


Como você pode ver, as mudanças foram detectadas e a nova versão do pod é implantada com a nova versão do aplicativo.



NAME                             READY   STATUS              RESTARTS   AGE
reverse-words-68795d69ff-6t4c7   0/1     ContainerCreating   0          5s
reverse-words-7dd94446c-vkzr8    1/1     Running             0          115m


7. Agora vamos executar a solicitação para o aplicativo e verificar se implementamos a versão 0.0.4.



curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080

Reverse Words Release: Production Release v0.0.4. App version: v0.0.4


8. É isso, atualizamos nosso aplicativo para a versão 0.0.4 nos dois ambientes: Desenvolvimento e Produção.



Conclusão



Na primeira parte desta série, cobrimos os aspectos do ACM que se enquadram na categoria GitOps. Hoje aprendemos como usar o ACM para implantações azul-esverdeadas, migração de aplicativos entre clusters e recuperação de desastres. No próximo post, mostraremos como migrar perfeitamente seu aplicativo de palavras reversas entre nossos clusters usando ACM.



All Articles