Resurs planlaşdırıcısı və avto skeylinq
Qısa xülasə
Davamlı skeylinq dörd dayaq üzərində dayanır:1. Düzgün sorğular/limitlər və QoS sinifləri.
2. Düzgün düzülüş (topologiya, affiniti, prioritetlər, preempsiya).
3. Çox səviyyəli avtomatik skeylinq: HPA/VPA/KEDA + Cluster/Node autoscaler + warm pools.
4. Anti-flapping və büdcələrlə SLO-yönümlü məntiq (latency/queue depth).
Resursların əsas modeli
Requests/Limits və QoS sinifləri
Requests = planlayıcı üçün zəmanət; Limits = runtime üçün tavanlar.
QoS: Guaranteed (CPU/Memory ilə req = lim), Burstable (qismən), BestEffort (heç bir şey).
Sərt SLO ilə istehsal xidmətləri - Guaranteed/Burstable; fon - Burstable/BestEffort.
CPU/Yaddaş/IO/Şəbəkə
CPU - elastik (time-sharing), yaddaş - sərt (OOM-kill aşdıqda).
IO/şəbəkəyə ayrıca limitlər/prioritetlər qoyun (cgroups/TC), əks halda «səs-küylü qonşular».
GPU/sürətləndiricilər
Vektorla (GPU = 1, profillər vasitəsilə VRAM) soruşun, tənqid üçün nodeSelector/taints və PodPriority istifadə edin.
Şişkinlik üçün - batch size və qızdırma modelləri.
Döşəmə siyasəti (Scheduling)
Prioritetlər, pre-empsiya və PDB
Kritik yollar üçün PriorityClass (ödənişlər, giriş), pre-emissiyaya icazə verilir.
PodDisruptionBudget evakuasiya/yeniləmə zamanı minimum replikaları qoruyur.
Affiniti/Topologiya
node/pod affinity (məsələn, bir host üçün replika qoymayın).
topologySpreadConstraints/AZ zonaları üzrə podaları bərabərləşdirir.
NUMA/topologiya: aşağı gecikmə vacib olan yerdə pin-CPU/hugepages.
Teints və tolerans
Pulları ayırın: 'prod', 'batch', 'gpu', 'system'. Tənqid daha az qonşu dözür.
Avtomatik skeylinq: səviyyələr və siqnallar
1) HPA (Horizontal Pod Autoscaler)
Skailit Not Replica metrik: CPU/Memory/xüsusi (Prometheus Adapter).
Yaxşı siqnallar: latency p95/p99, queue length/lag, RPS per pod, consumer lag.
Anti-flapping: stabilization (stabilizationWindow), minimum addım, cooldown.
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: api-hpa }
spec:
scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: api }
minReplicas: 6 maxReplicas: 120 behavior:
scaleUp:
stabilizationWindowSeconds: 60 policies: [{ type: Percent, value: 100, periodSeconds: 60 }]
scaleDown:
stabilizationWindowSeconds: 300 policies: [{ type: Percent, value: 20, periodSeconds: 60 }]
metrics:
- type: Pods pods:
metric:
name: http_server_request_duration_seconds_p95 target:
type: AverageValue averageValue: "0.25" # 250ms
2) VPA (Vertical Pod Autoscaler)
Real istehlak üçün requests/limits sazlayır (tövsiyələri yeniləyir).
Rejimlər: 'Off' (yığım), 'Auto' (yenidən başlamaq), 'Initial' (yalnız başlanğıc zamanı).
Təcrübə: 'Off' daxil → statistika toplamaq → buraxılışlarda tətbiq.
3) KEDA/növbə əsaslı skeylinq
Xarici siqnallara cavab verir: Kafka lag, SQS depth, Redis length, Prometheus.
Hadisələrin/növbələrin (EDA) konsumerləri üçün idealdır.
yaml apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: { name: consumer-scale }
spec:
scaleTargetRef: { name: txn-consumer }
minReplicaCount: 2 maxReplicaCount: 200 cooldownPeriod: 120 pollingInterval: 5 triggers:
- type: kafka metadata:
bootstrapServers: broker:9092 consumerGroup: tx-cg topic: payments lagThreshold: "10000"
4) Cluster/Node Autoscaler (CA) + Warm Pools
CA çatışmazlığı/artıqlığı ilə nodları əlavə edir/çıxarır.
Warm pools: əvvəlcədən qızdırılmış nodlar/hazırlanmış görüntülər (cold start sürətləndirir).
Zirvələr üçün - step-scaling və artırılmış minNodes əvvəlcədən.
Reaksiya və qızma sürəti
SLO-reaksiya gecikməsi: ön qat ≤ 1-2 dəq, arka/DB - ayrıca və əvvəlcədən.
Qızdırma: TLS/DNS/konnektlər, model yükləmə, cache və JIT qızdırma.
Hadisədən əvvəl «nasos» cold yolu üçün gölge yükü.
Anti-flapping və sabitlik
Metrik histerezis, hamarlaşdırma (eksp. orta).
stabilization windows HPA, böyük 'scaleDown'.
Step-skeylinq əvəzinə «mişar»; replikaları dəyişdirmək üçün rate-limit.
Budget skeylinq: dəqiqədə əlavə edilən trafik/replikaların% -ni məhdudlaşdırın.
Müşahidə və SLO
Açar SLI:- p95/99 latency, error rate, throughput, queue depth/lag, CPU/Memory saturation, pod pending time, node pressure.
- pending pods artım, unschedulable hadisələr, IP/alt şəbəkə çatışmazlığı, image pull uzun, evictions.
- Traces: tail-based sampling p99 → skeyldə dar yerləri görürük.
FinOps: elastiklik dəyəri
Metrik: $/1000 RPS, $/ms p95, $/saat ehtiyat.
Mix: on-demand + reserved + spot (qeyri-tənqid üçün).
Avtomobil skeylinin astanası səhv dəyəri ilə bağlıdır: bəzən warm ehtiyatını saxlamaq sərfəlidir.
iGaming/Fintech üçün xüsusiyyətlər
Matçların/turnirlərin zirvələri: əvvəlcədən 'minReplicas' və minNodes qaldırın, warm pools və cache/modellərin istiləşməsini yandırın.
Ödəniş məsləhətçiləri: KEDA lag + idempotentlik, xarici deqradasiya triggeri kimi provayder limitləri (PSP).
Antibot: ayrı hovuz, qaydaların sürətli miqyası, «boz» marşrutlar.
Tənzimləyici: PDB-nin komplayens xidmətləri var, prioritetlər batch-dən daha yüksəkdir.
Çek vərəqləri
Dizayn
- Requests/limits profil məlumatlarına görə verilir; QoS seçilmişdir.
- PriorityClass, PDB, taints/tolerations və topologySpread - özelleştirilmiş.
- SLO metrik HPA, yalnız CPU deyil.
- VPA tövsiyələri toplamaq üçün 'Off' (miqrasiya 'Auto' planlaşdırılır).
- KEDA/hadisə yükləri üçün növbələr.
- CA + warm pools, görüntülər cached (image pre-pull).
Əməliyyat
- Stabilization Windows və cooldowns təyin (flapping istisna).
- pending/unschedulable, lag, p95, error-rate.
- Runbooks: «No nod», «şəkil uzanmır», «OOM/evict», «fırtına retrains».
- Capacity-review aylıq: fakt Skale vs plan/dəyəri.
Tipik səhvlər
HPA yalnız CPU → IO/DB limitləri ilə lat-reqress.
PDB-nin olmaması və prioritetlər → tənqid ilk olaraq qabardılır.
taints → «səs-küylü qonşular» olmadan bir hovuz üzərində tənqid və batch qarışdırılması.
Sıfır isitmə → zirvədə soyuq başlanğıc.
Aqressiv 'scaleDown' → mişar və thrash konteyner.
Gedişatsız KEDA → fırtına zamanı mesajların təkrarlanması.
Mini playbuklar
1) Pik hadisədən əvvəl (T-30 dəq)
1. Artırmaq 'minReplicas '/minNodes, aktivləşdirmək warm pools.
2. CDN/DNS/TLS/konnektləri qızdırın, modelləri yükləyin.
3. «Boz» marşrutları/botlar üçün limitləri daxil edin.
4. dashboards yoxlamaq: pending/lag/p95.
2) Nod çatışmazlığı (unschedulable)
1. CA, bulud kvotaları, alt şəbəkələr/IP yoxlayın.
2. Müvəqqəti aşağı pre-emption aşağı prioritetlər üçün batch limitləri aşağı.
3. Müvəqqəti olaraq daha böyük bir növ və ya ikinci hovuz qaldırın.
3) növbə lag artım
1. KEDA: scale up trigger; 2) konsumer limitlərini qaldırmaq;
2. idempotency-keys və backpressure istehsalçıları daxil edin.
4) Replika mişar
1. stabilization/cooldown artırmaq; 2) step skeylinqə keçmək;
2. metrikanı eksponensial orta ilə hamarlaşdırın.
Şparqallar
VPA (tövsiyələrin toplanması):yaml apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: { name: api-vpa }
spec:
targetRef: { apiVersion: "apps/v1", kind: Deployment, name: api }
updatePolicy: { updateMode: "Off" } # собираем рекомендации
Cluster Autoscaler (bayraq ideyaları, konsepsiya):
--balance-similar-node-groups
--expander=least-waste
--max-empty-bulk-delete=10
--scale-down-utilization-threshold=0.5
--scale-down-delay-after-add=10m
Topology spread (zonalar üzrə homojenlik):
yaml topologySpreadConstraints:
- maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: { matchLabels: { app: api } }
Yekun
Effektiv planlayıcı və avtomatik skeylinq düzgün sorğular/limitlər + ağıllı döşəmə + çoxsəviyyəli skeylinq (HPA/VPA/KEDA/CA) + SLO və millisaniyə dəyərinə bağlı istiləşmə və anti-flappinqdir. Siyasətləri IaC-də düzəldin, «düzgün» metriklərlə (latency/lag) müşahidə edin, warm ehtiyatını zirvələr altında saxlayın - və platforma elastik, proqnozlaşdırıla bilən və qənaətli olacaq.