Orquestrar microsserviços e aplicativos de vários contêineres para alta escalabilidade e disponibilidade
Dica
Esse conteúdo é um trecho do eBook da Arquitetura de Microsserviços do .NET para os Aplicativos .NET em Contêineres, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
O uso de orquestradores em aplicativos prontos para produção é essencial se o aplicativo for baseado em microsserviços ou simplesmente dividido em vários contêineres. Conforme apresentado anteriormente, em uma abordagem baseada em microsserviço, cada microsserviço tem seu próprio modelo e dados para que seja autônomo de um ponto de vista de desenvolvimento e implantação. No entanto, se o aplicativo for mais tradicional, composto por diversos serviços (como o SOA), também haverá vários contêineres ou serviços que abrangem um único aplicativo de negócios e precisam ser implantados como um sistema distribuído. Esses tipos de sistemas são difíceis de escalar horizontalmente e gerenciar; portanto, um orquestrador é absolutamente necessário para ter um aplicativo pronto para produção, escalonável e com vários contêineres.
A Figura 4-23 ilustra a implantação de um aplicativo composto por vários microsserviços (contêineres) em um cluster.
Figura 4-23. Um cluster de contêineres
você pode usar um contêiner para cada instância de serviço. Os contêineres do Docker são "unidades de implantação", e um contêiner é uma instância de uma imagem do Docker. Um host lida com muitos contêineres. Parece ser uma abordagem lógica. Mas como você lida com o balanceamento de carga, roteamento e orquestração desses aplicativos compostos?
O Docker Engine simples em hosts individuais do Docker atende às necessidades de gerenciamento de instâncias de imagem única em um host, mas fica aquém quando se trata de gerenciar vários contêineres implantados em diversos hosts de aplicativos distribuídos mais complexos. Na maioria dos casos, é necessária uma plataforma de gerenciamento que inicie os contêineres automaticamente, escale horizontalmente os que têm várias instâncias por imagem, suspenda-os ou desligue-os quando preciso e também controlem como eles acessam recursos, como a rede e o armazenamento de dados.
Para ir além do gerenciamento de contêineres individuais ou aplicativos compostos simples e em direção a aplicativos empresariais com microsserviços, é necessário adotar a orquestração e as plataformas de clustering.
De uma perspectiva de arquitetura e desenvolvimento, ao criar aplicativos empresariais grandes, compostos e baseados em microsserviços, é importante entender as seguintes plataformas e produtos que dão suporte a cenários avançados:
Clusters e orquestradores. Quando é preciso expandir os aplicativos em vários hosts do Docker, como um aplicativo grande baseado em microsserviço, é essencial ter a capacidade de gerenciar todos esses hosts como um cluster único, abstraindo a complexidade da plataforma subjacente. É isso que os clusters e orquestradores de contêineres fazem. O Kubernetes é um exemplo de orquestrador e está disponível no Azure por meio do Serviço de Kubernetes do Azure.
Agendadores. Agendamento é a capacidade do administrador de iniciar contêineres em um cluster para que eles também forneçam uma interface do usuário. O agendador do cluster tem diversas responsabilidades: usar os recursos de cluster de forma eficiente, definir as restrições fornecidas pelo usuário, balancear a carga dos contêineres em nós ou hosts de maneira eficaz, ser robusto contra erros e, ao mesmo tempo, oferecer alta disponibilidade.
Os conceitos de "cluster" e "agendador" estão intimamente relacionados, então os produtos oferecidos por diferentes fornecedores geralmente têm as duas capacidades. A lista a seguir mostra a plataforma mais importante e opções de software para clusters e agendadores. Geralmente, esses orquestradores são oferecidos em nuvens públicas como o Azure.
Plataformas de software para clustering, orquestração e agendamento de contêineres
Plataforma | Descrição |
---|---|
Kubernetes |
O Kubernetes é um produto de software livre que oferece funcionalidades que variam da infraestrutura do cluster e do agendamento de contêiner a capacidades de orquestração. Com ele, é possível automatizar a implantação, o escalonamento e as operações de contêineres de aplicativo em clusters de hosts. O Kubernetes oferece uma infraestrutura centrada no contêiner que agrupa contêineres de aplicativo em unidades lógicas para facilitar o gerenciamento e a descoberta. O Kubernetes é maduro no Linux e menos maduro no Windows. |
AKS (Serviço de Kubernetes do Azure) |
O AKs é um serviço de orquestração de contêiner do Kubernetes gerenciado no Azure que simplifica o gerenciamento, a implantação e as operações de cluster do Kubernetes. |
Aplicativos de Contêiner do Azure |
Os Aplicativos de Contêiner do Azure são um serviço de contêiner gerenciado sem servidor para criar e implantar aplicativos modernos em escala. |
Usar orquestradores baseados em contêiner no Microsoft Azure
Diversos provedores de nuvem oferecem suporte a contêineres do Docker e seus clusters e orquestração, como o Microsoft Azure, o Amazon EC2 Container Service e o Google Container Engine. O Microsoft Azure fornece suporte ao orquestrador e ao cluster do Docker por meio do AKS (Serviço de Kubernetes do Azure).
Usando o Serviço de Kubernetes do Azure
Um cluster do Kubernetes cria um pool de diversos hosts do Docker e os expõe como um host virtual único. Assim, é possível implantar vários contêineres no cluster e expandir com qualquer número de instâncias de contêiner. O cluster lidará com todos os detalhes complexos de gerenciamento, como escalabilidade, integridade e assim por diante.
O AKS é uma maneira de simplificar a criação, configuração e gerenciamento de um cluster de máquinas virtuais no Azure pré-configuradas para executar aplicativos em contêineres. Ao utilizar uma configuração otimizada de ferramentas de software livre conhecidas de agendamento e orquestração, o AKS permite o uso de habilidades existentes ou recorre ao grande e crescente conhecimento da comunidade para implantar e gerenciar aplicativos baseados em contêiner no Microsoft Azure.
O Serviço de Kubernetes do Azure otimiza a configuração de ferramentas de software livre e tecnologias conhecidas do Docker especificamente para o Azure. É uma solução aberta que oferece portabilidade para contêineres e configuração de aplicativo. Selecione o tamanho, a quantidade de hosts e as ferramentas de orquestrador e deixe o AKS cuidar de todo o resto.
Figura 4-24. Topologia e estrutura simplificadas do cluster Kubernetes
Na figura 4-24, veja a estrutura de um cluster do Kubernetes em que um nó mestre (VM) controla a maior parte da coordenação do cluster e você pode implantar contêineres no restante dos nós, que são gerenciados como um só pool do ponto de vista do aplicativo, permitindo o dimensionamento para milhares ou até mesmo dezenas de milhares de contêineres.
Ambiente de desenvolvimento para Kubernetes
No ambiente de desenvolvimento, o Docker anunciou em julho de 2018 que o Kubernetes também pode ser executado em um só computador de desenvolvimento (Windows 10 ou macOS) por meio da simples instalação do Docker Desktop. Posteriormente, você pode implantar para a nuvem (AKS) para testes de integração posteriores, conforme mostrado na figura 4-25.
Figura 4-25. Executando Kubernetes no computador de desenvolvimento e na nuvem
Introdução ao AKS (Serviço de Kubernetes do Azure)
Para começar a usar o AKS, implante um cluster do AKS do portal do Azure ou usando a CLI. Para saber mais sobre como implantar um cluster do Kubernetes no Azure, veja Implantar um cluster do AKS (Serviço de Kubernetes do Azure).
Nenhum valor é cobrado pelos softwares instalados por padrão como parte do AKS. Todas as opções padrão são implementadas com software livre. O AKS está disponível para várias máquinas virtuais no Azure. Você é cobrado apenas pelas instâncias de computação que escolhe e pelos outros recursos de infraestrutura subjacente consumidos, como armazenamento e rede. Não há cobranças adicionais pelo AKS.
A opção de implantação de produção padrão do Kubernetes é usar gráficos do Helm, que serão apresentados na próxima seção.
Implantar com gráficos do Helm em clusters Kubernetes
Ao implantar um aplicativo em um cluster Kubernetes, você pode usar a ferramenta de CLI kubectl.exe original usando arquivos de implantação com base no formato nativo (arquivos .yaml), conforme já mencionado na seção anterior. No entanto, para aplicativos mais complexos do Kubernetes, como ao implantar aplicativos complexos baseados em microsserviços, é recomendável usar o Helm.
Os Gráficos do Helm ajudam você a definir, realizar controle de versão, instalar, compartilhar, atualizar ou reverter até mesmo o aplicativo mais complexo do Kubernetes.
Avançando um pouco, o uso do Helm também é recomendado porque outros ambientes do Kubernetes no Azure, como o Azure Dev Spaces, também são baseados em gráficos do Helm.
O Helm é mantido pelo CNCF (Cloud Native Computing Foundation), em colaboração com a Microsoft, a Google, a Bitnami e a comunidade de colaboradores do Helm.
Para obter mais informações de implementação sobre gráficos do Helm e o Kubernetes, confira a postagem Como usar gráficos do Helm para implantar eShopOnContainers no AKS.
Recursos adicionais
Introdução ao AKS (Serviço de Kubernetes do Azure)
https://learn.microsoft.com/azure/aks/kubernetes-walkthrough-portalAzure Dev Spaces
https://learn.microsoft.com/azure/dev-spaces/azure-dev-spacesKubernetes O site oficial.
https://kubernetes.io/