Ռեսուրսների պլանավորողը և ավտո-սկեյլինգը
Ռուսական ռեզյումե
Կայուն սկեյլինգը պահվում է չորս հենարանների վրա
1. Ճիշտ հարցումներ/լիմիտներ և QoS դասարաններ։
2. Ճիշտ տեղադրումը (տեղաբանություն, աֆինիտներ, գերակայություններ, նախապաշարում)։
3. Բազմաստիճան մեքենա-սկեյլինգը 'HPA/MSA/KEDA + Cluster/Node autoscaler + warm poope։
4. SLO կողմնորոշված տրամաբանությունը (latency/queue depth) anti flappings և ալյումիններով։
Ռուսական ռեսուրսների մոդել
Reques.ru/Limits դասարաններ և QoS դասարաններ
Reques.ru = ծրագրավորողի երաշխիքներ; Limits = առաստաղներ runtime-ի համար։
QoS: Guaranted (req = lant CPU/Memory), Burstable (մասամբ), BestEffect (ոչինչ)։
Արտադրողական ծառայություններ կոշտ SLO-ի հետ - Guaranteed/Burstable; ֆոնային - Burstable/BestEffect։
CPU/Հիշողություն/IO/Ցանց
CPU-ն առաձգական (time-sharing) է, հիշողությունը կոշտ է (OFC-kill, երբ ավելանում է)։
IO/ցանցում տեղադրեք սահմաններ/գերակայություններ առանձին (cgroups/TC), հակառակ դեպքում «աղմկոտ հարևանները»։
GPU/աքսելերատորներ
Խնդրեք վեկտորորեն (GPU = 1, VSA ավելցուկի միջոցով), օգտագործեք nodeDirector/tainment և PodPriority քննադատության համար։
Ինֆիսի համար 'batch size-ը և մոդելները տաքացնելով։
Տեղադրման քաղաքականությունները (Scheduling)
Առաջնահերթություններ, կանխատեսում և PDB
Priorts Class-ը կրիտիկական ճանապարհների համար (վճարումներ, լոգիններ), թույլատրված է։
PodMedrup.ru Budget-ը պաշտպանում է նվազագույն կրկնօրինակները ռոտացիայի/ապդեյթի ժամանակ։
Affiniti/Technology
node/pod affinity գաղութների/դեկոլոիզացիայի համար (օրինակ, մի կտոր կրկնօրինակեք)։
topologySpreadConstrainment-ը հավասարեցնում է օձերը/AZ։
NUMA/տեղաբանություն ՝ pin-CPU/hugepages, որտեղ կարևոր է ցածր լատենտ։
Թեյինթ և տոլերանսներ
Բուծեք փամփուշտները '«108», «batch», «gpu», «108»։ Քննադատությունը ավելի քիչ հարևաններ է հանդուրժում։
Auto scailing 'մակարդակներ և ազդանշաններ
1) HPA (Horizontal Pod Autoscaler)
Skeilite pods-ը մետրերով 'CPU/Memory/castory (Prometheus Adapter)։
Լավ ազդանշաններ ՝ latency p95/p99, queue length/lag, RPS per pod, consumer lag։
Anti flupping: կայունացում (stabilizae System), նվազագույն քայլ, cooldown։
HPA (latency-driven) օրինակ
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)
Tuninguet reques.ru/limits իրական սպառման համար (թարմացնում է առաջարկությունները)։
Ռեժիմները ՝ «Off» (հավաքումը), «J» (վերագործարկումը), «Initial» (միայն սկսելիս)։
Պրակտիկա 'ներառել' Off 'ww.orld հավաքել վիճակագրությունը ծրագրավորման ժամանակ։
3) KEDA/հիմնավորված սկեյլինգ
Արձագանքում է արտաքին ազդանշաններին ՝ Kafka lag, MSS depth, Redis length, Prometheus։
Իդեալական է իրադարձությունների/հերթերի կոնսուլների համար (EDA)։
KEDA ScaledObject (Kafka lag):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 pooics: նախապես տաքացված նոդներ/պատրաստված պատկերներ (արագացնում են cold start)։
Պիկի համար 'step-scaling և ավելացված minNodes-ը նախապես։
Արձագանքի արագությունը և տաքացումը
SLO-ուշացում 'առջևի շերտը 241-2 րոպե, backends/BD - առանձին և նախօրոք։
Պրեգեև 'TIM/IV/կոննեկտներ, մոդելների բեռնումը, տաքացնելով և JIT-ը։
Shadow-2019-ը կոլդ-ճանապարհի «պոկելու» համար մինչև իրադարձությունը։
Anti Flapping և 2019
Gistereae-ը մետրիկների վրա, հարթեցումը (108)։ միջին)։
Stabilization windows HPA-ում, մեծ «scaleDown» -ում։
Step-skeiling փոխարեն «pel»; rate-limite-ը կրկնօրինակի փոփոխության վրա։
Budget-Skailing-ը 'սահմանափակել մեկ րոպեում ավելացված տոկոսները/կրկնօրինակը։
Դիտարկումը և SLO
Հիմնական SLI
Ալերտա
Pending pods, unschedulable իրադարձությունները, IP/ենթատեքստերի պակասը, image pox երկար, evictions։
p95/99 latency, error rate, throughput, queue depth/lag, CPU/Memory saturation, pod pending time, node pressure.
Թրեյզները ՝ tail-based sampling-ը պոչի վրա p99-ի վրա տեսնում ենք նեղ տեղեր սկեյլում։
FinOps: Առաձգականության արժեքը
Մետրիկները ՝ $/1000 RPS, դոլար/ms p95, դոլար/ժամ պահուստ։
Mics: on-demand + reserved + spot (քննադատության համար)։
Scaila-ի շեմն կապված է սխալի արժեքի հետ, երբեմն էլ ձեռնտու է պահել warm-պահուստը։
Հատուկ iGaming/fintech
Picki 108/Redia: նախապես բարձրացնել «minReplicas» և minNodes, ներառել warm poom և տաքացնել/մոդելներ։
Հիբրիդային վահանակներ ՝ KEDA lag + idempotenty, պրովայդերների լիմիտներ (PSA) որպես արտաքին դեգրադացիայի հարվածներ։
Անտիբոտ 'առանձին փամփուշտը, կանոնների արագ մասշտաբը, «մոխրագույն» երթուղիները։
Կարգավորիչ ՝ PDB-ն կոմպլեքս ծառայություններում, գերակայությունները ավելի բարձր են, քան batch-ը։
Chek-lists
Նախագծումը
- Reques.ru/limits-ը տեղադրված է ավելացման տվյալների համաձայն։ QoS-ն ընտրվել է։
- Priorts Class, PDB, taints/toler.ru և topologySpread - վճռական։
- HPA-ը SLO-metric-ում, ոչ միայն CPU-ն։
- MSA-ն «Off» -ում հավաքելու համար (բողոքարկումը «J 'planovo»)։
- KEDA/հերթեր իրադարձական բեռների համար։
- CA + warm poope, պատկերները (image pre-pro)։
Վիրահատություն
- Stabilization windows և cooldowns (ֆլամպինգը բացառված է)։
- Ալերտները pending/unschedulable, lag, p95, error-rate։
- Runbooks: «nod», «image չի ձգվում», «OFC/evict», «retrav փոթորիկ»։
- Capacity-review-ը ամեն ամիս.
Տիպիկ սխալներ
HPA-ն միայն CPU-ի վրա է, որ IO/BD-ի սահմաններում։
PDB-ի բացակայությունը և ռուսական քննադատությունը առաջինը։
Քննադատության և batch-ի խառնուրդը մեկ փամփուշտի վրա առանց tain.ru-ի «աղմկոտ հարևանների»։
Զրոյական տաքացումը պիկի վրա ցուրտ է։
Ագրեսիվ «scaleDown» -ը և thrash բեռնարկղերը։
KEDA-ն առանց idempotenty-ի ավելացնում է հաղորդագրությունների կրկնօրինակները փոթորկի ժամանակ։
Մինի պլեյբուկներ
1) Պիկի իրադարձությունից առաջ (T-30 րոպե)
1. Ավելացնել 'minReplicas '/minNodes, ակտիվացնել warm poope։
2. Տաքացնել CDN/CSA/TSA/կոնեկտները, ներբեռնել մոդելները։
3. Միացրեք «մոխրագույն» երթուղիները/լիմիտները բոտերի համար։
4. Ստուգել dashboards: pending/lag/p95։
2) Նոդի պակասը (unschedulable)
1. Ստուգել CA, ամպերի քվոտաները, ենթահող/IP։
2. Ժամանակավորապես նվազեցնել batch-ի լիմիտները, ներառել կանխատեսումը ցածր գերակայությունների համար։
3. Բարձրացնել ժամանակավորապես ավելի մեծ instans տիպը կամ երկրորդ փամփուշտը։
3) Lag աճը հերթում
1. KEDA: scale up-ի վրա։ 2) բարձրացնել կոնսյուսմերի սահմանները.
2. միացրեք idempotency-keys և backpressure dowsers։
4) Պիլա կրկնօրինակը
1. Ավելացնել stabilization/cooldown; 2) գնալ step-skeiling;
2. հարթեցնել մետրը էքսպոնենցիալ միջին։
Քրեյգ-փուչիկները
MSA (հյուրանոցների հավաքումը)
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 } }
Արդյունքը
Պլանավորողը և Auto-scailing-ը ճիշտ հարցումներ/limits + խելացի տեղադրում + բազմաշերտ սկեյլինգ (HPA/SNA/KEDA/CA) + պրոտեզներ և հակատիպինգ, որոնք կապված են SLO-ի և միլիոնավոր սեկունդների արժեքի հետ։ Ամրագրեք քաղաքականությունը IaC-ում, դիտարկեք «ճիշտ» մետրերը (latency/lag), պահեք warm-պահուստը պիկի տակ, և պլատֆորմը կլինի առաձգական, կանխատեսելի և տնտեսական։