Este repositório atua como a única fonte da verdade para o estado desejado da nossa aplicação no cluster Kubernetes. Ele contém todos os manifestos declarativos necessários para a implantação e é gerenciado através de um fluxo de trabalho GitOps.
Este projeto faz parte de uma arquitetura de CI/CD de dois repositórios, projetada para separar o código da aplicação da configuração da infraestrutura:
-
Repositório da Aplicação (
pythonCI-CD): Contém o código-fonte da aplicação FastAPI e o pipeline de CI (Integração Contínua) que testa o código e constrói as imagens Docker. -
Repositório de Manifestos (
manifestsCI-PythonAPI- este repositório): Contém a configuração de implantação do Kubernetes. É monitorado por nossa ferramenta de CD (Entrega Contínua), o ArgoCD.
Qualquer alteração no estado da aplicação em produção deve ser feita através de um commit neste repositório.
-
deployment.yaml: Define oDeploymentdo Kubernetes. Este recurso gerencia os Pods da nossa aplicação, especificando qual imagem Docker deve ser executada, o número de réplicas e a estratégia de atualização. A tag da imagem neste arquivo é atualizada automaticamente pelo nosso pipeline de CI. -
service.yaml: Define oServicedo Kubernetes. Este recurso expõe nossa aplicação como um serviço de rede, permitindo que ela seja acessada por outras aplicações dentro do cluster ou externamente.
O processo de implantação é totalmente automatizado e centrado neste repositório:
-
Início no Repositório da Aplicação: Um desenvolvedor finaliza uma nova versão da aplicação e cria uma tag Git (ex:
v0.1.0) no repositóriopythonCI-CD. -
Pipeline de CI é Acionado: A criação da tag aciona um workflow do GitHub Actions que: a. Executa os testes automatizados. b. Se os testes passarem, constrói uma nova imagem Docker e a publica no Docker Hub com a tag
v0.1.0. -
Abertura de Pull Request: O workflow, então, clona este repositório (
manifestsCI-PythonAPI), atualiza a tag daimageno arquivodeployment.yamlpara a nova versão (v0.1.0) e abre um Pull Request com essa alteração. -
Revisão e Aprovação (Controle Humano): A equipe de DevOps ou o líder técnico revisa o Pull Request. Este é o ponto de controle de governança, onde a implantação para o ambiente é formalmente aprovada.
-
Merge e Sincronização do ArgoCD: a. Uma vez que o Pull Request é mesclado (merged) na branch
main, o ArgoCD, que está constantemente monitorando este repositório, detecta a alteração. b. Como a política de sincronização está configurada paraAutomated, o ArgoCD inicia imediatamente o processo de sincronização. -
Implantação no Kubernetes: O ArgoCD aplica o novo manifesto ao cluster Kubernetes, que por sua vez realiza um rolling update, substituindo os Pods antigos pelos novos com a imagem atualizada, sem downtime.
Para implantar uma nova versão, simplesmente revise e aprove o Pull Request gerado automaticamente pelo pipeline de CI. O merge na branch main é a ação que efetivamente aprova a implantação.
Uma das grandes vantagens do GitOps é a facilidade de rollback. Para reverter para uma versão anterior:
- Navegue até o histórico de commits da branch
maindeste repositório. - Use o comando
git revertpara reverter o commit de merge que introduziu a versão com problemas. - Faça o
pushda reversão para a branchmain.
O ArgoCD detectará que o estado do repositório mudou para uma versão anterior e automaticamente fará o rollback da aplicação no cluster para corresponder ao estado revertido.
O ArgoCD deve ser configurado para monitorar este repositório com as seguintes configurações:
- Repository URL:
https://github.com/raian2209/manifestsCI-PythonAPI.git - Revision:
HEAD - Path:
. - Destination Cluster:
https://kubernetes.default.svc - Namespace:
aplication( o namespace de destino da aplicação tentando separar serviços pelos namespaces) - Sync Policy:
Automated- Prune Resources:
true(para remover recursos que não existem mais no Git) - Self Heal:
true(para corrigir desvios de configuração manuais no cluster)
- Prune Resources: