Контейнеризація та оркестрація
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 на вході, пер-класт-спостережуваність і алерти.
- 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 = комплаєнс і відмовостійкість.