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
-
Infraestrutura
- Kubernetes cluster
- Azure Service Bus
- SQL Server Database
- Docker Registry
-
Ferramentas
- Docker
- Kubectl
- Helm
- .NET SDK 8.0+
Configuração
Variáveis de Ambiente
A aplicação requer as seguintes configurações:
- Banco de Dados
{
"ConnectionStrings": {
"DefaultConnection": "Server=seu-servidor;Database=seu-banco;User ID=usuario;Password=senha;"
}
}
- Azure Service Bus
{
"AppSettings": {
"AzureServiceBus": {
"TransactionQueue": {
"ConnectionString": "sua-connection-string",
"QueueName": "transaction"
},
"WebhookQueue": {
"ConnectionString": "sua-connection-string",
"QueueName": "webhook"
}
}
}
}
- Integrações
{
"AppSettings": {
"ExternalEndpoint": {
"MonoService": {
"BaseUrl": "url-do-grocers-core"
}
}
}
}
- Credenciais
{
"AppSettings": {
"Credentials": {
"ClientId": "seu-client-id",
"ClientSecret": "seu-client-secret"
}
}
}
Build e Container
Docker Build
- Build da imagem:
docker build -t grocers-integration:latest .
- 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:
-
Métricas Principais
- CPU e Memória
- Latência de requisições
- Taxa de erros
- Tamanho das filas
-
Logs
- Nível de log: Information em produção
- Estruturados em JSON
- Incluem correlationId
Troubleshooting
Problemas Comuns
-
Pod não inicia
- Verificar logs do pod
- Validar configurações
- Checar secrets
-
Erros de conexão
- Validar connection strings
- Verificar firewalls
- Testar conectividade
-
Problemas de performance
- Ajustar recursos do pod
- Verificar configurações de HPA
- Monitorar uso de recursos
Boas Práticas
-
Segurança
- Usar secrets para credenciais
- Implementar network policies
- Manter imagens atualizadas
-
Escalabilidade
- Configurar HPA apropriadamente
- Monitorar uso de recursos
- Ajustar limites conforme necessidade
-
Resiliência
- Implementar múltiplas réplicas
- Configurar pod disruption budgets
- Usar node affinity quando apropriado