feat: adicionar aula-16 (Flagger), remover Jaeger da aula-14 e integrar tracing Istio na aula-15

- aula-16: nova aula de canary deployment automatizado com Flagger
- aula-14: removido Jaeger (tracing movido para aula-15), corrigido
  nome do serviço Victoria Metrics, adicionado rate limiting no Kiali
- aula-15: adicionado receiver Zipkin no OTel Collector para receber
  traces do Istio, corrigida porta do Tempo (3100→3200), integração
  automática com Istio quando detectado
- aula-03: corrigido MAX_REQUESTS de 10 para 3 (valor padrão)
- CLAUDE.md: adicionada aula-16 na documentação
This commit is contained in:
ArgoCD Setup
2026-04-10 08:43:01 -03:00
parent 6ae82ed183
commit 60e69c9ff6
15 changed files with 1397 additions and 129 deletions
+7 -2
View File
@@ -37,7 +37,10 @@ ports:
jaeger-grpc:
enabled: false
zipkin:
enabled: false
enabled: true
containerPort: 9411
servicePort: 9411
protocol: TCP
config:
receivers:
@@ -47,6 +50,8 @@ config:
endpoint: "0.0.0.0:4317"
http:
endpoint: "0.0.0.0:4318"
zipkin:
endpoint: "0.0.0.0:9411"
connectors:
spanmetrics:
@@ -79,7 +84,7 @@ config:
service:
pipelines:
traces:
receivers: [otlp]
receivers: [otlp, zipkin]
processors: [memory_limiter, batch]
exporters: [otlp/tempo, spanmetrics]
metrics/spanmetrics:
+58 -1
View File
@@ -209,7 +209,7 @@ data:
datasources:
- name: Tempo
type: tempo
url: http://tempo.monitoring:3100
url: http://tempo.monitoring:3200
access: proxy
isDefault: false
jsonData:
@@ -413,6 +413,63 @@ log_success "Ingress demo-app criado"
log_info "Aguardando demo-app ficar pronta..."
kubectl wait --for=condition=available deployment/demo-app -n demo --timeout=180s 2>/dev/null || true
# =============================================================================
# CONFIGURAR ISTIO TRACING (se Istio estiver instalado)
# =============================================================================
if kubectl get deployment istiod -n istio-system &> /dev/null; then
echo ""
log_info "=== Istio detectado — configurando tracing via OTel Collector ==="
OTEL_ZIPKIN_URL="otel-collector-opentelemetry-collector.monitoring"
# Configurar istiod para enviar traces ao OTel Collector via Zipkin
log_info "Configurando istiod para enviar traces ao OTel Collector..."
helm upgrade istiod istio/istiod -n istio-system \
--set "meshConfig.defaultConfig.tracing.zipkin.address=${OTEL_ZIPKIN_URL}:9411" \
--set 'meshConfig.defaultConfig.tracing.sampling=100' \
--set 'meshConfig.enablePrometheusMerge=true' \
--set 'meshConfig.extensionProviders[0].name=zipkin' \
--set "meshConfig.extensionProviders[0].zipkin.service=${OTEL_ZIPKIN_URL}.svc.cluster.local" \
--set 'meshConfig.extensionProviders[0].zipkin.port=9411' \
--reuse-values \
--wait --timeout=5m 2>/dev/null || log_warn "Falha ao configurar istiod (helm upgrade)"
log_success "istiod configurado"
# Criar Telemetry API resource
log_info "Criando Telemetry resource..."
kubectl apply -f - <<'TELEMETRY_EOF'
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: mesh-default
namespace: istio-system
spec:
tracing:
- providers:
- name: zipkin
randomSamplingPercentage: 100
TELEMETRY_EOF
log_success "Telemetry resource criado"
# Atualizar Kiali para apontar tracing ao Grafana/Tempo
log_info "Configurando Kiali para usar Tempo via Grafana..."
VICTORIA_METRICS_URL="http://vmsingle-monitoring-victoria-metrics-k8s-stack.monitoring:8429"
GRAFANA_HOST_INTERNAL="${GRAFANA_HOST:-grafana.${DOMAIN}}"
kubectl patch configmap kiali -n istio-system --type merge -p "{
\"data\": {
\"config.yaml\": \"auth:\\n strategy: anonymous\\nlogin_token:\\n signing_key: kiali-signing-key-1234\\nserver:\\n web_root: /kiali\\nexternal_services:\\n prometheus:\\n url: ${VICTORIA_METRICS_URL}\\n tracing:\\n enabled: true\\n provider: tempo\\n internal_url: http://tempo.monitoring:3200\\n use_grpc: true\\n grafana:\\n enabled: false\\n\"
}
}" 2>/dev/null || true
kubectl rollout restart deployment/kiali -n istio-system 2>/dev/null || true
log_success "Kiali configurado com Tempo"
log_info "Reinicie os pods com sidecar para ativar tracing:"
log_info " kubectl rollout restart deployment -n <namespace>"
else
log_info "Istio nao detectado — tracing apenas via OTel SDK (demo app)"
fi
# =============================================================================
# APLICAR ALERTAS
# =============================================================================