Implantação Automatizada do Audio Pixel Studio com ArgoCD no Paradigma GitOps

Uma Nova Abordagem para Implantações de Software

Os métodos tradicionais de implantação, baseados em intervenção manual no servidor, são propensos a erros e dificultam a colaboração em equipe. Este tutorial demonstra como aplicar os princípios GitOps para orquestrar a implantação do Audio Pixel Studio, um aplicativo web de áudio. O objetivo é automatizar totalmente o ciclo de implantação, sincronização e reversão, utilizando o repositório Git como fonte única da verdade.

Preparando o Ambiente Operacional

Antes de prosseguir, garanta que seu sistema atenda aos requisitos: Ubuntu 22.04 LTS, mínimo de 4GB de RAM, 20GB de espaço em disco e acesso à internet. Os componentes centrais a serem instalados incluem Docker, uma distribuição leve de Kubernetes (k3s) e o cliente kubectl.

Instalação do Motor de Contêineres:

# Atualizando índices de pacotes e instalando dependências
sudo apt update && sudo apt install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# Configurando repositório e chave GPG do Docker
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Instalando e habilitando o Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USUARIO_ATUAL
newgrp docker
docker info

Provisionando o Cluster Kubernetes com k3s:

# Executando o script de instalação oficial
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik" sh -

# Ajustando permissões do arquivo de configuração
sudo chmod 644 /etc/rancher/k3s/k3s.yaml
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl cluster-info

Implementando o GitOps Engine com ArgoCD

O ArgoCD atua como controlador decalrativo, monitorando continuamente o estado desejado definido no Git e reconciliando-o com o cluster Kubernetes.

Implantação do ArgoCD no Cluster:

# Criando namespace e aplicando manifests do ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml

# Acompanhando a inicialização dos componentes
kubectl wait --for=condition=available deployment -l app.kubernetes.io/name=argocd-server -n argocd --timeout=180s

# Recuperando credenciais iniciais de acesso
ARGO_SENHA=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 --decode)
echo "Senha administrativa inicial: $ARGO_SENHA"

Acesse a interface web através de um túnel seguro: kubectl port-forward svc/argocd-server -n argocd 8443:443. Navegue até https://localhost:8443 e autentique-se com o usuário admin e a senha recuperada.

Containerizando o Audio Pixel Studio

Para que a aplicação seja gerenciada pelo Kubernetes, é necessário empacotá-la em uma imagem Docker. O Dockerfile abaixo exemplifica uma estrutura otimizada para aplicações Python.

FROM python:3.10-slim as construtor

WORKDIR /construcao
COPY ./requisitos.txt .
RUN pip install --prefix=/instalado --no-cache-dir -r requisitos.txt

FROM python:3.10-slim

# Copiando dependências instaladas
COPY --from=construtor /instalado /usr/local

WORKDIR /app
COPY ./src .
COPY ./config ./config

# Variáveis de ambiente para a aplicação
ENV FLASK_APP=main.py \
    FLASK_ENV=production \
    APP_PORTA=5000

EXPOSE $APP_PORTA

HEALTHCHECK --interval=30s --timeout=3s \
    CMD curl -f http://localhost:$APP_PORTA/health || exit 1

CMD ["python", "-m", "flask", "run", "--host=0.0.0.0", "--port=$APP_PORTA"]

Construa e publique a imagem no seu registro de contêineres (docker.io/seu-usuario/audio-studio:1.0.0).

Definindo o Estado Desejado no Git

No repositório da aplicação, crie o diretório manifestos com os recursos do Kubernetes.

deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: audio-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: audio
  template:
    metadata:
      labels:
        app: audio
    spec:
      containers:
      - nome: servidor-web
        imagem: docker.io/seu-usuario/audio-studio:1.0.0
        portas:
        - containerPort: 5000
        recursos:
          limites:
            memoria: "512Mi"
            cpu: "500m"
          requisicoes:
            memoria: "256Mi"
            cpu: "200m"
        prontidao:
          httpGet:
            path: /health
            port: 5000
          periodoSeconds: 10
        liveness:
          httpGet:
            path: /health
            port: 5000
          periodoSeconds: 15
          atrasoInicial: 30

servico.yaml:

apiVersion: v1
kind: Service
metadata:
  nome: audio-svc
spec:
  selector:
    app: audio
  portas:
  - nome: http
    porta: 80
    portaAlvo: 5000
  tipo: ClusterIP

Orquestrando a Sincronização Automática

No ArgoCD, registre o repositório Git em Settings > Repositories. Em seguida, crie uma nova aplicação com os seguintes parâmetros-chave:

  • Sincronização Automática: Ativada
  • Auto-cura: Ativada (reverte mudanças manuais no cluster)
  • Poda de Recursos: Ativada (remove recursos do cluster que não existem no Git)
  • Caminho no Repositório: /manifestos

Alternativamente, use a CLI:

argocd app create audio-producao \
  --repo https://github.com/sua-org/audio-studio.git \
  --path manifestos \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace producao \
  --sync-policy automated \
  --auto-prune \
  --self-heal \
  --sync-replace

Mecanismo de Reversão via GitOps

A reversão no paradigma GitOps é realizada revertendo a mudança no repositório de código-fonte, e não executando comandos no cluster. Quando um commit problemático é detectado, execute:

# Visualize o histórico de commits
git log --oneline

# Crie um commit que reverte as mudanças do commit defeituoso (ex: abc1234)
git revert abc1234

# Envie a reversão para o repositório central
git push origin main

O ArgoCD, ao detectar a nova revisão, sincronizará automaticamente o cluster para refletir o estado revertido, garantindo que a versão estável anterior seja restaurada sem intervenção manual.

Integração com Sistemas de Alerta

Configure notificações para monitorar eventos críticos de implantação. A seguir, um exemplo de configuração para enviar alertas a um webhook genérico:

# ConfigMap de notificações do ArgoCD
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
  namespace: argocd
data:
  service.webhook.generic: |
    url: $WEBHOOK_URL
    headers:
    - name: Content-Type
      value: application/json
  trigger.on-sync-failed: |
    - when: app.status.operationState.phase in ['Error', 'Failed']
      send: [alerta-falha]
  template.alerta-falha: |
    webhook:
      generic:
        method: POST
        body: |
          {
            "aplicacao": "{{.app.metadata.name}}",
            "status": "{{.app.status.operationState.phase}}",
            "mensagem": "Falha na sincronização. Verifique os logs no ArgoCD.",
            "timestamp": "{{.app.status.operationState.finishedAt}}"
          }

Esta configuração monitora falhas de sincronização e dispara uma requisição HTTP POST para o endpoint configurado, possibilitando integração com ferramentas como Slack, Teams ou sistemas de ticketing.

A adoção do GitOps com ArgoCD transforma o processo de implantação em um fluxo auditável, replicável e resiliente, onde toda a infraestrutura é versionada como código.

Tags: ArgoCD GitOps kubernetes Docker k3s

Publicado em 6-9 17:33 por Thomas