Este artigo mostra como conceituar, arquitetar, criar e implantar um aplicativo que usa projetos da Cloud Native Computing Foundation (CNCF) depois de implantar o Serviço Kubernetes do Azure (AKS). A arquitetura descreve o aplicativo CNCF Projects no GitHub. As instruções de configuração no repositório fornecem etapas para implantar a arquitetura.
Arquitetura
Transfira um ficheiro do Visio desta arquitetura.
A carga de trabalho é um aplicativo Web simples que os funcionários podem usar para enviar e exibir relatórios de despesas. Quando um funcionário envia um relatório de despesas, o gerente do funcionário recebe um e-mail.
Fluxo de Trabalho
Fluxo de aplicativos
1. O funcionário acessa um aplicativo web via NGINX Ingress para enviar despesas.
2. O aplicativo Web chama um aplicativo de API para recuperar o gerente do funcionário.
3. O aplicativo Web envia uma mensagem gerada para a criação do relatório de despesas para um corretor Knative.
4. O relatório de despesas é salvo no MySQL.
5. O Knative aciona a função Email Dispatcher com a mensagem de despesa como carga útil.
6. O Email Dispatcher cria uma mensagem SendGrid.
7. O SendGrid envia um e-mail para o gerente recuperado para revisão.
Fluxo de DevOps
a. Os desenvolvedores escrevem ou atualizam o código no Visual Studio Code.
b. Os desenvolvedores enviam o código para o GitHub de seu espaço de trabalho local no Visual Studio Code.
c. O GitHub Webhook aciona pipelines Tekton que clonam o código do GitHub.
d. Os pipelines constroem e enviam as imagens do contêiner para um registro do Harbor.
e. A Tekton implanta o aplicativo Web, o aplicativo API e os aplicativos Email Dispatcher.
f. O Prometheus captura métricas de aplicativos.
g. Os engenheiros monitoram as métricas em um painel do Grafana.
h. Os engenheiros de DevOps monitoram o Grafana Dashboard.
Infraestrutura
i. Cluster AKS baseado na infraestrutura apresentada na linha de base AKS.
ii. Rook Ceph usado para armazenamento de cluster.
iii. Malha de serviço Linkerd.
iv. Jaeger para rastreamento geral de aplicativos no cluster Kubernetes.
Operações de cluster
Você pode achar benéfico gerenciar clusters e inicialização de cluster usando o gerenciamento de GitOps. Flux é um operador GitOps popular. Geralmente é emparelhado com as Ações do GitHub para permitir a validação em manifestos atualizados e gráficos de leme.
Componentes
Azure
- Serviço Kubernetes do Azure (AKS). Fornece a infraestrutura de cluster gerenciada.
Software de código aberto
- Kubernetes. CNCF. Automatiza a implantação, o dimensionamento e o gerenciamento de aplicativos em contêineres.
- Fluxo. CNCF. Provedor de GitOps para entrega de infraestrutura.
- Torre. CNCF. Fornece gerenciamento de armazenamento para os clusters.
- Porto. CNCF. Registro de contêiner para as imagens.
- Linkerd. CNCF. Malha de serviço que se integra com OpenFaaS, NGINX, Prometheus e Jaeger.
- Prometeu. CNCF. Captura métricas de aplicativos.
- Jaeger. CNCF. Fornece acompanhamento geral de aplicativos no cluster do Kubernetes.
- Faca. CNCF. Usado para criar aplicativos sem servidor e orientados a eventos. Implanta a função Email Dispatcher.
- MySQL. Banco de dados que armazena os relatórios de despesas.
- NGINX. Controlador de entrada do Kubernetes que os funcionários usam para acessar o aplicativo Web para enviar relatórios de despesas.
- Tekton. Projeto Continuous Delivery Foundation que é usado para integração contínua / implantação contínua (CI/CD). Implanta o aplicativo Web, o aplicativo API e os aplicativos Email Dispatcher.
- Grafana. Painel para métricas de aplicativos.
- SendGrid. Serviço de email externo que envia e-mail ao gerente para revisão do relatório de despesas.
- GitHub. Repositório de código. Os pipelines Tekton usam o código GitHub.
- .NET Core. Usado para o front-end da Web e a API da Web.
- Fluxo. Fornece gerenciamento de GitOps.
Alternativas
Este projeto utiliza projetos graduados e incubados pelo CNCF. Poderão existir múltiplas alternativas para os serviços utilizados. Consulte o site do CNCF para alternativas. Aqui estão alguns recursos que descrevem alguns deles:
- Comparação das opções de malha de serviço
- Funcionar como um serviço (sem servidor) alternativas
- Vitess: MySQL fragmentado no Kubernetes
- Monitorando seus microsserviços usando Zipkin e OpenTracing
- GitOps com uma experiência centrada no desenvolvedor
Você pode considerar vários serviços do Azure como alternativas. Por exemplo, Roteamento de Aplicativo Web, Registro de Contêiner do Azure, Armazenamento de Contêiner do Azure, Azure Monitor, Serviço gerenciado do Azure Monitor para Prometheus, Azure Managed Grafana.
A Microsoft também suporta projetos de software de código aberto como Addons Gerenciados/Projetos Derivados no AKS, incluindo NGINX, Istio, Prometheus, Grafana e OpenEBS.
Detalhes do cenário
Você pode implantar essa arquitetura em qualquer cluster Kubernetes, não apenas no AKS. Ele fornece um exemplo da flexibilidade da plataforma AKS. O AKS simplifica a implantação de um cluster Kubernetes gerenciado no Azure.
Depois de revisar este artigo, você terá uma boa compreensão de como implantar um aplicativo típico que é composto principalmente de projetos CNCF.
Potenciais casos de utilização
Estes outros casos de utilização têm padrões de design semelhantes:
- Criando um pipeline de CI/CD para cargas de trabalho baseadas em contêiner
- Usando GitOps para AKS
Considerações
Essas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios orientadores que podem ser usados para melhorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Microsoft Azure Well-Architected Framework.
- Para o cluster Kubernetes, você precisa de pelo menos um pool de nós de usuário de 3 nós com SKU de máquina virtual (VM) DS2_v2 ou maior.
- Os volumes que usam discos gerenciados do Azure não podem ser anexados entre zonas. Devem estar localizados na mesma zona.
- A instalação do Rook pode demorar entre 20 e 25 minutos. Certifique-se de que o cluster Ceph está completamente provisionado antes de passar para a próxima etapa.
- A configuração do Jaeger leva cerca de 5 minutos.
- Demora cerca de 12 minutos para que o Linkerd apareça no painel.
Otimização de custos
A otimização de custos consiste em procurar formas de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Visão geral do pilar de otimização de custos.
Você pode usar a calculadora de preços do Azure para estimar custos. A seguir estão algumas considerações de preços para executar este projeto no Azure. Aplica-se um custo de largura de banda insignificante.
Conjuntos de Dimensionamento de Máquinas Virtuais
As VMs usadas nos Conjuntos de Escala de Máquina Virtual do Azure para o cluster AKS incorrem em uma cobrança. Para obter mais informações, consulte Preços de conjuntos de dimensionamento de máquina virtual.
Armazenamento
Os custos de armazenamento aplicam-se a cada disco de dados exigido pela instalação do Rook. Para este cluster AKS de 3 nós, a configuração Rook usa dois discos de dados por nó: um disco de 1 GB e um disco de 200 GB. Para obter mais informações, consulte Preço de custo de armazenamento.
Balanceador de carga
O balanceador de carga associado a esse cluster AKS incorre em uma cobrança. Para obter mais informações, consulte Preços do balanceador de carga.
Rede virtual
A rede virtual usada pelo cluster AKS incorre em uma cobrança. Para obter mais informações, consulte Preços de rede virtual.
Implementar este cenário
Implante esse cenário a partir do repositório GitHub do Azure/cloud-native-app . Siga as instruções de configuração na sequência fornecida para implantar o aplicativo CNCF Projects em seu ambiente.
Este repo é um projeto comunitário. Aceita e aprova pull requests (PRs) para melhorias e modificações da comunidade.