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/політики servis↔servis, авторизація за ідентичностями (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).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.