Soluções de DevTest e DevOps para microsserviços

Boards
Registro de Contêiner
Serviço de Kubernetes
Pipelines
GitHub

Ideia da solução

Se você quiser nos ver, expanda este artigo com mais informações, detalhes de implementação, diretrizes de preços ou exemplos de código, fale conosco com os comentários do GitHub!

As arquiteturas de microserviço criam aplicativos como coleções de serviços livremente acoplados. Em uma arquitetura de microserviços, os serviços são refinados e os protocolos são leves. Os microserviços oferecem benefícios como a separação clara de preocupações e o desacoplamento de dependências.

Os microserviços introduzem complexidades no ciclo de desenvolvimento em comparação com os aplicativos monolíticos tradicionais. Tradicionalmente, o desenvolvimento ocorre em uma réplica local ou virtual da pilha de aplicativos, que configura e executa componentes de computação e armazenamento localmente em isolamento. Em um modelo de microserviço, os desenvolvedores precisam testar seus serviços em relação à arquitetura existente, detectar problemas de integração cedo para economizar no tempo de compilação e implantação e manter as compilações integradas limpas ao longo do ciclo de vida do aplicativo.

O teste de desenvolvimento (DevTest) é uma abordagem de desenvolvimento de software que integra testes antecipadamente na fase de desenvolvimento para agilizar o desenvolvimento. DevOps é um conjunto de práticas que combina o desenvolvimento de software e as operações de ti para reduzir o ciclo de desenvolvimento e fornecer entrega contínua de alta qualidade. Kubernetes é um sistema de orquestração de contêiner de software livre para automatizar implantações de aplicativo.

Essa arquitetura de solução modela um ambiente de desenvolvimento e implantação que usa DevOps em DevTest para um desenvolvimento iterativo rápido de um aplicativo de microatendimento do AKs (serviço kubernetes do Azure) .

Arquitetura

Diagrama mostrando a configuração de DevTest e DevOps para um aplicativo de microatendimento.

  1. Os desenvolvedores usam o processo local com o kubernetes para executar suas versões de microatendimento locais no contexto do cluster de desenvolvimento kubernetes. Conectar-se ao cluster durante a depuração do serviço permite testes e desenvolvimento rápidos no contexto completo do aplicativo.

  2. Cada codebase de microserviço usa um repositório de código do GitHub separado para o controle do código-fonte.

  3. GitHub Actions cria as imagens de contêiner de microsserviço e as esmo para os Registros de Contêiner do Azure. GitHub Actions também atualiza a marca mais recente de repositórios para CI (integração contínua) ou repositórios de marcas para lançamento.

  4. GitHub Actions teste automatizado gera itens de trabalho para Azure Boards ,tornando todos os itens de trabalho gerenciáveis em um só lugar.

  5. Visual Studio Code extensões de suporte Azure Boards e integração do GitHub. Associar Azure Boards itens de trabalho com repositórios do GitHub vincula requisitos ao código, impulsionando o loop de desenvolvimento.

  6. Confirmações mescladas no gatilho do branch de integração GitHub Actions builds e o Docker e push para os registros de contêiner de DevTest. Cada microsserviço tem seu próprio repositório em Registros de Contêiner, paralelização dos repositórios do GitHub. Os builds de CI geralmente são marcados com o mais recente, representando os builds de microsserviço mais recentes bem-sucedidos.

  7. Azure Pipelines executa o comando Kubernetes para disparar a implantação das imagens atualizadas do Registro de Contêiner nos apply clusters do Kubernetes do DevTest. O Azure pode autenticar o AKS para executar pulls autônomos do Registro de Contêiner, simplificando o processo de CD (implantação contínua).

    Azure Pipelines usa Azure Key Vault para consumir com segurança segredos como credenciais e cadeias de conexão necessárias para configurações de lançamento e implantação.

  8. Quando uma versão do aplicativo está pronta para teste de garantia de qualidade (QA), o Azure Pipelines dispara uma versão de garantia de qualidade. O pipeline marca todas as imagens apropriadas com a próxima versão incremental, atualiza o manifesto do Kubernetes para refletir as marcas de imagem e executa o apply comando . Neste exemplo, embora um desenvolvedor possa estar iterando em um serviço isoladamente, somente os builds integrados por meio de CI/CD são movidos para a implantação.

  9. Depois que o teste tiver aprovado uma versão do serviço para implantação, o GitHub Actions promoverá uma versão do Registro de Contêiner de DevTest para um Registro de Contêiner de Produção. As ações do GitHub marcam as imagens com a versão apropriada e as enviam para o registro de contêiner de produção, seguindo as práticas recomendadas do registro de contêiner.

  10. Azure Pipelines cria uma versão para produção. O pipeline impõe transformações de aprovação e condições de pré-teste e pós-estágio para proteger o ambiente de produção de uma implantação inadvertida ou incorreta.

O aplicativo usa Azure Cosmos DB para sua camada de banco de dados distribuída globalmente.

Todos os serviços e ambientes relatam métricas para Azure monitor.

Nesta solução, um único Azure Active Directory (Azure AD) gerencia a identidade para as assinaturas de DevTest e de produção. O Azure RBAC (controle de acesso baseado em função) restringe o acesso a recursos protegidos, impedindo a modificação não autorizada ou inadvertida de recursos de produção. Os desenvolvedores não têm os mesmos níveis de controle de acesso em produção que em suas áreas restritas do DevTest.

Componentes

  • O Azure DevTest Labs fornece laboratórios que têm todas as ferramentas e software necessários para criar ambientes. Os desenvolvedores podem gerenciar recursos de forma eficiente sem esperar por aprovações. Com o DevTest Labs, as equipes podem controlar os custos e regulamentar os recursos por laboratório, concedendo permissão e flexibilidade aos desenvolvedores para operar suas áreas restritas dentro das restrições de custo.

  • O GitHub é uma plataforma de Hospedagem de código para controle de versão e colaboração. Um repositório de controle de origem do GitHub contém todos os arquivos de projeto e seu histórico de revisão. Os desenvolvedores podem trabalhar juntos para contribuir, discutir e gerenciar código no repositório.

  • As ações do GitHub fornecem um conjunto de fluxos de trabalho de Build e versão, cobrindo CI, testes automatizados e implantações de contêiner.

  • Azure boards é um serviço para gerenciar o trabalho para projetos de software. Azure Boards traz um rico conjunto de recursos, incluindo suporte nativo para as metodologias de Scrum e Kanban, painéis personalizáveis e relatórios integrados.

  • Azure Pipelines é um serviço de CI/CD totalmente em destaque que pode implantar automaticamente imagens atualizadas do Registro de Contêiner em clusters do Kubernetes.

  • Azure Key Vault armazena e controla com segurança o acesso a segredos como chaves de API, senhas e certificados. Para obter mais informações sobre Key Vault em cenários de DevOps, consulte DevSecOps no Azure e DevSecOps no GitHub.

  • Registro de Contêiner do Azure dá suporte à criação, armazenamento e gerenciamento de imagens de contêiner e artefatos em registros privados para todos os tipos de implantações de contêiner.

  • Serviço de Kubernetes do Azure torna simples implantar clusters do Kubernetes gerenciados descarregando grande parte da complexidade, da responsabilidade e da sobrecarga operacional para o Azure.

  • Azure Active Directory de identidade corporativa do Azure AD (Azure) fornece autenticação multifator e de login único para reger o acesso do usuário. Um único Azure AD pode gerenciar a identidade de todos os ambientes entre assinaturas. O RBAC do Azure (controle de acesso baseado em função do Azure) restringe o acesso a recursos protegidos, impedindo a modificação não autorizada ou inadvertida de recursos de produção.

  • Azure Cosmos DB é um banco de dados como serviço totalmente gerenciado e amplamente distribuído que dá suporte a aplicativos de várias regiões e alta disponibilidade e APIs SQL e NoSQL. Azure Cosmos DB inclui recursos de DevTest, como um emulador de Cosmos DB local que se integra ao Azure DevOps e camadas de baixo custo para gerenciar custos em áreas de áreas baixas do DevTest.

  • Azure Monitor pode monitorar os ambientes de Produção e DevTest. Azure Monitor coleta dados de log de sistemas operacionais de VM e arquivos de despejo de falha e os agrega para exibição no Central de Segurança do Azure.

Alternativas

  • Azure Repos é uma alternativa à hospedagem do repositório GitHub para Git. Com Azure Repos, Azure Boards e Azure Pipelines, todos os Azure DevOps Services usam o mesmo portal e interface do usuário, consolidando os serviços que os desenvolvedores precisam para atividades de DevOps.

  • Algumas integrações disponíveis em Azure Pipelines, como conexão de serviço ou autenticação diretamente no backbone do Azure, não existem atualmente em ações do GitHub. Para essas necessidades, considere o uso de Azure Pipelines em vez de ações do GitHub para atividades de CI e compilação.

  • Em um sistema amplamente distribuído, há benefícios para separar os microserviços em repositórios individuais. A separação de propriedade e a permissão é mais simples, e os projetos em diferentes idiomas são mais fáceis de manter do que com um único repositório. No entanto, em soluções com menos microserviços no mesmo idioma ou tempo de execução, a manutenção de um único repositório Git para o projeto pode ser mais fácil.

Próximas etapas