Contêineres e orquestração
1) Porquê contêineres e k8s em iGaming
Velocidade de alterações: imagens previsíveis, um único pipline CI/CD.
Estabilidade: relançamento automático, skale horizontal, self hiling.
Isolamento de dados/regiões: neymspace/cluster sob jurisdição.
Padrões operacionais: políticas de recursos, um único logs/métricas/trailers.
Um pequeno comando, 2-3 serviços, lançamentos raros - comece com o PaaS/monolítico modular.
2) Imagens e registros (OCI/Docker)
2. 1 Montagem de imagens - princípios
Multi-estágio: Bild Rant (imagens de base fina 'distroless', 'alpine' com cautela).
Repetição: capture as versões/sha256, 'COPY -chown', '--mount = tipo = cachê' no BuildKit.
SBOM e assinatura: 'cosign sign/verify', 'slsa provenance', política 'apenas assinados'.
Slim-down: Remova dave-tools, ative 'USER nanroot', 'readOnlyRootFilesystem'.
Exemplo do Dockerfile (Node. js)
dockerfile build
FROM node:22-bookworm AS build
WORKDIR /app
COPY package. json./
RUN npm ci --omit=dev
COPY..
RUN npm run build
runtime (distroless)
FROM gcr. io/distroless/nodejs22
WORKDIR /srv
COPY --from=build /app/dist./dist
COPY --from=build /app/node_modules./node_modules
USER 10001
ENV NODE_ENV=production
CMD ["dist/server. js"]
2. 2 Registros e políticas
Private registry + geo-réplicas (EU/NA) para reduzir a latência e a conformidade com o GDPR.
Retenção/imutability: impede a substituição de marcas de formatação, aquecendo o cachê no PoP.
Controle Advision: apenas imagens assinadas/scan-limpas (cosign + Trivy/Grype).
3) Orquestra: Kubernetes base
3. 1 Primitivos
Deployment - serviços estateless (API, lobby).
StatefulSet - carteira/fila/armazenamento (nome de fix, volumes estáveis).
DaemonSet - agentes de logs/componentes de rede.
Job/CronJob - migrações, relatórios, ETL.
3. 2 Recursos e QoS
Especifique 'requests/limits' (CPU/Memory) → classes de QoS e planejamento previsível.
Burstable apenas onde é consciente; crítico - Guaranteed.
Coloque PODs críticos de pagamento em poóis selecionados (taants/tolerações, node-affinity).
3. 3 Sustentabilidade e lançamentos
Protes: 'startup', 'liveness', 'readiness' (com temporizadores e períodos).
Rollout: `maxSurge/maxUnavailable`, canary через вес в Ingress/Gateway/Service Mesh.
PDB (PodDisruptionBudget) + graceful shutdown (PreStop hook, `terminationGracePeriodSeconds`).
Nodo drain/cordon em upgrades.
4) Rede: CNI, serviços, tráfego de entrada
4. 1 camada CNI
Calico/Cilium/Weave - Política de rede (NetworkPolicy) eBPF para o desempenho.
Regras Interligadas: egress/ingress minimamente necessário.
4. 2 Serviços e Entrada
Service: `ClusterIP/NodePort/LoadBalancer`.
Origins ou Gateway API para L7: rotas por caminho/heder/hosts, TLS, peso canário.
mTLS dentro do cluster: por meio do serviço de mesh (Istio/Linkerd) - interceptação de TLS e políticas.
Exemplo HTTPRoute (Gateway API, peso canário)
yaml apiVersion: gateway. networking. k8s. io/v1 kind: HTTPRoute spec:
rules:
- backendRefs:
- name: lobby-v1 weight: 90 port: 8080
- name: lobby-v2 weight: 10 port: 8080
5) Armazenamento: CSI/PV/PVC, classes de volume
Drivers CSI do provedor (EBS/PD/Premium SSD) + 'storageClass' com parâmetros de desempenho.
RWX para sharing (NFS/FSx/Filestore) - cuidado com bloqueios.
Backup/restore: Velero/Kasten, revezamento periódico, verificação de recuperação.
Criptografia: nível de disco e nível de BD (KMS).
6) Zoom automático: HPA/VPA/KEDA
HPA (por CPU/RAM/métricas custômicas - RPS, p95): para API/lobby.
VPA (recomendação/auto) - para workers estáveis.
KEDA (event-driven) - Escala em filas Kafka/SQS/Redis, Cron-Shedul.
Cluster Autoscaler - nós de carga; warm pool para picos (torneios/striam).
7) Serviço-mesh (por necessidade)
MTLS/Políticas de servis↔servis, Autorização de Identidade (SPIFFE).
Circuito-breaker/timeout/retry, outler-ejation, espelhamento (shadow).
Corpo-metria da caixa, métricas e pistas.
Use onde você precisa de gestão de tráfego fino (pagamentos, provedores de jogos).
8) Segurança: segredos, política, conformidade
Segredos: Gerente externo (AWS/GCP/Azure KMS, External Secret), rotativo.
Policy-as-código: OPA/Gatekeeper/Kyverno - proibição ': latest', root-USER, hostPath, privilégios.
Escalar direitos: Namespaces + RBAC, Separação Dave/Estágio/Prod, auditoria.
Image Security: scan em CI/CD, assinatura (cosign), admissão por assinatura.
mTLS e JWT dentro (mesh), WAF/Rate-limit na entrada (Ingress/Gateway).
9) Observabilidade e SLO
Metrics: Prometheus/OpenTelemetry, p50/95/99, 4xx/5xx, saturations.
Logs: estrutura JSON → Loki/Elastic, camuflagem PII/PAN/IBAN.
Traques: OTLP → Tempo/Jaeger; 'trace _ id' vem da entrada.
SLO: por exemplo, 'Deposit p95 ≤ 300 ms, sucess ≥ 98. 5% ', alertas burn-rate.
Proatividade: dashboards per-service/per-road, watchdog por DLQ e lajes de fila.
10) CI/CD, Helm, GitOps
CI: Linters, testes (unit/contract/integration), SAST/DAST, SBOM.
Helm/Jsonnet/Kustomize: listas declaratórias com 'values' no ambiente.
GitOps (ArgoCD/Flux): single-fonte-of-truth, revezamento PR de manifestos, botão rollback.
Estratégias: blue-green, canary, shadow; migração de circuitos - expand-and-contract.
Fatia de valor. yaml (recursos/amostras)
yaml resources:
requests: { cpu: "200m", memory: "256Mi" }
limits: { cpu: "500m", memory: "512Mi" }
livenessProbe: { httpGet: { path: /healthz, port: 8080 }, initialDelaySeconds: 20, periodSeconds: 10 }
readinessProbe: { httpGet: { path: /readyz, port: 8080 }, initialDelaySeconds: 5, periodSeconds: 5 }
11) Planejamento e isolamento
NodePools: Separe os pagamentos/carteira para nódulos «baixo som» com disco rápido.
Taints/Tolerações: pool seguro para cargas de crítica.
(Anti-) Affinity: ajude as réplicas por zona/nó (HA).
«Neymspace» é uma defesa contra «vizinhos barulhentos».
12) Multiclaster, região multi, Dr
Divisão por jurisdição: clusters EU/LatAm/ROW; Os dados dos residentes são locais.
GSLB/Anycast na entrada, observabilidade para- e alertas.
- Warm standby (recomendado): réplica sinh de base de dados críticos, verificações periódicas de failover.
- Ativo ativo para leitura/roteiro regional.
- Reserva: bacapes (Velero), rehearsal restauração.
13) iGaming-especificidades
Pagamentos/carteira: p95 ≤ 300-500 ms, pulas individuais e PDB rigoroso; canary 1→5→10%.
Lobby/conteúdo: HPA agressivo RPS/INP, imagens aquecidas/kesh vetor.
Jogos Live/striam: LC/retrações mínima, tempos longos de soquete, sticky por conexão.
Complaens: Neymspace com Policy rígido, segredos via KMS, auditoria de alterações Helm.
Jogo responsável: serviço de limites/bloqueios - tráfego prioritário (fail-open/close de política).
14) Folhas de cheque
Antes de postar o serviço
- Imagem multi-estágio, USER nonroot, assinatura cosign, gravado.
- Requests/limits, propes, end/secret do gerente externo.
- PDB, `maxUnavailable ≤ 1`, graceful shutdown.
- SLO/alert, traçado desde a entrada até o BD.
- Esquema de canário e plano de reversão.
- As políticas OPA/Kyverno passam (no root, no hostPath, no: latest).
Cluster/plataforma
- CNI e NetworkPolicy incluídos; mTLS onde for necessário.
- Class/Retensem, Bacap/Restore testados.
- HPA/VPA/KEDA configurados; Cluster Autoscaler и warm-pool.
- RBAC mínimo, auditoria incluída, segredos de KMS.
- GitOps: lista/manifesto no repositório, a visão PR é obrigatória.
15) Anti-pattern
Imagens 'latest', usuário root, camadas básicas 'grossas'.
Não 'requests/limits' → evicção/trottling.
Readiness = liveness (restabelecimentos flaptantes).
Mistura de estagiárias/estateless em uma única bala sem taants.
Migração de esquemas «para a frente» sem expand-and-contract.
O único cluster para todos os mercados, sem isolamento regional.
Logs com PII/PAN, segredos no ConfigMap.
A ausência de PDB/drenage → as falhas nos picos e nos upgrades.
16) Métricas de plataforma (mínimo)
Кластер: CPU/mem requests vs allocatable, pod-churn, node-pressure.
Rede: p95 per-road, 4xx/5xx, reset/timeout, retry-rate, mTLS erros.
Armazenamento: IOPS/latency, queue-depth, erros CSI.
Scale automático: HPA decisões, CA events, tempo de aquecimento.
Negócios: TTP, TtW, Sucess FTD, Negação de Pagamento de Provedor.
Segurança: discrepâncias OPA, imagens não assinadas, segredos vencidos.
17) Exemplos de manifestos
Deployment (API, canário label)
yaml apiVersion: apps/v1 kind: Deployment metadata: { name: wallet-api, labels: { app: wallet, track: stable } }
spec:
replicas: 4 strategy: { type: RollingUpdate, rollingUpdate: { maxSurge: 1, maxUnavailable: 1 } }
selector: { matchLabels: { app: wallet, track: stable } }
template:
metadata: { labels: { app: wallet, track: stable } }
spec:
serviceAccountName: wallet-sa containers:
- name: api image: registry. local/wallet/api@sha256:...
ports: [{ containerPort: 8080 }]
resources:
requests: { cpu: "250m", memory: "256Mi" }
limits: { cpu: "500m", memory: "512Mi" }
readinessProbe: { httpGet: { path: /readyz, port: 8080 }, periodSeconds: 5 }
livenessProbe: { httpGet: { path: /healthz, port: 8080 }, initialDelaySeconds: 20 }
securityContext:
runAsNonRoot: true readOnlyRootFilesystem: true
PDB (carteira)
yaml apiVersion: policy/v1 kind: PodDisruptionBudget spec:
minAvailable: 3 selector: { matchLabels: { app: wallet } }
HPA (RPS por custom-metrics)
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec:
minReplicas: 4 maxReplicas: 40 metrics:
- type: Pods pods:
metric:
name: http_requests_per_second target:
type: AverageValue averageValue: "50"
18) Processo de implementação (por sprins)
1. Montagem e segurança de imagem: multi-estágio, SBOM, assinaturas, política de adesão.
2. Plataforma básica k8s: CNI, Ingress/Gateway, monitoramento/logs/trailers, StorageClass.
3. CI/CD e GitOps: lista de helm, ambientes, canary/rollback, migração de circuitos.
4. Scale e sustentabilidade: HPA/VPA/KEDA, PDB, node-pool, taints/affinity, Dr. Plano.
Esparguete final
Imagens finas, assinadas + políticas de tolerância = base de segurança.
Amostras, recursos, PDB, drain = sustentabilidade de lançamentos.
HPA/VPA/KEDA + sintonizar pool = escala sem «furos».
Gateway/Origins + mTLS/OPA = perímetro seguro e ligação interna.
Observabilidade + SLO + GitOps = alterações controladas.
Isolamento regional e DR = complacência e resistência a falhas.