GH GambleHub

Контейнеризация и оркестрация

1) Зачем контейнеры и k8s в iGaming

Скорость изменений: предсказуемые образы, единый пайплайн CI/CD.
Устойчивость: авто-перезапуски, горизонтальный скейл, селф-хилинг.
Изоляция данных/регионов: неймспейсы/кластеры под юрисдикции.
Операционные стандарты: политики ресурсов, единый лог/метрики/трейсы.

Когда не нужно: маленькая команда, 2–3 сервиса, редкие релизы — стартуйте с PaaS/модульного монолита.

2) Образы и реестры (OCI/Docker)

2.1 Сборка образов — принципы

Multi-stage: билд → рантайм (тонкие базовые образы `distroless`, `alpine` с осторожностью).
Повторяемость: фиксируйте версии/sha256, `COPY --chown`, `--mount=type=cache` в BuildKit.
SBOM и подпись: `cosign sign/verify`, `slsa provenance`, политика «только подписанные».
Slim-down: удаляйте dev-tools, включайте `USER nonroot`, `readOnlyRootFilesystem`.

Пример 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 Реестры и политики

Private registry + geo-реплики (EU/NA) для снижения латентности и соответствия GDPR.
Retention/immutability: запрет перезаписи тэгов, прогрев кэша в PoP.
Admission-контроль: только подписанные/скан-чистые образы (cosign+Trivy/Grype).

3) Оркестрация: базовые паттерны Kubernetes

3.1 Примитивы

Deployment — статeless-сервисы (лобби, API).
StatefulSet — кошелек/очереди/хранилища (фикс-имя, стабильные тома).
DaemonSet — агенты логов/сетевые компоненты.
Job/CronJob — миграции, отчеты, ETL.

3.2 Ресурсы и QoS

Указывайте `requests/limits` (CPU/Memory) → классы QoS и предсказуемое планирование.
Burstable только там, где это осознанно; критичное — Guaranteed.
Критичные платежные PODы поместите на выделенные пулы (taints/tolerations, node-affinity).

3.3 Устойчивость и релизы

Probes: `startup`, `liveness`, `readiness` (с таймаутами и периодами).
Rollout: `maxSurge/maxUnavailable`, canary через вес в Ingress/Gateway/Service Mesh.
PDB (PodDisruptionBudget) + graceful shutdown (PreStop hook, `terminationGracePeriodSeconds`).
Drain/cordon нод при апгрейдах.

4) Сеть: CNI, сервисы, входной трафик

4.1 CNI-слой

Calico/Cilium/Weave — политика сети (NetworkPolicy), eBPF для производительности.
Межнеймспейсные правила: минимально необходимые egress/ingress.

4.2 Сервисы и вход

Service: `ClusterIP/NodePort/LoadBalancer`.
Ingress или Gateway API для L7: маршруты по пути/хедеру/хосту, TLS, канареечные веса.
mTLS внутри кластера: через сервис-меш (Istio/Linkerd) — перехват TLS и политики.

Пример HTTPRoute (Gateway API, канареечный вес)

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) Хранение: CSI/PV/PVC, классы томов

CSI-драйверы провайдера (EBS/PD/Premium SSD) + `storageClass` с параметрами производительности.
RWX для шаринга (NFS/FSx/Filestore) — осторожно с блокировками.
Backup/restore: Velero/Kasten, периодические снапшоты, проверка восстановления.
Шифрование: на уровне диска и на уровне БД (KMS).

6) Авто-масштабирование: HPA/VPA/KEDA

HPA (по CPU/RAM/кастомным метрикам — RPS, p95): для API/лобби.
VPA (рекомендации/авто) — для стабильных воркеров.
KEDA (event-driven) — масштаб по очередям Kafka/SQS/Redis, Cron-шедулы.
Cluster Autoscaler — узлы по нагрузке; warm-пулы для пиков (турниры/стримы).

7) Сервис-меш (по необходимости)

mTLS/политики сервис↔сервис, авторизация по идентичностям (SPIFFE).
Circuit-breaker/timeout/retry, outlier-ejection, зеркалирование (shadow).
Теле-метрия из коробки: единые метрики и трассы.
Используйте там, где нужен тонкий трафик-менеджмент (платежи, провайдеры игр).

8) Безопасность: секреты, политика, соответствие

Secrets: внешний менеджер (AWS/GCP/Azure KMS, External Secrets), ротация.
Policy-as-code: OPA/Gatekeeper/Kyverno — запрет `:latest`, root-USER, hostPath, привилегий.
Эскалация прав: Namespaces + RBAC, разделение Dev/Stage/Prod, аудит.
Image Security: скан в CI/CD, подписание (cosign), admission по подписи.
mTLS и JWT внутри (меш), WAF/Rate-limit на входе (Ingress/Gateway).

9) Наблюдаемость и SLO

Metrics: Prometheus/OpenTelemetry, p50/95/99, 4xx/5xx, saturations.
Logs: структурный JSON → Loki/Elastic, маскирование PII/PAN/IBAN.
Traces: OTLP → Tempo/Jaeger; `trace_id` идет от шлюза.
SLO: например, `Deposit p95 ≤ 300 ms, success ≥ 98.5%`, алерты burn-rate.
Проактивность: дашборды per-service/per-route, watchdog по DLQ и лагам очередей.

10) CI/CD, Helm, GitOps

CI: линтеры, тесты (unit/contract/integration), SAST/DAST, SBOM.
Helm/Jsonnet/Kustomize: декларативные чарты с `values.` на окружения.
GitOps (ArgoCD/Flux): single-source-of-truth, PR-ревью манифестов, rollback кнопкой.
Стратегии: blue-green, canary, shadow; миграции схем — expand-and-contract.

Фрагмент values.yaml (ресурсы/пробы)

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) Планирование и изоляция

NodePools: отделите платежи/кошелек на «низкошумные» узлы с быстрым диском.
Taints/Tolerations: защищенные пулы для критико-нагрузок.
(Anti-)Affinity: размазывайте реплики по зонам/узлам (HA).
ResourceQuota/LimitRange на неймспейсы — защита от «шумных соседей».

12) Мультикластер, мульти-регион, DR

Разделение по юрисдикциям: кластеры EU/LatAm/ROW; данные резидентов — локально.
GSLB/Anycast на входе, пер-класт-наблюдаемость и алерты.

DR-уровни:
  • Warm standby (рекомендуемо): синх-реплика критичных БД, периодические проверки failover.
  • Active-active для чтений/региональной маршрутизации.
  • Резервирование: бэкапы (Velero), rehearsal восстановления.

13) iGaming-специфика

Платежи/кошелек: p95 ≤ 300–500 мс, отдельные пулы и строгие PDB; canary 1→5→10%.
Лобби/контент: агрессивный HPA по RPS/INP, прогретые образы/векторный кеш.
Лайв-игры/стримы: LC/минимум ретраев, длинные таймауты сокетов, sticky по соединению.
Комплаенс: неймспейсы с жесткой Policy, секреты через KMS, аудит изменений Helm-релизов.
Ответственная игра: сервис лимитов/блокировок — приоритетный трафик (fail-open/close по политике).

14) Чек-листы

Перед выкладкой сервиса

  • Multi-stage образ, USER nonroot, подпись cosign, скан пройден.
  • Requests/limits, probes, env/secret из внешнего менеджера.
  • PDB, `maxUnavailable ≤ 1`, graceful shutdown.
  • SLO/алерты, трассировка от шлюза до БД.
  • Канареечная схема и план отката.
  • Политики OPA/Kyverno проходят (no root, no hostPath, no:latest).

Кластер/платформа

  • CNI и NetworkPolicy включены; mTLS (меш) где нужно.
  • StorageClass/ретеншн, бэкап/restore проверены.
  • HPA/VPA/KEDA настроены; Cluster Autoscaler и warm-pool.
  • RBAC минимальный, аудит включен, секреты — из KMS.
  • GitOps: чарты/манифесты в репозитории, обзор PR обязателен.

15) Анти-паттерны

Образы `latest`, root-пользователь, «толстые» базовые слои.
Нет `requests/limits` → эвикции/троттлинг.
Readiness=liveness (флапающие рестарты).
Смешение стейтфул/стателесс на одном пуле без taints.
Миграции схем «в лоб» без expand-and-contract.
Единственный кластер «на все рынки» без региональной изоляции.
Логи с PII/PAN, секреты в ConfigMap.
Отсутствие PDB/дрэнажа → обрывы в пиках и при апгрейдах.

16) Метрики платформы (минимум)

Кластер: CPU/mem requests vs allocatable, pod-churn, node-pressure.
Сеть: p95 per-route, 4xx/5xx, reset/timeout, retry-rate, mTLS-ошибки.
Хранилища: IOPS/latency, queue-depth, ошибок CSI.
Автоскейл: HPA decisions, CA events, время прогрева.
Бизнес: TTP, TtW, FTD-success, отказ платежей по провайдеру.
Безопасность: несоответствия OPA, не-подписанные образы, просроченные секреты.

17) Примеры манифестов

Deployment (API, канареечный 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 (кошелек)

yaml apiVersion: policy/v1 kind: PodDisruptionBudget spec:
minAvailable: 3 selector: { matchLabels: { app: wallet } }

HPA (по RPS через 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) Процесс внедрения (по спринтам)

1. Сборка и безопасность образов: multi-stage, SBOM, подписи, политика admission.
2. Базовая платформа k8s: CNI, Ingress/Gateway, мониторинг/логи/трейсы, StorageClass.
3. CI/CD и GitOps: Helm-чарты, среды, canary/rollback, миграции схем.
4. Скейл и устойчивость: HPA/VPA/KEDA, PDB, node-пулы, taints/affinity, DR-план.

Итоговая шпаргалка

Тонкие, подписанные образы + политика допуска = основа безопасности.
Пробы, ресурсы, PDB, drain = устойчивость релизов.
HPA/VPA/KEDA + тюнинг пулов = масштаб без «просадок».
Gateway/Ingress + мTLS/OPA = безопасный периметр и внутренняя связь.
Observability + SLO + GitOps = управляемые изменения.
Региональная изоляция и DR = комплаенс и отказоустойчивость.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Telegram
@Gamble_GC
Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.