במסמך הזה מוסבר איך לאחזר מדדים מותאמים אישית ומדדים חיצוניים ולהשתמש בהם כדי להרחיב את ה-Pods באופן אופקי.
כדי לאחזר את המדדים, משתמשים במתאם מדדים מנוהל. הפתרון המנוהל הזה זמין למדדים ב-Cloud Monitoring שאפשר לשלוח עליהם שאילתות באמצעות PromQL, ולכל המדדים המותאמים אישית. מדדים מותאמים אישית הם מדדים שנחשפים על ידי Pods בנקודת קצה של HTTP, בפורמט Prometheus.
לחלופין, כדי להגדיר התאמה אוטומטית לעומס באמצעות מדד כלשהו, אפשר לאחזר את המדד על ידי הגדרה ידנית של מתאם מדדים לשליחת מדדים למידרוג אוטומטי. התהליך הזה כולל התקנה של מתאם צד שלישי, כמו Custom Metrics Adapter, והגדרת הרשאות. לדוגמה, אפשר לעיין במדריך בנושא אופטימיזציה של שינוי גודל אוטומטי של Pod על סמך מדדים.
אחזור מדדים
אפשר לאחזר מדדים בדרכים הבאות:
- אפשר לאחזר מדדים מותאמים אישית שמופקים על ידי Pods בתוך האשכול. אפשר להשתמש במדדים האלה להתאמה אוטומטית של נפח העבודה בלי צורך להעביר אותם דרך מערכת מעקב כמו Cloud Monitoring.
- אפשר לאחזר מדדי Pod שמאוחסנים ב-Cloud Monitoring באמצעות שאילתת PromQL. המדדים האלה מופקים על ידי Pods ומיוצאים אל Cloud Monitoring, בדרך כלל באמצעות השירות המנוהל של Google Cloud ל-Prometheus. בהשוואה לשיטה הקודמת, הגישה הזו מאפשרת להשתמש בתכונות של PromQL, כמו חישוב אחוזונים או קריאת ערכים היסטוריים.
- אפשר לאחזר מדדים חיצוניים מ-Cloud Monitoring באמצעות שאילתת PromQL.
- אפשר לאחזר מדדים על ידי הגדרה ידנית של מתאם מדדים לשליחת מדדים למנגנון לשינוי גודל אוטומטי. התהליך הזה כולל התקנה של כלים של צד שלישי והגדרת הרשאות. לדוגמה, אפשר לעיין במדריך בנושא אופטימיזציה של שינוי גודל אוטומטי של Pod על סמך מדדים.
אחרי שמביאים את המדד, מפנים אליו באובייקט HorizontalPodAutoscaler. מידע נוסף זמין בקטע שימוש במדדים ב-Horizontal Pod Autoscaler.
לסקירה כללית על שינוי גודל אוטומטי על סמך מדדים, אפשר לעיין במאמר מידע על שינוי גודל אוטומטי של עומסי עבודה על סמך מדדים.
אחזור מדדים מותאמים אישית בתוך האשכול
מדדים מותאמים אישית מגיעים מהשירות או מהאפליקציה שאתם מפעילים. דוגמה למדדים שמוצגים אפשר לראות במדדים שמוצגים על ידי vLLM Engine.
דרישות
הדרישות ל-Pods הן:
- GKE 1.35.1-gke.1396000 ואילך עם אשכולות בערוץ מהיר.
- משתמשים בהתאמה אופקית של קבוצות Pod לעומס עם פרופיל הביצועים.
הדרישות לגבי המדדים הן:
- צריך להיות אפשר לגשת למדדים בנקודת קצה (endpoint) של HTTP. נתיב נקודת הקצה הוא
/metricsכברירת מחדל. - הפורמט של המדדים חייב להיות בהתאם לתקן Prometheus.
- יש תמיכה רק במדדים מסוג מד.
- שמות התוויות בבוררי תוויות של Pod לא יכולים להכיל תווים מיוחדים. מותר להשתמש רק באותיות (קטנות או גדולות), במספרים, במקפים ובקווים תחתונים.
- כשמשתמשים בסינון שמבוסס על תוויות של מדדים, מפתח התווית צריך להתאים לביטוי הרגולרי
^[a-zA-Z_][a-zA-Z0-9_]*(מתחיל באות או בקו תחתון, ומכיל רק אותיות, מספרים או קווים תחתונים). - אפשר לחשוף עד 20 מדדים ייחודיים לכל אשכול.
הגדרת המדד
בוחרים מדד לחשיפה. אפשר לבחור כל מדד שמוצג בעומס העבודה, ושעומד בדרישות שמפורטות בקטע הקודם.
אם עומס העבודה חושף כמה מדדים עם אותו שם אבל עם תוויות שונות, מוסיפים מסנן תוויות כדי לוודא שרק מדד אחד נבחר.
מוסיפים את המשאב המותאם אישית הבא, ומחליפים את הפרטים שספציפיים למדד ול-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_NAME prometheusMetricName: METRIC_PROMETHEUS_NAMEמחליפים את הערכים הבאים בהתאם לעומס העבודה:
-
NAME: השם של אובייקט AutoscalingMetric. -
NAMESPACE: מרחב השמות שבו נמצאים ה-Pods. -
APP_LABEL_NAMEו-APP_LABEL_VALUE: שם התווית והערך שלה שתואמים ל-Pods שפולטים את המדד. -
METRIC_PORT: מספר היציאה. -
METRIC_PATH: הנתיב למדד. צריך לוודא שהנתיב שבו נעשה שימוש בשירות או באפליקציה הוא/metrics. -
METRIC_NAME: שם המדד שאתם חושפים. השם צריך להתאים לביטוי הרגולרי^[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.מאמתים את הגדרת המדד ומאחזרים את שם המדד לשימוש באובייקט HorizontalPodAutoscaler:
מריצים את הפקודה
kubectl describeעבור המשאב המותאם אישית AutoscalingMetric:kubectl describe autoscalingmetric NAME -n NAMESPACEמחליפים את מה שכתוב בשדות הבאים:
-
NAME: השם של אובייקט AutoscalingMetric. -
NAMESPACE: מרחב השמות של אובייקט AutoscalingMetric.
-
בודקים את השדה
Status. אם לא מופיעות שגיאות, האובייקט תקין.מעתיקים את השם בשדה
HPA Name. זה השם שמוסיפים לאובייקט HorizontalPodAutoscaler. השם הזה הוא בפורמט הבא:autoscaling.gke.io|NAME|METRIC_NAME.
המדד מוגדר עכשיו באובייקט AutoscalingMetric. כדי להשתמש במדד הזה לצורך שינוי אוטומטי של קנה המידה, צריך להפנות אליו באובייקט HorizontalPodAutoscaler. מידע נוסף זמין בקטע שימוש במדדים באובייקט HorizontalPodAutoscaler.
כשמוסיפים את המשאב המותאם אישית, המדד נדחף אל ה-API של שינוי גודל אוטומטי. המדד נקרא כל כמה שניות ונשלח למנגנון לשינוי גודל העומס.
אחזור מדדים מותאמים אישית או חיצוניים מ-Cloud Monitoring
אתם יכולים לאחזר מדדים מ-Cloud Monitoring כדי לשנות את גודל עומסי העבודה. GKE תומך באחזור של שני סוגים של מדדים מ-Cloud Monitoring:
- מדדים מותאמים אישית: אפשר להשתמש בסוג הזה כדי להחיל תכונות של PromQL, כמו חישוב אחוזונים או קריאת ערכים היסטוריים, על המדדים שמופקים מעומסי העבודה של האשכול.
- מדדים חיצוניים: משתמשים בסוג הזה כדי להרחיב את המידות על סמך ישות מחוץ לאשכול, כמו מספר ההודעות בהמתנה במינוי Pub/Sub.
אחרת, מאחזרים מדדים מותאמים אישית מהאשכול.
דרישות
- GKE בגרסה 1.36.2-gke.2771000 ואילך.
- צריך לאחסן את המדדים ב-Cloud Monitoring. לדוגמה, אפשר להשתמש בשירות המנוהל של Google Cloud ל-Prometheus.
- כל אשכול יכול להכיל עד 100 מדדים. המגבלה הזו היא סך כל המדדים המותאמים אישית והחיצוניים.
- המדדים ב-Cloud Monitoring צריכים להיות באותו Cloud de Confiance by S3NS פרויקט שבו נמצא האשכול שמתבצעת בו שינוי גודל אוטומטי.
הגדרת המדד
משתמשים בקובץ YAML כדי להגדיר את המדדים, כולל שאילתת PromQL ספציפית.
בוחרים אחת מההגדרות הבאות, בהתאם לסוג המדד שרוצים לאחזר: מדד מותאם אישית או מדד חיצוני:
יוצרים אובייקט AutoscalingMetric ומגדירים את המדד לאחזור.
מדד מותאם אישית (Pods)
apiVersion: autoscaling.gke.io/v1beta1 kind: AutoscalingMetric metadata: name: NAME namespace: NAMESPACE spec: metrics: - promql: name: METRIC_NAME query: PROMQL_QUERY type: Pods # Specifies that the metric is associated with Pods. # metricLabels are optional, default to the labels used by Google # Cloud Managed Service for Prometheus. The defaults are used # below. metricLabels: podName: "pod" namespace: "namespace" clusterName: "cluster" location: "location" projectId: "project_id"מחליפים את מה שכתוב בשדות הבאים:
-
NAME: השם של אובייקט AutoscalingMetric. -
NAMESPACE: מרחב השמות של האובייקט AutoscalingMetric, שצריך להיות זהה למרחב השמות של עומס העבודה שרוצים לשנות את קנה המידה שלו. -
METRIC_NAME: השם של המדד שבו משתמש אובייקט HorizontalPodAutoscaler. -
PROMQL_QUERY: שאילתת PromQL ששולפת את המדד. שאילתת PromQL צריכה להחזיר וקטור עם רשומה אחת לכל Pod במשאב שמשנה את גודלו באופן אוטומטי – לדוגמה, רשומה אחת לכל Pod ב-Deployment.
אפשר להגדיר יותר ממדד אחד במניפסט AutoscalingMetric יחיד על ידי הוספת עוד רשומות
promqlלמערךmetrics.במניפסט הזה, התנאים הבאים חלים:
- השדה
type: Podsמציין שהמדדים מופקים על ידי Pods. אופציונלי: השדות
metricLabelsהם שמות התוויות בתוצאת השאילתה של PromQL שמפרטת את פרטי המשאב (כמו שם ה-Pod, מרחב השמות או פרטי האשכול). המדד המותאם אישית שנפלט על ידי Pod חייב לכלול תווית שתואמת לשדהpodName, שמציינת לאיזה Pod המדד משויך. התווית הזו מוגדרת באופן אוטומטי כששולחים מדדים ל-Cloud Monitoring באמצעות השירות המנוהל של Google Cloud ל-Prometheus.אם השדות האלה לא מצוינים באובייקט AutoscalingMetric, המערכת משתמשת בערכי ברירת המחדל הבאים כדי למצוא את המידע בתווית. ערכי ברירת המחדל האלה הם אותם שמות של תוויות שמוגדרים על ידי השירות המנוהל של Google Cloud ל-Prometheus:
podName: "pod"namespace: "namespace"clusterName: "cluster"location: "location"projectId: "project_id"
מדד חיצוני
apiVersion: autoscaling.gke.io/v1beta1 kind: AutoscalingMetric metadata: name: NAME namespace: NAMESPACE spec: metrics: - promql: name: METRIC_NAME query: PROMQL_QUERY type: External # Optional, default is 'External'מחליפים את מה שכתוב בשדות הבאים:
-
NAME: השם של אובייקט AutoscalingMetric. -
NAMESPACE: מרחב השמות של האובייקט AutoscalingMetric, שצריך להיות זהה למרחב השמות של עומס העבודה שרוצים לשנות את קנה המידה שלו. -
METRIC_NAME: שם המדד שבו משתמש ה-HPA. -
PROMQL_QUERY: שאילתת PromQL ששולחת שאילתה למדד. שאילתת PromQL צריכה להחזיר ערך סקלרי או וקטור עם רשומה ייחודית.
-
בודקים את שאילתות PromQL ב-Cloud Monitoring כדי לוודא שהן מחזירות את המדדים הצפויים. קל יותר לאמת את השאילתות כשמגדירים אותן מאשר לפתור בעיות בהתנהגויות לא צפויות בשלב מאוחר יותר.
כדי לאמת את השאילתות, אפשר לעיין בקטע הבא: אימות שאילתות ב-PromQL.
מחילים את מניפסט ה-AutoscalingMetric על האשכול:
kubectl apply -f MANIFEST_FILE.yamlמחליפים את
MANIFEST_FILEבשם של קובץ ה-YAML.מאמתים את הגדרת המדד ומאחזרים את שם המדד לשימוש באובייקט HorizontalPodAutoscaler:
מריצים את הפקודה
kubectl describeעבור המשאב המותאם אישית AutoscalingMetric:kubectl describe autoscalingmetric NAME -n NAMESPACEמחליפים את מה שכתוב בשדות הבאים:
-
NAME: השם של אובייקט AutoscalingMetric. -
NAMESPACE: מרחב השמות של אובייקט AutoscalingMetric.
-
בודקים את השדה
Status. אם לא מופיעות שגיאות, האובייקט תקין.מעתיקים את השם בשדה
HPA Name. זה השם שמוסיפים לאובייקט HorizontalPodAutoscaler. השם הזה הוא בפורמט הבא:autoscaling.gke.io|NAME|METRIC_NAME.
המדד מוגדר עכשיו באובייקט AutoscalingMetric. כדי להשתמש במדד הזה לצורך שינוי אוטומטי של קנה המידה, צריך להפנות אליו באובייקט HorizontalPodAutoscaler. מידע נוסף זמין בקטע שימוש במדדים באובייקט HorizontalPodAutoscaler.
שימוש במדדים באובייקט HorizontalPodAutoscaler
יוצרים אובייקט HorizontalPodAutoscaler. סוג המדד של HorizontalPodAutoscaler צריך להיות זהה לערך של השדה
typeשמוגדר במשאב המותאם אישית AutoscalingMetric. בוחרים אחת מההגדרות הבאות בהתאם לסוג המדד:אפשרות 1: מדד חיצוני
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: HPA_NAME namespace: NAMESPACE spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: DEPLOYMENT_NAME minReplicas: MIN_REPLICAS maxReplicas: MAX_REPLICAS metrics: - type: External external: metric: name: autoscaling.gke.io|NAME|METRIC_NAME target: type: AverageValue averageValue: AVERAGE_VALUEאפשרות 2: מדד של תרמילים
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: HPA_NAME namespace: NAMESPACE spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: DEPLOYMENT_NAME minReplicas: MIN_REPLICAS maxReplicas: MAX_REPLICAS metrics: - type: Pods pods: metric: name: autoscaling.gke.io|NAME|METRIC_NAME target: type: AverageValue # This is the only supported target type averageValue: AVERAGE_VALUEמחליפים את מה שכתוב בשדות הבאים:
-
HPA_NAME: השם של אובייקט HorizontalPodAutoscaler. -
NAMESPACE: מרחב השמות של אובייקט HorizontalPodAutoscaler, שחייב להיות זהה למרחב השמות של עומס העבודה ושל משאב AutoscalingMetric. -
DEPLOYMENT_NAME: השם של פריסת עומס העבודה שרוצים לשנות את הגודל שלה. -
MIN_REPLICAS: המספר המינימלי של פודים פעילים. -
MAX_REPLICAS: המספר המקסימלי של פודים פעילים. -
NAME: השם של המשאב המותאם אישית AutoscalingMetric שיצרתם. -
METRIC_NAME: השם של המדד שמוגדר במשאב AutoscalingMetric. -
AVERAGE_VALUE: ערך היעד של המדד שבו משנה הכלי לשינוי גודל אוטומטי את גודל עומס העבודה.
כשיוצרים אובייקט HorizontalPodAutoscaler משלכם, חשוב לשים לב לנקודות הבאות:
- האובייקטים AutoscalingMetric, Deployment ו-HorizontalPodAutoscaler צריכים להיות באותו מרחב שמות.
- בדוגמה הקודמת השתמשנו בצמד מפתח/ערך
type: AverageValue. שימו לב:type: Valueנתמך גם במדדים חיצוניים. - בדוגמה שלמעלה נעשה שימוש באובייקט Deployment רק לצורך ההדגמה. אפשר גם להגדיר שינוי גודל אוטומטי לכל אובייקט שנתמך על ידי אובייקטים של HorizontalPodAutoscaler, כמו אובייקט ReplicaSet.
-
מחילים את המניפסט של HorizontalPodAutoscaler:
kubectl apply -f HPA_MANIFEST_FILE.yamlמחליפים את
HPA_MANIFEST_FILEבשם של קובץ ה-YAML.
פתרון בעיות במדדים שנשלפים לצורך התאמה אוטומטית לעומס
כדי לפתור בעיות בשליפת מדדים, אפשר לעיין ביומנים או בסטטוס של משאב מותאם אישית מסוג AutoscalingMetric.
למתאם המדדים להתאמה לעומס (autoscaling) יש אפס עותקים
כשבודקים את הפריסה של autoscaling-metrics-adapter ב-kube-system, יכול להיות שיופיעו אפס עותקים.
כברירת מחדל, המתאם פועל עם אפס עותקים כדי לחסוך במשאבי האשכול. זה תקין. הפריסה מתרחבת רק עד העתק אחד כשקיים באשכול משאב מותאם אישית של AutoscalingMetric שנדרש עיבוד PromQL.
אם הגדרתם אובייקט AutoscalingMetric עם שאילתת PromQL אבל המתאם לא התרחב, צריך לוודא שהאובייקט נוצר בהצלחה באשכול.
בדיקת היומנים
כדי למצוא בעיות בבקר שאחראי על קבלת מדדים מ-Cloud Monitoring, אפשר לעיין ביומנים שלו.
אפשר לצפות ביומנים במסוף Cloud de Confiance :
עוברים לדף Logs Explorer:
בחלונית השאילתה, מזינים את השאילתה הבאה:
resource.type="k8s_container" resource.labels.namespace_name="kube-system" resource.labels.container_name="autoscaling-metrics-adapter"
לחלופין, כדי להציג את היומנים באמצעות kubectl, מריצים את הפקודה הבאה:
kubectl logs deployment.apps/autoscaling-metrics-adapter -n kube-system
בדיקת הסטטוס של AutoscalingMetric
כדי לחפש שגיאות בהגדרות, אפשר לבדוק את הסטטוס של המשאב המותאם אישית AutoscalingMetric.
בודקים את המשאב המותאם אישית AutoscalingMetric:
kubectl describe autoscalingmetric NAME -n NAMESPACEמחליפים את מה שכתוב בשדות הבאים:
-
NAME: השם של המשאב המותאם אישית AutoscalingMetric שיצרתם. -
NAMESPACE: מרחב השמות של המשאב המותאם אישית.
-
פרטים על המדדים שהוגדרו מופיעים בשדה
Status. הפרטים האלה כוללים אזהרות לגבי שגיאות בהגדרות והשם המדויק של המדד כפי שהוא צריך להופיע באובייקט HorizontalPodAutoscaler.דוגמה לסטטוס תקין:
Name: sample-metric Namespace: default Labels: <none> Annotations: <none> API Version: autoscaling.gke.io/v1beta1 Kind: AutoscalingMetric Metadata: Creation Timestamp: 2026-08-10T14:41:58Z Generation: 1 Resource Version: 1786372918604351020 UID: c3f012a9-8f25-4399-ac91-12ae8f4426d7 Spec: Metrics: Promql: Name: pubsub_unacked Query: sum(pubsub_subscription_num_undelivered_messages) Type: External Status: Metric Statuses: Hpa Name: autoscaling.gke.io|sample-metric|pubsub_unacked Name: pubsub_unacked Events: <none>הדוגמה הבאה ממחישה סטטוס עם שגיאת הגדרה:
Name: bad-metric Namespace: default Labels: <none> Annotations: <none> API Version: autoscaling.gke.io/v1beta1 Kind: AutoscalingMetric Metadata: Creation Timestamp: 2026-08-10T14:42:40Z Generation: 1 Resource Version: 1786372960414079010 UID: a47d3ed4-f6f2-4c2c-9341-0de4e9752c3c Spec: Metrics: Promql: Name: duplicate_metric Query: sum(up) Type: External Promql: Name: duplicate_metric Query: avg(up) Type: External Status: Metric Statuses: Errors: Multiple metrics defined with the same name. Name: duplicate_metric Events: <none>
אימות של שאילתות PromQL
אם מאחזרים מדדים מ-Cloud Monitoring באמצעות שאילתת PromQL, בעיה בשאילתה עלולה לגרום לשגיאות באחזור המדד או לגרום לאחזור ערך לא צפוי. לדוגמה, אם אתם מצפים שאחוז יוחזר כערך מ-1 עד 100, אבל במקום זאת מקבלים ערך מ-0 עד 1, אז ההתנהגות של שינוי הגודל האוטומטי תהיה לא צפויה.
אפשר לבדוק את שאילתות PromQL ב-Cloud Monitoring כדי לוודא שהן מחזירות את המדדים הצפויים.
כדי לאמת את השאילתות:
נכנסים לדף Metrics explorer במסוף Cloud de Confiance .
בחלק העליון של החלונית Query builder, בוחרים בכרטיסייה PromQL.
בעורך השאילתות, מזינים את שאילתת PromQL שרוצים לבדוק.
לוחצים על Run Query כדי לראות את המדדים בתרשים.
המאמרים הבאים
- לסקירה כללית על שינוי גודל אוטומטי על סמך מדדים, אפשר לעיין במאמר מידע על שינוי גודל אוטומטי של עומסי עבודה על סמך מדדים.
- כדי להגדיר שינוי גודל אוטומטי באמצעות מדדים שלא ניתן להגדיר באמצעות שאילתת PromQL, אפשר לעיין במאמר אופטימיזציה של שינוי גודל אוטומטי של Pod על סמך מדדים.