Pular para o conteúdo principal

Um guia simples para o GitOps

Saiba mais sobre o GitOps, sua importância, várias abordagens e como integrá-lo a um projeto de IA.
Actualizado 21 de jan. de 2025  · 10 min de leitura

Você provavelmente já ouviu falar de DevOps (Developer Operations), que automatiza os processos de implantação de aplicativos. Se você é um profissional de dados, provavelmente conhece o MLOps (Machine Learning Operations), que simplifica a implantação de modelos. Mas e quanto ao GitOps?

Neste blog, exploraremos o GitOps, por que ele é importante, os diferentes modelos de GitOps e, por fim, como integrar o GitOps em um grande projeto de modelo de linguagem. 

Um guia simples para o GitOps Imagem em destaque

Imagem do autor

Você também pode aprender a teoria por trás dos conceitos de DevOps e MLOps fazendo dois de nossos melhores cursos rápidos, Conceitos de DevOps e Conceitos de MLOps.

O que é GitOps?

O GitOps é uma estrutura operacional que estende os princípios do DevOps à automação da infraestrutura. Ele enfatiza as principais lições do DevOps, como controle de versão, colaboração e conformidade, CI/CDe observabilidade, e as aplica ao provisionamento e ao gerenciamento da infraestrutura, especialmente em ambientes modernos de nuvem.

Em sua essência, o GitOps automatiza o gerenciamento da infraestrutura tratando as configurações como código, geralmente chamado de Infraestrutura como Código (IaC). Assim como as equipes de desenvolvimento usam o código-fonte para criar binários de aplicativos de forma consistente, as equipes de operações usam arquivos de configuração armazenados em repositórios do Git para garantir que o mesmo ambiente de infraestrutura seja implantado todas as vezes. Essa abordagem garante consistência, confiabilidade e repetibilidade.

Componentes principais de um fluxo de trabalho do GitOps:

  1. Repositório Git: Armazena o código-fonte do aplicativo e os arquivos de configuração da infraestrutura.
  2. Pipeline de entrega contínua (CD): Automatiza a criação, o teste e a implementação das alterações no aplicativo e na infraestrutura.
  3. Ferramenta de implantação de aplicativos: Garante que os aplicativos sejam implementados de forma correta e eficiente com base nas configurações do repositório Git.
  4. Sistema de monitoramento: Rastreia o desempenho e a integridade dos aplicativos para manter a confiabilidade do sistema.

Por que usar o GitOps?

Tradicionalmente, o gerenciamento da infraestrutura tem sido manual, mas a nuvem moderna exige automação para lidar com a velocidade e a escala dos aplicativos nativos da nuvem. Com o GitOps, a infraestrutura se torna elástica e confiável, permitindo que as equipes implementem mudanças de forma rápida e consistente. Ele elimina erros manuais, aumenta a eficiência e garante que a infraestrutura e os aplicativos estejam sempre sincronizados, dando suporte às necessidades de ritmo acelerado dos fluxos de trabalho de desenvolvimento modernos.

Principais benefícios do GitOps:

  1. Controle de versão: Todas as alterações na infraestrutura e nos aplicativos são controladas por versão no Git, o que permite reversões fáceis e trilhas de auditoria abrangentes.
  2. Colaboração aprimorada: As equipes podem colaborar com mais eficiência usando fluxos de trabalho familiares do Git, como solicitações pull.
  3. Maior confiabilidade: As configurações declarativas garantem que o estado desejado do sistema possa ser restaurado automaticamente em caso de falha.
  4. Automação: Ele minimiza a necessidade de intervenção manual, reduzindo assim o risco de erro humano.
  5. Segurança: O histórico de commits do Git fornece um registro imutável, aumentando a segurança e a rastreabilidade.

Modelo GitOps baseado em Pull vs. Push

Na abordagem GitOps, há dois modelos principais para implantar e gerenciar configurações de infraestrutura e aplicativos: baseado em pull e baseado em push. Esses modelos diferem na forma como lidam com as alterações de configuração e as aplicam ao ambiente de destino.

Modelo baseado em pull (GitOps típico)

A abordagem baseada em pull depende do armazenamento do estado desejado do sistema em um repositório Git. Um operador GitOps, como o Flux ou o Argo CD, monitora continuamente o repositório em busca de alterações. Quando são detectadas atualizações, o operador extrai automaticamente a configuração atualizada e a aplica ao ambiente de destino. 

O modelo baseado em pull também oferece detecção de desvios e autocorreção, pois o cluster "puxa" continuamente o estado desejado do Git. Isso garante que quaisquer alterações não intencionais ou desvios de configuração no ambiente sejam corrigidos automaticamente, mantendo a consistência e a estabilidade

Modelo baseado em push (usando ferramentas de CI/CD)

A abordagem baseada em push depende de ferramentas como o GitHub Actions ou outros serviços de CI/CD para enviar atualizações para o cluster sempre que as alterações forem confirmadas. Ao contrário do modelo baseado em pull, a abordagem baseada em push não tem reconciliação contínua, o que significa que não há detecção de desvios incorporada ou reversão automatizada. Isso o torna menos resistente a mudanças não intencionais no ambiente. No entanto, o modelo baseado em push costuma ser mais simples de implementar e oferece controle granular sobre as implementações.

Integração do GitOps ao projeto LLM 

Vamos nos concentrar em uma abordagem de GitOps baseada em push usando GitHub Actionspor ser mais simples de configurar e exigir um mínimo de conhecimento prévio. Embora um sistema baseado em push possa não oferecer todas as vantagens de uma abordagem baseada em pull, ele ainda fornece recursos essenciais do GitOps, como configurações com controle de versão, implementações automatizadas e reversões simplificadas.

Nesta seção, aplicaremos os princípios do GitOps ao projeto do tutorial How to Deploy LLM Applications Using Docker: Um guia passo a passo. Este projeto inclui o código de um aplicativo Gradio, Dockerfile e requirements.txt. Ele demonstra como você pode implantar um aplicativo de IA na nuvem usando o Docker.

Como implantar aplicativos LLM usando o Docker: Um guia passo a passo

Fonte: Como implantar aplicativos LLM usando o Docker: Um guia passo a passo

Adote uma mentalidade de MLOps para treinar, documentar, manter e dimensionar com eficiência seus modelos de aprendizado de máquina inscrevendo-se no curso, Desenvolvendo modelos de aprendizado de máquina para produção com uma mentalidade de MLOps.

Estrutura do projeto

Este projeto GitOps foi desenvolvido para implantar aplicativos LLM (Large Language Model) usando o Docker, o Kubernetes e o GitHub Actions. O projeto organiza todos os arquivos do projeto LLM na pasta app, cria uma pasta infra para as configurações do Kubernetes e usa .github/workflows/ para automação de CI/CD com o GitHub Actions.

  • O Docker garante que o aplicativo seja executado de forma consistente em todos os ambientes, empacotando-o com todas as dependências.
  • O Kubernetes automatiza a implantação, o dimensionamento e o gerenciamento do aplicativo.
  • O GitHub Actions automatiza o teste, a criação e a implantação do aplicativo.

Faça o curso Introdução ao Kubernetes e aprenda os fundamentos do Kubernetes, além de implantar e orquestrar contêineres usando Manifestos e instruções do kubectl.

Essa estrutura garante implementações automatizadas, dimensionáveis e específicas do ambiente para o seu aplicativo LLM, seguindo os princípios modernos do GitOps.

Deploying-LLM-Applications-with-Docker/
├── app/
│   ├── requirements.txt      <-- Python dependencies for your LLM app
│   ├── main.py               <-- Your LLM application code
│   └── Dockerfile            <-- Docker instructions for building the app
├── infra/
│   ├── dev/                  <-- Dev environment configs (YAML or Helm)
│   ├── staging/              <-- Staging environment configs
│   └── production/           <-- Production environment configs
└── .github/
    └── workflows/
        ├── ci.yaml           <-- GitHub Actions workflow for continuous integration
        └── cd.yaml           <-- GitHub Actions workflow for continuous deployment

Aqui está um detalhamento simples:

  • app/: Contém o código do aplicativo (main.py), as dependências (requirements.txt) e um Dockerfile para criar o aplicativo em um contêiner.
  • infra/: Mantém as configurações do Kubernetes para diferentes ambientes:
    • pastas dev/, staging/ e production/ para configurações específicas do ambiente.
  • .github/workflows/: Automatiza a CI/CD com o GitHub Actions:
    • ci.yaml: Cria o aplicativo e a imagem do docker.
    • cd.yaml: Implanta o aplicativo enviando imagens do Docker e aplicando as configurações do Kubernetes.

Saiba a diferença entre o Kubernetes e o Docker lendo o artigo Kubernetes vs Docker para você.

Visão geral do fluxo de trabalho do GitHub Actions

Isso é o que acontece no fluxo de trabalho do GitHub Actions:

Developer commits code + config to GitHub
               |
               v
      GitHub Actions CI (ci.yaml)
       - Builds Docker image
       - (Optional) pushes Docker image
               |
               v
     GitHub Actions CD (cd.yaml)
       - Deploys updated app/config
       - kubectl apply or helm upgrade
               |
               v
      Kubernetes Cluster Updated
  1. O desenvolvedor confirma as alterações: As atualizações de código e configuração são enviadas para o GitHub.
  2. CI Pipeline (ci.yaml):
    • Cria a imagem do Docker.
    • Opcionalmente, envia a imagem para o registro do contêiner.
    • Execute testes para validar o aplicativo.
  3. CD Pipeline (cd.yaml):
    • Implanta o aplicativo ou a configuração atualizada.
    • Executa kubectl apply ou helm upgrade para atualizar os manifestos do Kubernetes.
  4. Cluster do Kubernetes atualizado: O cluster executa a nova versão do aplicativo.

Saiba como automatizar o treinamento, a avaliação, o controle de versão e a implantação de modelos usando o GitHub Actions e crie um arquivo seguindo as instruções abaixo Guia para iniciantes em CI/CD para aprendizado de máquina tutorial.

Principais vantagens e desvantagens de usar uma abordagem de GitOps baseada em push

Se você tiver experiência anterior com o GitHub Actions, a configuração de uma metodologia GitOps usando uma abordagem baseada em push pode ser simples. Tudo o que você precisa fazer é adicionar os arquivos de configuração da infraestrutura, configurar os pipelines de CI/CD e está pronto para começar. No entanto, embora essa abordagem seja simples, há várias compensações importantes a serem consideradas.

Vantagens

  • Simples: Você só precisa do GitHub Actions para implementar essa abordagem - não há necessidade de um operador GitOps adicional, como o Argo CD ou o Flux.
  • One-Stop-Shop: O GitHub Actions fornece uma plataforma única para você criar, testar e implantar seu aplicativo, simplificando todo o processo.

Compensações

  • Não é um verdadeiro pull-based: Ao contrário das ferramentas GitOps baseadas em pull, como o Argo CD, essa abordagem não tem "reconciliação contínua". Isso significa que o estado do cluster não é monitorado automaticamente e reconciliado com o estado desejado no Git.
  • Sem detecção de desvio: Se alguém modificar manualmente os recursos no cluster, essas alterações não serão revertidas automaticamente para corresponder ao repositório Git. Isso pode levar a desvios de configuração ao longo do tempo.
  • Segurança: Para permitir que o GitHub Actions seja implantado no seu cluster, você deve armazenar as credenciais do cluster em segredos do GitHub ou usar um método de autenticação baseado em OIDC. Ambas as abordagens exigem um manuseio cuidadoso para evitar riscos à segurança.

Transição para um modelo baseado em puxar

À medida que o seu projeto cresce ou os requisitos se tornam mais exigentes, a transição para um modelo GitOps baseado em pull pode oferecer vantagens significativas. Se a sua equipe precisar de recursos como autocorreção, reconciliação contínua ou um painel visual, adotar uma ferramenta baseada em pull, como o Argo CD ou o Flux, pode ser a próxima etapa lógica.

  • Autorreparação: Reverta automaticamente os estados do cluster se eles se desviarem.
  • Reconciliação contínua: Observe seu repositório Git para ver se há alterações de configuração 24 horas por dia, 7 dias por semana.
  • Painel de controle visual: Para verificar os status e os registros do aplicativo.

Você pode mudar para uma ferramenta baseada em pull, como o Argo CD ou o Flux. Eles monitorarão constantemente o seu repositório e garantirão que o cluster sempre corresponda ao que está no Git, sem necessidade de etapas manuais de "push" após o commit inicial.

Conclusão

Para implementar o GitOps de forma eficaz, é melhor começar aos poucos e adotar gradualmente suas tecnologias. Comece com um Dockerfile simples para conteinerizar seu aplicativo e implantá-lo na nuvem. Em seguida, apresente o Kubernetes para permitir escalabilidade e confiabilidade por meio de implementação e gerenciamento automatizados. 

Quando você se sentir confortável, adote uma abordagem de GitOps baseada em push usando ferramentas como o GitHub Actions para automatizar a infraestrutura de nuvem e a implantação de aplicativos. Por fim, à medida que seu projeto amadurecer e exigir estabilidade no nível de produção, faça a transição para um modelo baseado em pull com ferramentas como Argo CD ou Flux para obter reconciliação contínua, detecção de desvios e recursos de autocorreção. 

Essa progressão passo a passo garante uma curva de aprendizado suave, enquanto você aproveita o GitOps em todo o seu potencial para aplicativos modernos nativos da nuvem.

Neste blog, exploramos o GitOps, sua importância, os vários modelos de GitOps e como integrar o GitOps em um projeto de IA. Se você é novo em IA, recomendamos que faça o curso Fundamentos de IA que aborda os fundamentos da IA, aprofundando-se em modelos como o GPT-4o e descobrindo os segredos da IA generativa para que você possa navegar no cenário em evolução da IA.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.

Temas

Principais cursos da DataCamp

curso

MLOps Concepts

2 hr
22.3K
Discover how MLOps can take machine learning models from local notebooks to functioning models in production that generate real business value.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado
Git

blog

O que é Git? Manual completo do Git

Saiba mais sobre o sistema de controle de versão mais conhecido e por que é uma ferramenta de colaboração indispensável para cientistas de dados e programadores.
Summer Worsley's photo

Summer Worsley

14 min

blog

Como aprender IA do zero em 2024: Um guia completo dos especialistas

Descubra tudo o que você precisa saber sobre o aprendizado de IA em 2024, desde dicas para começar, recursos úteis e insights de especialistas do setor.
Adel Nehme's photo

Adel Nehme

20 min

tutorial

Tutorial do GitHub e do Git para iniciantes

Um tutorial para iniciantes que demonstra como funciona o controle de versão do Git e por que ele é crucial para projetos de ciência de dados.
Abid Ali Awan's photo

Abid Ali Awan

17 min

tutorial

Git Rename Branch: Como renomear uma filial local ou remota

Saiba como renomear ramificações locais e remotas do Git usando o terminal ou a interface gráfica do usuário (GUI) de clientes populares como o GitHub.
François Aubry's photo

François Aubry

tutorial

Tutorial da API de assistentes da OpenAI

Uma visão geral abrangente da API Assistants com nosso artigo, que oferece uma análise aprofundada de seus recursos, usos no setor, orientação de configuração e práticas recomendadas para maximizar seu potencial em vários aplicativos de negócios.
Zoumana Keita 's photo

Zoumana Keita

14 min

tutorial

Visão GPT-4: Um guia abrangente para iniciantes

Este tutorial apresentará tudo o que você precisa saber sobre o GPT-4 Vision, desde o acesso a ele, passando por exemplos práticos do mundo real, até suas limitações.
Arunn Thevapalan's photo

Arunn Thevapalan

12 min

Ver maisVer mais