Ресурстарды пландаштыруу жана авто скейлинг
Кыскача резюме
Туруктуу скейлинг төрт таяныч турат:1. Туура суроолор/лимиттер жана QoS класстары.
2. Туура жайгаштыруу (топология, аффинити, артыкчылыктар, алдын ала эмпсия).
3. Көп баскычтуу авто скейлинг: HPA/VPA/KEDA + Cluster/Node autoscaler + warm pools.
4. SLO-багытталган логика (latency/queue depth) анти-флапинг жана бюджеттер менен.
Ресурстардын негизги модели
Requests/Limits жана QoS класстары
Requests = пландоочу үчүн кепилдиктер; Limits = runtime үчүн шыптар.
QoS: Guaranteed (CPU/Memory боюнча req = lim), Burstable (жарым-жартылай), BestEffort (эч нерсе).
Катуу SLO менен өндүрүш кызматтары - Guaranteed/Burstable; фон - Burstable/BestEffort.
CPU/эс/IO/Network
CPU - ийкемдүү (убакыт-бөлүшүү), эс - катуу (OOM-өлтүргөндө).
IO/тармагына өзүнчө лимиттерди/артыкчылыктарды (cgroups/TC), антпесе "ызы-чуу кошуналар".
GPU/акселераторлор
Вектордук түрдө (GPU = 1, профилдер аркылуу VRAM) суроо, сын үчүн nodeSelector/taints жана PodPriority колдонуңуз.
inferens үчүн - батч өлчөмү жана жылытуу моделдер.
Стилдөө саясаты (Scheduling)
Артыкчылыктар, алдын ала эмиссия жана PDB
PriorityClass үчүн критикалык жолдор (төлөмдөр, логин), алдын ала эмиссия уруксат берилет.
PodDisruptionBudget эвакуация/жаңылоо учурунда минималдуу репликаларды коргойт.
Аффинити/Топология
node/pod affinity үчүн коңгуроо/деколокация (мисалы, бир ээсине реплика салбаңыз).
topologySpreadConstraints зоналар/AZ боюнча тарамдарды тегиздөө.
NUMA/топология: pin-CPU/hugepages төмөн жашыруун маанилүү жерде.
Тейинттер жана толеранстар
Пулдарды чыгарыңыз: 'prod', 'batch', 'gpu', 'system'. Сын аз кошуна чыдайт.
Авто скейлинг: деңгээл жана сигналдар
1) HPA (Horizontal Pod Autoscaler)
CPU/Memory/Custom (Prometheus Adapter).
Жакшы сигналдар: latency p95/p99, queue length/lag, RPS per pod, consumer lag.
Анти-Fapping: турукташтыруу (stabilizationWindow), минималдуу кадам, 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)
requests/limits реалдуу керектөө боюнча тюнинг (сунуштарды жаңылайт).
Режимдер: 'Off' (чогултуу), 'Auto' (кайра баштоо), 'Initial' (башталганда гана).
Практика: күйгүзүү 'Off' → статистиканы чогултуу → бошотуу учурунда колдонуу.
3) KEDA/кезек негизделген скейлинг
тышкы сигналдар жооп: Kafka lag, SQS depth, Redis length, Prometheus.
Иш-чаралардын/кезектердин консультанттары үчүн идеалдуу (EDA).
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 кошумчалайт/тартыштыгы/ашыкча менен нод алып салат.
Warm Pools: алдын ала жылытылган бурч/даярдалган сүрөттөр (тездетүү cold start).
чокулары үчүн - step-scaling жана жогорулатылган minNodes алдын ала.
Реакция жана жылуулук ылдамдыгы
SLO-кечигүү жооп: алдыңкы катмар ≤ 1-2 мин, арткы/BD - өзүнчө жана алдын ала.
Жылытуу: TLS/DNS/байланыштар, жүктөө моделдер, жылытуу кэш жана JIT.
Shadow-жүктөө үчүн "насостук" окуя үчүн колдо жол.
Анти-Fapping жана туруктуулук
Метриктер боюнча гистерезис, тегиздөө (эксп. орточо).
Stabilization HPA Windows, ири 'scaleDown'.
Step-скейлинг ордуна "араа"; репликаларды өзгөртүүгө rate-limit.
Budget скейлинг: Бир мүнөттө кошулган трафиктин/репликалардын% ын чектөө.
Байкоо жана SLO
Негизги SLI:- p95/99 latency, error rate, throughput, queue depth/lag, CPU/Memory saturation, pod pending time, node pressure.
- Өсүү pending pods, unschedulable окуялар, IP/көмөкчордондордун жетишсиздиги, image pull узак, evictions.
- Tracks: куйруктары боюнча tail-based sampling p99 → скейлинг тар жерлерди көрүп.
FinOps: ийкемдүүлүк наркы
Метрика: $/1000 RPS, $/ms p95, $/саат камдык.
Mix: on-demand + reserved + spot (сын эмес).
Авто-скейлдин босогосу катанын баасы менен байланышкан: кээде warm-запасын сактап калуу пайдалуу.
iGaming/Fintech үчүн өзгөчөлүктөрү
Матчтар/турнирлердин чокулары: алдын ала 'minReplicas' жана minNodes көтөрүү, warm pools күйгүзүү жана кэш/моделдерди жылытуу.
Төлөм консультанттары: KEDA lag + демпотенттүүлүк, провайдерлердин лимиттери (PSP) деградациянын тышкы триггерлери катары.
Antibot: өзүнчө бассейн, эрежелердин тез масштабы, "боз" маршруттар.
Жөнгө салуучу: PDB комплаенс-кызматтарда, артыкчылыктар batch караганда жогору.
Чек баракчалары
Долбоорлоо
- Requests/limits профилдин маалыматтары боюнча берилген; QoS тандалган.
- PriorityClass, PDB, taints/tolerations жана topologySpread - орнотулган.
- HPA гана CPU эмес, SLO-метриктер боюнча.
- VPA 'Off' сунуштарды чогултуу үчүн (көчүрүү 'Auto' пландаштырылган).
- KEDA/окуя жүктөө үчүн кезек.
- CA + warm pools, сүрөттөр кэш (image pre-pull).
Эксплуатация
- Турукташтыруу Windows жана cooldowns белгиленген (Fapping алынып салынган).
- pending/unschedulable боюнча Alerts, lag, p95, error-rate.
- Runbooks: "No Nod", "Image", "OOM/evict", "бороон-чапкын".
- Capacity-review ай сайын: факт Скейл vs план/наркы.
Типтүү каталар
HPA гана CPU → lat-регресс IO/DD чектеринде.
PDB жана артыкчылыктарынын жоктугу → сын биринчи болуп саналат.
taints → "ызы-чуу кошуналар" жок бир ок боюнча сын жана batch аралаштыруу.
нөл жылытуу → чокусунда муздак баштоо.
Агрессивдүү 'scaleDown' → араа жана thrash контейнерлер.
KEDA эч кандай идемотенттүүлүк → бороон-чапкын учурунда кайталанган билдирүүлөр.
Mini Playbook
1) чокусуна чейин (T-30 мин)
1. Көбөйтүү 'minReplicas '/minNodes, активдештирүү warm pools.
2. CDN/DNS/TLS/коннекттерди жылытуу, моделдерин жүктөп алуу.
3. "Боз" маршруттарды/боттор үчүн чектөөлөрдү киргизүү.
4. Текшерүү dashboards: pending/lag/p95.
2) Nuts жетишсиздиги (unschedulable)
1. Текшерүү CA, булуттар, көмөкчордондор/IP.
2. Убактылуу төмөн артыкчылыктар үчүн алдын-ала эмиссия киргизүү, чеги азайтуу.
3. Убактылуу көбүрөөк орган түрүн же экинчи бассейнди көтөрүү.
3) өсүү lag кезекте
1. KEDA: триггер боюнча scale up; 2) консумердин лимиттерин көтөрүү;
2. idempotency-keys жана backpressure өндүрүүчүлөр кирет.
4) реплика араа
1. stabilization/cooldown жогорулатуу; 2) step-скейлинг өтүү;
2. экспоненциалдык орточо метриканы тегиздөө.
Шпаргалка
VPA (сунуштарды чогултуу):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 (желек идеялары, түшүнүк):
--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 (зоналар боюнча бир калыпта):
yaml topologySpreadConstraints:
- maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: { matchLabels: { app: api } }
Жыйынтык
Эффективдүү пландоочу жана авто скейлинг - бул туура суроо-талаптар/лимиттер + акылдуу стилдөө + көп баскычтуу скейлинг (HPA/VPA/KEDA/CA) + жылытуу жана анти-флаппинг, SLO жана миллисекунд наркына байланыштуу. IaC саясатын чечүү, "туура" метриктер (latency/lag) боюнча байкоо, жогорку боюнча warm-запастарын сактап - жана платформа ийкемдүү, алдын ала жана үнөмдүү болот.