Pular para o conteúdo principal

Guia de Deployment

Visão Geral

O grocers-integration é uma aplicação .NET que pode ser deployada usando Docker e Kubernetes. Este guia fornece instruções detalhadas para configurar e deployar a aplicação em diferentes ambientes.

Pré-requisitos

  1. Infraestrutura

    • Kubernetes cluster
    • Azure Service Bus
    • SQL Server Database
    • Docker Registry
  2. Ferramentas

    • Docker
    • Kubectl
    • Helm
    • .NET SDK 8.0+

Configuração

Variáveis de Ambiente

A aplicação requer as seguintes configurações:

  1. Banco de Dados
{
"ConnectionStrings": {
"DefaultConnection": "Server=seu-servidor;Database=seu-banco;User ID=usuario;Password=senha;"
}
}
  1. Azure Service Bus
{
"AppSettings": {
"AzureServiceBus": {
"TransactionQueue": {
"ConnectionString": "sua-connection-string",
"QueueName": "transaction"
},
"WebhookQueue": {
"ConnectionString": "sua-connection-string",
"QueueName": "webhook"
}
}
}
}
  1. Integrações
{
"AppSettings": {
"ExternalEndpoint": {
"MonoService": {
"BaseUrl": "url-do-grocers-core"
}
}
}
}
  1. Credenciais
{
"AppSettings": {
"Credentials": {
"ClientId": "seu-client-id",
"ClientSecret": "seu-client-secret"
}
}
}

Build e Container

Docker Build

  1. Build da imagem:
docker build -t grocers-integration:latest .
  1. Variáveis do container:
  • ASPNETCORE_ENVIRONMENT: Ambiente (Development, Staging, Production)
  • Porta exposta: 8080

Exemplo de docker-compose.yml

version: '3.8'
services:
integration:
build: .
ports:
- "8080:8080"
environment:
- ASPNETCORE_ENVIRONMENT=Production
volumes:
- ./appsettings.json:/app/appsettings.json

Deployment Kubernetes

Estrutura do Helm Chart

charts/
├── Chart.yaml
├── values.yaml
└── templates/
├── deployment.yaml
├── service.yaml
├── ingress.yaml
└── configmap.yaml

Configuração por Ambiente

Os valores específicos de cada ambiente são definidos em:

charts/environments/
├── dev/
├── hml/
└── prd/

Comando de Deployment

helm upgrade --install -f ./environments/<environment>/values.yaml \
--namespace <namespace> grocers-integration .

Exemplo de values.yaml

replicaCount: 2

image:
repository: seu-registry/grocers-integration
tag: latest
pullPolicy: Always

service:
type: ClusterIP
port: 8080

ingress:
enabled: true
className: nginx
hosts:
- host: integration.seu-dominio.com
paths:
- path: /
pathType: Prefix

resources:
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 500m
memory: 512Mi

autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 5
targetCPUUtilizationPercentage: 80

Health Checks

A aplicação implementa endpoints de health check:

  • Liveness: /health/live
  • Readiness: /health/ready

Monitoramento

Recomendações para monitoramento:

  1. Métricas Principais

    • CPU e Memória
    • Latência de requisições
    • Taxa de erros
    • Tamanho das filas
  2. Logs

    • Nível de log: Information em produção
    • Estruturados em JSON
    • Incluem correlationId

Troubleshooting

Problemas Comuns

  1. Pod não inicia

    • Verificar logs do pod
    • Validar configurações
    • Checar secrets
  2. Erros de conexão

    • Validar connection strings
    • Verificar firewalls
    • Testar conectividade
  3. Problemas de performance

    • Ajustar recursos do pod
    • Verificar configurações de HPA
    • Monitorar uso de recursos

Boas Práticas

  1. Segurança

    • Usar secrets para credenciais
    • Implementar network policies
    • Manter imagens atualizadas
  2. Escalabilidade

    • Configurar HPA apropriadamente
    • Monitorar uso de recursos
    • Ajustar limites conforme necessidade
  3. Resiliência

    • Implementar múltiplas réplicas
    • Configurar pod disruption budgets
    • Usar node affinity quando apropriado