Por que a orquestração de contêineres é importante?
Nesta unidade, você pode acompanhar a equipe da Tailspin enquanto eles exploram estratégias para cumprir uma nova diretiva da gerência. A equipe examina como o Kubernetes pode ajudar na transição para uma arquitetura de microsserviços.
O futuro é menor
As coisas estão olhando para cima na Tailspin. Em um recente gerenciamento externo, Andy apresentou os sucessos recentes de sua equipe com o Azure DevOps, que foram bem recebidos. Andy também apresentou uma demonstração do recente projeto de prova de conceito da equipe usando contêineres Docker. Essas demonstrações levaram a uma série de conversas produtivas sobre o futuro técnico da organização. No dia seguinte, Andy volta para compartilhar a notícia com a equipe web do Space Game.
Andy: As coisas correram muito bem na minha apresentação fora do local ontem. A gerência está impressionada com o trabalho que fizemos até agora e nos emitiu uma missão especial.
Tim: Uh oh. Eu estive por perto tempo suficiente para ver uma armadilha como essa vindo de uma milha de distância.
Andy: Não, esta é uma grande oportunidade para nós. A gerência adorou nossa demonstração de contêiner do Docker e quer que exploremos a adoção de uma arquitetura de microsserviços.
Amita: Microsserviços? Gosta de aplicativos para celulares e relógios?
Andy: Não, os microsserviços são aplicativos típicos, como nosso aplicativo web. A principal diferença é que, em vez de criar e implantar um único aplicativo monolítico, refatoramos quaisquer componentes que seriam melhor mantidos e gerenciados como serviços autônomos. Em seguida, construímos esses serviços para serem bons no que fazem e os implantamos para operar de forma independente.
Tim: Não sei se gosto do som disso. Já estou lidando com tantos serviços em nossos ambientes. Não sei se quero mais no meu prato.
Andy: Essa é uma preocupação compreensível. Felizmente, existem algumas ótimas ferramentas para gerenciar uma infinidade de contêineres em um determinado ambiente. Foi-nos pedido que criássemos uma solução multi-contentor para a nossa aplicação Web que é orquestrada utilizando o Kubernetes. Eles também querem saber como isso afetará nosso processo de DevOps.
Mara: Tenho lido sobre o Kubernetes. O Azure tem um ótimo suporte para ele por meio do Serviço Kubernetes do Azure, e sei que há suporte de pipeline para ele no Azure DevOps.
Amita: Esse processo parece que vai ficar complexo. Como isso afetará os testes?
Mara: Não deve ser uma mudança significativa. O Kubernetes oferece uma maneira de implantar em namespaces diferentes. Isso nos permite particionar nossas implantações para que possamos ter ambientes inteiros dedicados a testes versus produção. E como todos eles são executados no mesmo cluster e usam os mesmos contêineres, a experiência de teste deve oferecer o que esperamos ver na produção.
Amita: Vai ser difícil acompanhar qual é o ambiente?
Mara: Não, podemos usar ambientes de DevOps do Azure para fazer tudo isso. Você poderá descobrir onde cada serviço está e como ele chegou lá usando o portal. É tudo automatizado através do pipeline, então não haverá nada que tenhamos que acompanhar manualmente. A única preocupação que tenho agora é o impacto que terá na nossa experiência de desenvolvimento para construir isso.
Andy: A boa notícia é que o impacto é mínimo. Supondo que tenhamos nossos projetos configurados para construir contêineres do Docker, tudo o que precisamos implantar no Kubernetes são alguns arquivos de manifesto que descrevem os serviços e suas implantações.
Mara: Já pensou no que vamos refatorar como segundo contêiner? Sei que houve várias equipas a pedir-nos para disponibilizar a nossa tabela de classificação através de uma API web.
Andy: Estou um passo à frente de você. Eu bifurquei o projeto Docker ontem à noite e refatorei a funcionalidade de dados da tabela de classificação em seu próprio microsserviço. Isso nos deixa com um contêiner para o site e outro para uma API de tabela de classificação. Ambos os contêineres são configurados para ter seus próprios pontos de extremidade públicos que podemos compartilhar com qualquer pessoa que queira usar o site ou a API, independentemente da pilha de tecnologia usada pelo aplicativo. Se a carga crescer substancialmente para qualquer um deles, podemos escalar seus contêineres de forma independente.
Mara: Este projeto soa incrível! Vamos começar a atualizar o pipeline de lançamento.
O que é o Kubernetes?
O Kubernetes é uma plataforma de orquestração de contêineres de código aberto que automatiza a implantação, o dimensionamento e o gerenciamento de aplicativos em contêineres. Ele fornece uma estrutura para executar sistemas distribuídos de forma declarativa e responsiva e pode executar contêineres em vários hosts, fornecendo uso eficiente de recursos e maior confiabilidade.
A equipe do Tailspin selecionou o Kubernetes para este cenário porque ele atendia a todas as suas necessidades:
Complexidade das implantações de vários contêineres: o Kubernetes foi projetado, em primeiro lugar, para automatizar os processos de implantação e manutenção de implantações de contêineres.
Consistência entre ambientes e estágios: assim como os contêineres garantem uma implantação consistente para os aplicativos que contêm, o Kubernetes garante uma implantação consistente para os contêineres gerenciados por um cluster.
Suporte ao Azure DevOps: o Azure DevOps oferece suporte de primeira classe para trabalhar com o Kubernetes.
Facilidade de desenvolvimento: o impacto do Kubernetes em um projeto de origem é comparável ao da adição do suporte ao Docker, que é mínimo e limitado à configuração declarativa.
A adoção do Kubernetes simplifica drasticamente o processo de adoção de uma arquitetura de microsserviços que faz uso de vários contêineres do Docker.