रिसोर्स प्लानर और ऑटो स्केलिंग
संक्षिप्त सारांश
स्थिर स्केलिंग चार समर्थन पर समर्थित है:1. सही अनुरोध/सीमा और QoS कक्षाएं।
2. सही स्टैकिंग (टोपोलॉजी, आत्मीयता, प्राथमिकताएं, प्रीमेप्शन)।
3. मल्टी-लेवल ऑटो-स्केलिंग: HPA/VPA/KEDA + Cluster/Node Autoscaler + वार्म पूल।
4. एसएलओ-उन्मुख तर्क (विलंबता/कतार गहराई) एंटी-फ्लैपिंग और बजट के साथ।
बेसिक रिसोर्स मॉडल
अनुरोध/सीमाएँ और QoS कक्षाएँ
शेड्यूलर के लिए अनुरोध = गारंटी; रनटाइम के लिए सीमा = छत।
QoS: गारंटीकृत (req = lim द्वारा CPU/Mement), Burstable (आंशिक रूप से), BeastEment (कुछ भी नहीं)।
हार्ड एसएलओ के साथ उत्पादन सेवाएं - गारंटीकृत/बर्स्टेबल; पृष्ठभूमि - Burstable/BestEment।
सीपीयू/मेमोरी/आईओ/नेटवर्क
सीपीयू - लोचदार (समय-साझाकरण), मेमोरी - हार्ड (यदि पार हो तो ओओएम-किल)।
IO/नेटवर्क पर, अलग से सीमा/प्राथमिकताएं निर्धारित करें (cgroups/TC), अन्यथा "शोर पड़ोसियों"।
जीपीयू/त्वरक
सदिश पूछें (GPU = 1, प्रोफाइल के माध्यम से VRAM), आलोचना के लिए nodSelector/tains और PodParty का उपयोग करें।
अनुमान के लिए - बैच आकार और मॉडल हीटिंग।
शेड्यूलिंग नीतियां
प्राथमिकताएं, पूर्वनिर्धारण और पीडीबी
महत्वपूर्ण रास्तों (भुगतान, लॉगिन) के लिए, प्रीमेशन की अनुमति है।
PodDis बजट निकासी/अपडेट के दौरान न्यूनतम संकेतों की रक्षा करता है।
आत्मीयता/टोपोलॉजी
colocation/decolocation के लिए नोड/पॉड आत्मीयता (उदाहरण के लिए, एक मेजबान पर प्रतिकृति न डालें)।
TopologyStreedConctrents चूल्हों को/AZ क्षेत्रों में संरेखित करते हैं।
NUMA/टोपोलॉजी: पिन-CPU/hugepages जहां कम विलंबता महत्वपूर्ण है।
Teyinths और सहिष्णुता
अलग पूल: 'प्रोड', 'बैच', 'gpu', 'सिस्टम'। आलोचना कम पड़ोसियों को समाप्त करती है।
स्वतः स्केलिंग: स्तर और संकेत
1) एचपीए (क्षैतिज पॉड ऑटोस्केलर)
मैट्रिक्स द्वारा फली की स्केल प्रतिकृति: सीपीयू/मेमोरी/कस्टम (प्रोमेथियस एडाप्टर)।
अच्छे संकेत: विलंबता p95/p99, कतार की लंबाई/अंतराल, आरपीएस प्रति पॉड, उपभोक्ता अंतराल।
एंटी-फ्लैपिंग: स्थिरीकरण (स्थिरीकरण विंडो), न्यूनतम चरण, शीतलन।
एचपीए (विलंबता-चालित) का उदाहरण: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) वीपीए (वर्टिकल पॉड ऑटोस्केलर)
वास्तविक खपत के लिए धुन अनुरोध/सीमा (अद्यतन सिफारिशें)।
मोड्स: 'ऑफ', 'स्वतः' (पुनः प्रारंभ), 'आरंभिक' (केवल प्रारंभ में).
अभ्यास: 'ऑफ' चालू करें - आंकड़े एकत्र करें - रिलीज पर लागू करें।
3) केईडीए/कतार आधारित स्केलिंग
बाहरी संकेतों पर प्रतिक्रिया: काफ्का लैग, एसक्यूएस गहराई, रेडिस लंबाई, प्रोमेथियस।
घटना/कतार उपभोक्ताओं (ईडीए) के लिए आदर्श।
केईडीए स्क्रीनऑब्जेक्ट (काफ्का लैग):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) क्लस्टर/नोड ऑटोस्केलर (सीए) + वार्म पूल
CA कमी/अतिरिक्त पर नोड्स जोड़ ता/हटाता है।
गर्म पूल: पहले से गर्म नोड्स/तैयार छवियां (ठंडी शुरुआत की गति)।
चोटियों के लिए - चरण-स्केलिंग और अग्रिम में बढ़े हुए मिननोड्स।
प्रतिक्रिया दर और वार्मिंग
एसएलओ प्रतिक्रिया देरी: फ्रंट लेयर ≤ 1-2 मिनट, बैकेंड/डीबी - अलग और अग्रिम में।
वार्म-अप: टीएलएस/डीएनएस/कनेक्शन, लोडिंग मॉडल, कैश वार्म-अप और जेआईटी।
घटना के लिए ठंडे रास्ते को "पंप" करने के लिए छाया लोड।
एंटी-फ्लैपिंग और स्थिरता
मेट्रिक्स पर हिस्टेरिसिस, चिकनी (एक्सपीरियंस। मध्यम)।
HPA में स्थिरीकरण विंडो, ' डाउन' में बड़ा।
"देखा" के बजाय चरण-स्केलिंग; प्रतिकृतियों को संशोधित करने के लिए दर-सीमा।
बजट-स्केलिंग: प्रति मिनट जोड़े गए यातायात/प्रतिकृतियों के% को सीमित करें।
अवलोकन और एसएलओ
कुंजी SLIs:- p95/99 विलंबता, त्रुटि दर, थ्रूपुट, कतार गहराई/अंतराल, सीपीयू/मेमोरी संतृप्ति, पॉड लंबित समय, नोड दबाव।
- विकास लंबित फली, असुरक्षित घटनाएं, आईपी/सबनेट की कमी, छवि लंबी खींच, निष्कासन।
- ट्रेल्स: p99 पूंछ पर पूंछ-आधारित नमूना - हम स्केलिंग करते समय अड़ चनें देखते हैं।
FinOps: लोच की लागत
मेट्रिक्स: $/1000 आरपीएस, $/ms p95, $/घंटे रिजर्व।
मिक्स: ऑन-डिमांड + आरक्षित + स्पॉट (गैर-आलोचना के लिए)।
ऑटो-स्केल सीमा त्रुटि की लागत से संबंधित है: कभी-कभी गर्म स्टॉक रखना लाभदायक होता है।
IGaming/fintech के लिए विशिष्टता
मैच/टूर्नामेंट की चोटियाँ: पहले से 'मिनरेप्लिकस' और मिननोड्स उठाएं, गर्म पूल चालू करें और कैश/मॉडल गर्म करें।
भुगतान उपभोक्ता: केईडीए द्वारा अंतराल + पहचान, प्रदाता सीमा (पीएसपी) गिरावट के बाहरी ट्रिगर के रूप में।
एंटीबॉट: एक अलग पूल, नियमों का एक त्वरित पैमाना, "ग्रे" मार्ग।
नियामक: अनुपालन सेवाओं के लिए पीडीबी, प्राथमिकताएं बैच की तुलना में अधिक हैं।
शीट जाँचें
डिजाइन
- डेटा प्रोफाइलिंग द्वारा निर्दिष्ट अनुरोध/सीमाएं; QoS चयनित।
- Class, PDB, tains/tolerations और toploySpress - कॉन्फ़िगर किया।
- एसएलओ मैट्रिक्स द्वारा एचपीए, न केवल सीपीयू।
- सिफारिशों को इकट्ठा करने के लिए वीपीए टू 'ऑफ' ('ऑटो' के लिए प्रवास की योजना है)।
- KEDA/घटना लोड कतार।
- सीए + गर्म पूल, छवियां कैश की जाती हैं (छवि प्री-पुल)।
ऑपरेशन
- स्थिरीकरण खिड़कियां और कूलडाउन सेट हैं (बहिष्कृत)।
- लंबित/अनिश्चित, अंतराल, p95, त्रुटि-दर के लिए अलर्ट।
- रनबुक: "कोई नोड्स नहीं", "छवि खिंचती नहीं है", "OOM/evict", "रिट्रे स्टॉर्म"।
- क्षमता-समीक्षा मासिक: स्केल बनाम योजना/लागत का तथ्य।
सामान्य गलतियाँ
HPA केवल IO/डेटाबेस सीमा के साथ CPU lat-regression द्वारा।
पीडीबी और प्राथमिकताओं की कमी - आलोचना पहली होगी।
दाग के बिना एक ही पूल पर आलोचना और बैच को मिलाना - "शोर पड़ोसियों"।
शून्य हीटिंग - कोल्ड चरम पर शुरू होता है।
आक्रामक '→ डाउन' - देखा और थ्रैश कंटेनरों।
KEDA बिना पहचान के - एक तूफान में डुप्लिकेट संदेश।
मिनी प्लेबुक
1) पीक इवेंट से पहले (T-30 मिनट)
1. 'minReplicas '/minNodes बढ़ाएं, गर्म पूल को सक्रिय करें।
2. सीडीएन/डीएनएस/टीएलएस/कनेक्शन, लोड मॉडल।
3. बॉट के लिए ग्रे मार्ग/सीमा शामिल करें।
4. डैशबोर्ड चेक करें: लंबित/लैग/p95।
2) नोड की कमी (असुरक्षित)
1. सीए, क्लाउड कोटा, सबनेट/आईपी जाँचें.
2. अस्थायी रूप से कम बैच सीमाएं, कम प्राथमिकताओं के लिए पूर्व-खाली करने में सक्षम।
3. एक अस्थायी रूप से बड़ा उदाहरण प्रकार या दूसरा पूल उठाएं।
3) कतार में अंतराल की वृद्धि
1. केईडीए: ट्रिगर द्वारा पैमाना; 2) उपभोक्ता सीमा बढ़ाना;
2. idempotency-keys और backpressure उत्पादकों को सक्षम करें.
4) प्रतिकृतियों को देखा
1. स्थिरीकरण/शीतलन बढ़ाएं; 2) चरण-स्केलिंग पर स्विच करें;
2. एक घातीय माध्य के साथ मीट्रिक बाहर चिकनी।
कॉन्फिग पालना
वीपीए (सिफारिशों का संग्रह):yaml apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: { name: api-vpa }
spec:
targetRef: { apiVersion: "apps/v1", kind: Deployment, name: api }
updatePolicy: { updateMode: "Off" } # собираем рекомендации
क्लस्टर ऑटोस्केलर (फ्लैग आइडिया, कॉन्सेप्ट):
--balance-similar-node-groups
--expander=least-waste
--max-empty-bulk-delete=10
--scale-down-utilization-threshold=0.5
--scale-down-delay-after-add=10m
टोपोलॉजी प्रसार:
yaml topologySpreadConstraints:
- maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: { matchLabels: { app: api } }
परिणाम
कुशल शेड्यूलर और ऑटो-स्केलिंग सही अनुरोध/सीमा + स्मार्ट स्टैकिंग + बहु-स्तरीय स्केलिंग (एचपीए/वीपीए/केडीए/सीए) + वार्मिंग अप और एंटी-फ्लैपिंग, एसएलओ और मिलीसेकंड लागत से बंधे हैं। IaC में नीतियों को ठीक करें, "सही" मेट्रिक्स (विलंबता/अंतराल) द्वारा निरीक्षण करें, चोटियों के नीचे गर्म स्टॉक रखें - और मंच लोचदार, अनुमानित और किफायती होगा।