במאמר הזה מוסבר איך לשלוח מדד אחד או יותר מ-Pod או מעומס עבודה אל הכלי לשינוי גודל אוטומטי.
המדדים האלה מגיעים מהשירות או מהאפליקציה שאתם מפעילים. דוגמה למדדים שמוצגים אפשר לראות במאמר מדדים שמוצגים על ידי vLLM Engine.
לאחר מכן, הכלי לשינוי גודל אוטומטי של עומסי עבודה יכול להשתמש בנתונים האלה כדי לשנות את גודל עומסי העבודה בצורה יעילה יותר. לדוגמה, אפשר להשתמש בתכונה הזו כדי לעקוב אחרי עומק התור או בקשות פעילות, ואז לאפשר למנגנון לשינוי גודל אוטומטי להגדיל או להקטין את מספר ה-Pods.
מדוגמת vLLM, מדד שיכול להיות שימושי למעקב אחר השימוש הוא vllm:gpu_cache_usage_perc.
דרישות
הדרישות ל-Pods הן:
- GKE 1.35.1-gke.1396000 ואילך עם אשכולות בערוץ מהיר.
- שימוש בהתאמה אופקית של קבוצות Pod לעומס עם פרופיל הביצועים.
אלה הדרישות לגבי המדדים:
- צריך להיות אפשר לגשת למדדים בנקודת קצה (endpoint) של HTTP. נתיב נקודת הקצה הוא
/metricsכברירת מחדל. - הפורמט של המדדים חייב להיות בהתאם לתקן Prometheus.
- יש תמיכה רק במדדים מסוג מד.
- שמות התוויות בבוררי תוויות של Pod לא יכולים להכיל תווים מיוחדים. מותר להשתמש רק באותיות (קטנות או גדולות), במספרים, במקף ובקו תחתון.
- כשמשתמשים בסינון על סמך תוויות של מדדים, מפתח התווית צריך להתאים לביטוי הרגולרי
^[a-zA-Z_][a-zA-Z0-9_]*(מתחיל באות או בקו תחתון, ומכיל רק אותיות, מספרים או קווים תחתונים). - אפשר לחשוף עד 20 מדדים ייחודיים לכל אשכול.
חשיפת מדדים להתאמה לעומס (autoscaling)
בוחרים מדד לחשיפה. אפשר לבחור כל מדד שמוצג בעומס העבודה, ושעומד בדרישות שמפורטות בקטע הקודם.
אם עומס העבודה חושף כמה מדדים עם אותו שם אבל עם תוויות שונות, מוסיפים מסנן תוויות כדי לוודא שרק אחד מהם נבחר.
מוסיפים את המשאב המותאם אישית הבא, ומחליפים את הפרטים שספציפיים למדד ול-Pod שלכם:
apiVersion: autoscaling.gke.io/v1beta1 kind: AutoscalingMetric metadata: name: NAME namespace: NAMESPACE spec: metrics: - pod: selector: matchLabels: APP_LABEL_NAME: APP_LABEL_VALUE containers: - endpoint: port: METRIC_PORT path: METRIC_PATH metrics: - gauge: name: METRIC prometheusMetricName: METRIC_PROMETHEUS_NAMEמחליפים את הערכים הבאים בהתאם לעומס העבודה:
-
NAME: השם של אובייקט AutoscalingMetric. -
NAMESPACE: מרחב השמות שבו נמצאים ה-Pods. -
APP_LABEL_NAMEו-APP_LABEL_VALUE: שם התווית והערך שלה שתואמים ל-Pods שפולטים את המדד. -
METRIC_PORT: מספר היציאה. -
METRIC_PATH: הנתיב למדד. צריך לאמת את הנתיב שבו נעשה שימוש בשירות או באפליקציה. הנתיב הזה הוא לרוב/metrics. -
METRIC: שם המדד שאתם חושפים. השם צריך להתאים לביטוי הרגולרי^[a-z]([-a-z0-9]*[a-z0-9])?, והאורך שלו לא יכול להיות יותר מ-63 תווים. כלומר, התו הראשון חייב להיות אות קטנה, וכל התווים הבאים חייבים להיות מקפים, אותיות קטנות או ספרות, למעט התו האחרון, שלא יכול להיות מקף. אופציונלי:
METRIC_PROMETHEUS_NAME: שם המדד של Prometheus כפי שהוא מוצג על ידי ה-Pod. אפשר להשתמש בשדה הזה כדי לשנות את השם של המדד, למשל כי השם של המדד שנחשף על ידי ה-Pod לא עומד בהגבלות על השמות שהוגדרו על ידי קנה המידה האוטומטי.פרטים על הגבלות השמות מופיעים בקטע מגבלות בנושא התאמה אופקית של קבוצות Pod לעומס.
-
מחילים את המניפסט באמצעות הפקודה הבאה:
kubectl apply -f FILE_NAME_AUTOSCALING_METRIC.yamlמחליפים את
FILE_NAME_AUTOSCALING_METRICבשם של קובץ ה-YAML.אחרי שמוסיפים את המשאב בהתאמה אישית, המדד מועבר אל ה-API של שינוי גודל אוטומטי. המדד נקרא כל כמה שניות ונשלח למנגנון לשינוי גודל העומס.
אחרי שחשפתם את המדדים למנגנון לשינוי גודל אוטומטי, אתם יכולים להגדיר את המנגנון לשינוי גודל אוטומטי של עומס העבודה כך שישתמש במדדים האלה. כדי לעשות זאת, מוסיפים את המשאב המותאם אישית הבא:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: NAME_HPA namespace: NAMESPACE spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: DEPLOYMENT minReplicas: MIN_REPLICAS maxReplicas: MAX_REPLICAS metrics: - type: Pods pods: metric: name: autoscaling.gke.io|NAME|METRIC target: type: AverageValue averageValue: AVERAGE_VALUEמחליפים את הערכים הבאים בהתאם לעומס העבודה:
-
NAME_HPA: השם של אובייקטHorizontalPodAutoscaler. -
NAMESPACE: מרחב השמות שבו נמצאים ה-Pods. -
DEPLOYMENT: השם של הפריסה שאתם רוצים לטרגט. -
MIN_REPLICAS: מספר העותקים המינימלי שאליו אפשר לשנות את גודל הפריסה. -
MAX_REPLICAS: המספר המקסימלי של העותקים שהפריסה יכולה להתרחב אליהם. -
NAME: השם של אובייקט AutoscalingMetric. -
METRIC: שם המדד שאתם חושפים. AVERAGE_VALUE: ערך היעד הממוצע של המדד. הכלי להתאמת קנה מידה אוטומטית משנה את מספר הרפליקות כדי לשמור על ערך מדד ממוצע בכל ה-Pods.
-
מחילים את המניפסט באמצעות הפקודה הבאה:
kubectl apply -f FILE_NAME_HPA.yamlמחליפים את
FILE_NAME_HPAבשם של קובץ ה-YAML.
סינון מדדים באמצעות תוויות מדדים
אפשר לסנן מדדים באמצעות תוויות מדדים ב-GKE מגרסה 1.36.0-gke.1759000 ואילך.
בדרך כלל המדדים כוללים תוויות. תוויות הן צמדי מפתח/ערך שמאפשרים להוסיף מאפיינים לערך. לדוגמה, מדד שסופר את מספר הבקשות לנקודת קצה של HTTP, לפי שיטה וסביבה, יכול להשתמש בתוויות כדי לציין את ההקשר הזה. דוגמה:
http_requests_total{method="GET", env="prod"} 11111
http_requests_total{method="PUT", env="staging"} 22222
אתם יכולים להשתמש במסנני תוויות כדי לוודא שהגדרת המדד תואמת בדיוק למדד אחד. לדוגמה, כדי לבחור רק את המדד הראשון בדוגמה הקודמת, משתמשים במפרט הבא למדד AutoscalingMetric gauge:
apiVersion: autoscaling.gke.io/v1beta1
kind: AutoscalingMetric
metadata:
name: filter-sample
spec:
# Several lines are omitted here.
metrics:
- gauge:
name: http_requests_total
filter:
matchLabels:
method: GET
env: prod
המפתחות של זוגות הערכים והמפתחות matchLabels צריכים להתאים לביטוי הרגולרי ^[a-zA-Z_][a-zA-Z0-9_]*, כלומר להתחיל באות או בקו תחתון ולהכיל רק אותיות, מספרים או קווים תחתונים.
פתרון בעיות במדדים שמוצגים להתאמה לעומס
אפשר לבדוק את הסטטוס של המשאב המותאם אישית AutoscalingMetric כדי לחפש שגיאות בהגדרות. כדי לעשות את זה:
מריצים את הפקודה הבאה כדי לבדוק את המשאב המותאם אישית AutoscalingMetric:
kubectl describe autoscalingmetric NAME -n NAMESPACEהשדה
Statusמכיל מידע על מדדים שהוגדרו, כמו אזהרות לגבי שגיאות בהגדרה והשם המדויק של המדד כפי שהוא אמור להופיע באובייקטHorizontalPodAutoscaler.
המאמרים הבאים
- פרטים נוספים על התאמה אוטומטית לעומס של עומסי עבודה על סמך מדדים זמינים במאמר מידע על התאמה אוטומטית לעומס של עומסי עבודה על סמך מדדים.
- התאמה אופקית של קבוצות Pod לעומס
- פרטים נוספים על פתרון בעיות בהרחבה אוטומטית אופקית זמינים במאמר בנושא פתרון בעיות בהרחבה אוטומטית אופקית של Pod.