מתכנן משאבים ואבזור אוטומטי
סיכום קצר
קנה מידה יציב נתמך על ארבע תמיכה:1. בקשות/מגבלות נכונות ושיעורי QOS.
2. ערמה נכונה (טופולוגיה, זיקה, סדר עדיפויות, הקדמה).
3. קנה מידה אוטומטי רב-רמה: HPA/VPA/KEDA + Cluster/Node autoscaler + בריכות חמות.
4. לוגיקה מונחית SLO (עומק תור/latency) עם אנטי-נפנוף ותקציבים.
מודל משאבים בסיסי
בקשות/מגבלות ושיעורי QOS
בקשות = ערבויות ללוח הזמנים; גבולות = תקרות עבור זמן ריצה.
QOS: מובטח (req = lim by CPU/Memory), Burstable (חלקית), Bust Process (כלום).
שירותי הפקה עם SLOs קשה - מובטח/Burstable; רקע - Burstable/Bustblable מאמץ.
מעבד/זיכרון/רשת
מעבד - אלסטי (שיתוף זמן), זיכרון - קשה (OOM-kill אם חרג).
ב-IO/רשת, קבע גבולות/סדרי עדיפויות בנפרד (cgroups/TC), אחרת ”שכנים רעשניים”.
מאיצים/GPU
שאל וקטור (GPU = 1, VRAM באמצעות פרופילים), השתמש NodesElector/tains ו-PodesPriority לביקורת.
להסיק - גודל אצווה וחימום מודל.
מדיניות תזמון
סדרי עדיפויות, הקדמה ו ־ PDB
Class עבור מסלולים קריטיים (תשלומים, התחברות), מניעה מותרת.
תקציב PodGood מגן רמזים מינימליים במהלך פינוי/עדכונים.
זיקה/טופולוגיה
זיקה של node/pod לקולוקציה/ריקבון (למשל, לא לשים העתקים על פונדקאי אחד).
אילוצי TopologyLight ליישר את הלבבות לאזורי AZ/.
NUMA/topology: pin-CPU/Hugeps שבו Latency הוא חשוב.
Teyinths וסובלנות
בריכות נפרדות: ”פרוד”, ”אצווה”, ”גפו”, ”מערכת”. ביקורת סובלת פחות שכנים.
קנה מידה אוטומטי: רמות ואותות
1) HPA (תרמיל אופקי אוטוסקאלר)
העתקים של תרמילים לפי מדדים: מעבד/זיכרון/מותאם אישית (Prometheus Adapter).
אותות טובים: latency p95/p99, תור אורך/lag, RPS לתא, lag צרכן.
אנטי-נפנוף: ייצוב (חלון ייצוב), צעד מינימלי, התקררות.
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 (תרמיל אנכי Autoscaler)
מנגינות מבקשות/מגבלות לצריכה אמיתית (המלצות עדכונים).
מצבים: 'Off', 'Auto' (הפעלה מחדש), 'President' (רק בהתחלה).
תרגול: להדליק את ”Off” = איסוף סטטיסטיקות * חל על שחרור.
3) קנה מידה מבוסס תור של KDA
מגיב לאותות חיצוניים: קפקא לג, עומק SQS, אורך רדיס, פרומתאוס.
אידיאלי עבור צרכני אירוע/תור (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) אשכול/Node Autoscaler (CA) + בריכות חמות
CA מוסיף/מסיר צמתים במחסור/עודף.
בריכות חמות: צמתים מחוממים מראש/תמונות מוכנות (מהירות התחלה קרה).
לפסגות - קפיצת מדרגה והרחבת Minnodes מראש.
קצב תגובה והתחממות
עיכוב תגובת SLO: שכבה קדמית בלום 1-2 דקות, אחורי/DB - בנפרד מראש.
חימום: TLS/DNS/חיבורים, טעינת מודלים, חימום מטמון ו-JIT.
עומס צל עבור ”שאיבת” הנתיב הקר לאירוע.
אנטי-נפנוף ויציבות
היסטריזה על מדדים, החלקה (exp. medium).
חלונות ייצוב ב HPA, גדולים ב ' דאון'.
קפיצת מדרגה במקום ”מסור”; מגבלת קצב כדי לשנות העתקים.
הגדלת תקציב: הגבלת% התנועה/העתקים שנוספו לדקה.
יכולת תצפית ו ־ SLO
סלים מפתח:- latency P95/99, קצב שגיאה, תפוקה, עומק תור/לאג, רווית מעבד/זיכרון, תרמיל תלוי ועומד, לחץ צומת.
- גדילה תלויה ועומדת תרמילים, אירועים בלתי נדלים, מחסור IP/תת-רשת, תמונת למשוך ארוך, פינוי.
- שבילים: דגימה מבוססת זנב על p99 זנבות.
FinOps: עלות של גמישות
מדידות: $1000 RPS, $/ms p95, $/שעה רזרבה.
מיקס: על ־ פי דרישה + שמור + ספוט (ללא ביקורת).
סף ההיקף האוטומטי קשור למחיר הטעות: לפעמים רווחי לשמור על המלאי החם.
פרטים עבור iGaming/fintech
פסגות משחק/טורניר: להעלות 'minReplicas' ו minNodes מראש, להפעיל בריכות חמות ולחמם מטמונים/דגמים.
צרכני תשלום: KEDA על ידי lag + idempotency, despect limits (PSP) בתור גורמים חיצוניים של הידרדרות.
אנטיוט: בריכה נפרדת, קנה מידה מהיר של כללים, מסלולים ”אפורים”.
רגולציה: PDB עבור שירותי ציות, סדרי עדיפויות גבוהים יותר מאשר עבור אצווה.
בדוק גיליונות
עיצוב
[ ] בקשות/גבולות שצוינו על ידי פרופיל נתונים; QOS נבחר.
[ ] מחלקה, PDB, Tains/Collerations ו-TopologyFress - מוגדרים.
[ ] HPA על ידי מדדי SLO, לא רק מעבד.
[ ] VPA ל 'off' לאסוף המלצות (ההגירה ל 'Auto' מתוכננת).
[ ] תורים של KEDA/Evention Load.
[ ] CA + בריכות חמות, תמונות נדבקות (תמונה לפני משיכה).
מבצע
[ ] חלונות ייצוב וקירור נקבעים (נפנוף נשלל).
[ ] התראות להמתנה/בלתי ניתנת לתיקון, פיגור, p95, שיעור שגיאה.
[ ] Runbooks: "אין צמתים", "תמונה לא נמתחת", "OOM/Evict'," סופה מגש מחדש ".
[ ] סקירת קיבולת חודשית: עובדה של קנה מידה נגד תוכנית/עלות.
טעויות נפוצות
HPA רק על ידי CPU = lat-רגרסיה עם מגבלות IO/מסד נתונים.
העדר PDB וסדרי עדיפויות * ביקורת תהיה הראשונה.
ערבוב ביקורת וקבוצה על אותה בריכה ללא קעקועים = ”שכנים רועשים”.
אפס חימום כפול קור מתחיל בשיא.
אגרסיבי ' Down' מסור ו מכולות.
KEDA ללא אידמפוטנטיות * לשכפל הודעות בסערה.
ספרי משחק קטנים
1) לפני אירוע השיא (T-30 דקות)
1. הגדל 'minReplicas '/minnodes, הפעל בריכות חמות.
2. חימום חיבורי CDN/DNS/TLS/, טען מודלים.
3. כולל מסלולים אפורים/גבולות עבור רובוטים.
4. בדוק לוחות מחוונים: ממתין/lag/p95.
2) מחסור בצומת (לא ניתן לתיאום)
1. בדוק CA, מכסות ענן, תת רשתות/IP.
2. באופן זמני להוריד מגבלות אצווה, לאפשר טרום ריפוי עבור סדרי עדיפויות נמוכים.
3. תגדל באופן זמני סוג תצוגה גדול יותר או בריכה שנייה.
3) צמיחת פיגור בתור
1. KEDA: לעלות על ידי הדק; 2) להעלות את גבולות הצרכן;
2. אפשר אידמפוטנטיות מפתחות ויצרני תרמיל גב.
4) העתקים מסורים
1. הגדלת הייצוב/התקררות; 2) לעבור למדד-שלב;
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" } # собираем рекомендации
אשכול אוטוסקאלר (רעיונות דגל, קונספט):
--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 } }
תוצאות
לוח זמנים יעיל וסקאלה אוטומטית הם בקשות/גבולות נכונים + ערמות חכמות + ריבוי רמות (HPA/VPA/KEDA/CA) + חימום ואנטי-נפנוף, קשורות ל-SLO ועלות אלפית שנייה. תיקון מדיניות ב-IC, התבוננות במדדים ”נכונים” (latency/lag), שמירה על מלאי חם בפסגות - והפלטפורמה תהיה אלסטית, צפויה וחסכונית.