אם התאמה אוטומטית אנכית של Pod לא פועלת כצפוי ב-Google Kubernetes Engine (GKE), יכול להיות שעומסי העבודה לא יותאמו כמו שצריך. הבעיות האלה יכולות למנוע מהאפליקציות לטפל בעומס, מה שעלול לגרום לבעיות בביצועים או להפסקות זמניות בשירות. יכול להיות שתראו המלצות חדשות לגבי משאבים שלא מביאות להפעלה מחדש של ה-Pods, או המלצות שלא תואמות לשימוש בפועל.
אפשר להשתמש במסמך הזה כדי לפתור בעיות נפוצות בהגדרות של VerticalPodAutoscaler או המלצות לא צפויות. השלבים האלה לפתרון בעיות יעזרו לכם להתאים את האפליקציות לעומס בצורה יעילה ואמינה בהתאם לביקוש.
המידע הזה חשוב למפתחי אפליקציות שמגדירים משאבי VerticalPodAutoscaler וצריכים לוודא שהאפליקציות שלהם משתנות בהתאם לעומס בצורה נכונה. הכלי גם עוזר לאדמינים ולמפעילים של הפלטפורמה לפתור בעיות בהגדרת האשכול שמשפיעות על עומסי עבודה שמתבצעת בהם התאמה אוטומטית של קנה המידה. מידע נוסף על התפקידים הנפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Google Cloud , זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.
אבחון בעיות ב-VerticalPodAutoscaler
כדי לאבחן בעיות ב-VerticalPodAutoscaler, בודקים את הסטטוס וההגדרות באמצעות kubectl או המסוף Google Cloud .
תארו את VerticalPodAutoscaler
כדי לראות את החישובים בזמן אמת ואת ההחלטות האחרונות לגבי שינוי הגודל, משתמשים בפקודה kubectl describe vpa:
kubectl describe vpa VPA_NAME -n NAMESPACE_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
VPA_NAME: השם של VerticalPodAutoscaler. -
NAMESPACE_NAME: מרחב השמות של VerticalPodAutoscaler.
הפלט אמור להיראות כך:
Name: sample-deployment-vpa
Namespace: default
API Version: autoscaling.k8s.io/v1
Kind: VerticalPodAutoscaler
# Multiple lines are omitted here
Spec:
Target Ref:
API Version: apps/v1
Kind: Deployment
Name: sample-deployment
Update Policy:
Update Mode: Auto
Status:
Conditions:
Last Transition Time: 2025-10-09T10:00:00Z
Message: VPA is fetching history in order to provide recommendation
Reason: FetchingHistory
Status: True
Type: FetchingHistory
Last Transition Time: 2025-10-09T10:05:00Z
Message: VPA pod metrics aren't available yet
Reason: NoMetrics
Status: True
Type: LowConfidence
Last Transition Time: 2025-10-09T10:10:00Z
Message: VPA is able to provide a recommendation
Reason: RecommendationProvided
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: sample-container
Lower Bound:
Cpu: 100m
Memory: 128Mi
Target:
Cpu: 200m
Memory: 256Mi
Upper Bound:
Cpu: 500m
Memory: 512Mi
Events: <none>
בפלט, בודקים את הקטעים העיקריים האלה:
-
Spec: הצגת פרטי ההגדרה, כולל השדהtargetRef(עומס העבודה המטורגט) והשדהupdatePolicy(אופן החלת העדכונים). -
Status: מוצג הקטעConditions(תקינות תפעולית) והקטעRecommendation(ערכי משאבי המעבד והזיכרון שנוצרו לכל מאגר). -
Events: רשימה של פעולות או שגיאות שקרו לאחרונה שקשורות לאובייקט VerticalPodAutoscaler.
הצגת קובץ המניפסט של VerticalPodAutoscaler
כדי לראות את ההגדרה המלאה ואת המצב של VerticalPodAutoscaler, בודקים את מניפסט ה-YAML שלו באמצעות kubectl או מסוף Google Cloud :
המסוף
נכנסים לדף Object Browser במסוף Google Cloud .
לוחצים על רשימת המסננים סוג האובייקט.
מבטלים את הסימון של כל האפשרויות הקיימות.
בוחרים באפשרות VerticalPodAutoscaler ולוחצים על OK.
ברשימה המסוננת, בוחרים את קבוצת ה-API autoscaling.k8s.io.
בוחרים את סוג האובייקט VerticalPodAutoscaler.
לוחצים על השם של VerticalPodAutoscaler שרוצים לבדוק.
kubectl
kubectl get vpa VPA_NAME \
-n NAMESPACE_NAME \
-o yaml
מחליפים את מה שכתוב בשדות הבאים:
-
VPA_NAME: השם של VerticalPodAutoscaler. -
NAMESPACE_NAME: מרחב השמות של VerticalPodAutoscaler.
בדיקת הסטטוס של VerticalPodAutoscaler ב Google Cloud מסוף
כדי לבדוק את הסטטוס של VerticalPodAutoscaler עבור עומסי העבודה במסוף Google Cloud :
עוברים לדף Workloads.
לוחצים על השם של עומס העבודה.
עוברים לכרטיסייה פרטים ומאתרים את הקטע שינוי גודל אוטומטי.
בודקים את השורה Vertical Pod Autoscaler כדי לראות הודעות סטטוס לגבי איסוף מדדים ותקינות ההגדרה.
איסוף יומני החלטות
כדי לקבל תובנות מפורטות לגבי החישובים וההחלטות של VerticalPodAutoscaler, צריך להפעיל את יומני ההחלטות של Vertical Pod Autoscaler (גרסת Preview) ב-Cloud Logging.
ביומנים האלה מתועדים אירועים כמו UPDATE_RECOMMENDATION, EVICT_POD, APPLY_RECOMMENDATION_IN_PLACE ו-APPLY_RECOMMENDATION_ON_EVICTION.
כדי להפעיל את יומני ההחלטות ולבדוק אותם, אפשר לעיין במאמר בנושא איסוף יומני אירועים של מידרוג אוטומטי אנכי של Pod.
פתרון בעיות בהמלצות של VerticalPodAutoscaler
בקטעים הבאים מפורטות בעיות שבהן הכלי VerticalPodAutoscaler לא מצליח להפיק המלצות או שהוא מפיק המלצות ששונות מהציפיות.
מערכת VerticalPodAutoscaler לא מספקת המלצות
תסמינים:
- השדה
Status.Recommendationבמניפסט של VerticalPodAutoscaler ריק. - התנאים במניפסט של VerticalPodAutoscaler מציגים את תנאי הסטטוס
NoPodsMatched,FetchingHistoryאוLowConfidence.
הסיבה:
- יעד שגוי: השדה
spec.targetRefבמניפסט של VerticalPodAutoscaler לא מצביע על עומס עבודה קיים באותו מרחב שמות. - איסוף ראשוני של מדדים: הרכיב VerticalPodAutoscaler נוצר לאחרונה ועדיין אוסף נתוני שימוש היסטוריים במשאבים.
- בעיות ברכיב
metrics-server: הרכיב VerticalPodAutoscaler מסתמך על מדדים מהרכיבmetrics-server. אם הרכיבmetrics-serverלא פועל בצורה תקינה, אי אפשר לאחזר נתוני שימוש באמצעות VerticalPodAutoscaler. - אין פודים פעילים: לעומס העבודה של היעד אין פודים פעילים או מוכנים שהכלי VerticalPodAutoscaler יכול לעקוב אחריהם.
הפתרון:
בודקים את השדה
targetRef: בודקים את הערכים בשדותkind,nameו-apiVersionבקטעspec.targetRef. מוודאים שכל הערכים תואמים לעומס העבודה של היעד. כדי לוודא שעומס העבודה קיים, מריצים את הפקודה:kubectl get KIND WORKLOAD_NAME \ -n NAMESPACE_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
KIND: סוג עומס העבודה, לדוגמה,deploymentאוstatefulset. -
WORKLOAD_NAME: השם של עומס העבודה. -
NAMESPACE_NAME: מרחב השמות של עומס העבודה.
-
המתנה לאיסוף נתונים של מדדים: נדרש זמן לאיסוף נתונים של משאבי VerticalPodAutoscaler חדשים. עוקבים אחרי השדה
Status.Conditionsכדי לראות מתי הוא משתנה לסטטוסRecommendationProvided.בודקים את הרכיב
metrics-server:מוודאים שרכיב ה-Pod של
metrics-serverפועל:kubectl get pods -n kube-system | grep metrics-serverאם ה-Pod לא פועל או שיש לו מספר גבוה של הפעלות מחדש, כדאי לבדוק את היומנים שלו:
kubectl logs -n kube-system -l k8s-app=metrics-serverרשומות ביומן שכוללות מילים כמו
error,failedאוunable to fetchמצביעות על בעיות באיסוף מדדים.
מוודאים שפועלים פודים: מוודאים שלעומס העבודה של היעד יש לפחות פוד אחד שפועל ומוכן.
ההמלצות של VerticalPodAutoscaler לא צפויות
תסמינים:
- הערכים של ה-CPU או הזיכרון בקטע
Status.Recommendationגבוהים או נמוכים מהצפוי. - ההמלצות לא תואמות לצריכת המשאבים של עומס העבודה שנצפתה.
הסיבה:
- שינויים בהתנהגות של עומס העבודה: ההמלצות של VerticalPodAutoscaler מבוססות על היסטוריית השימוש. יכול להיות ששינויים שחלו לאחרונה בדפוסי הצריכה של האפליקציות עדיין לא יופיעו.
- מאפייני עומס העבודה: יכול להיות שלא תקבלו המלצות אופטימליות לגבי עבודות לזמן קצר או עומסי עבודה עם דפוסי שימוש לא סדירים.
- משאבי VerticalPodAutoscaler שמתנגשים זה בזה: יכול להיות שמוגדרים כמה משאבי VerticalPodAutoscaler שמטרגטים את אותו עומס עבודה.
הפתרון:
- מאפשרים זמן להתאמה: נותנים ל-VerticalPodAutoscaler זמן ללמוד דפוסי שימוש חדשים אחרי שינויים באפליקציה.
- הערכת ההתאמה: בודקים אם כדאי להשתמש ב-VerticalPodAutoscaler או ב-Horizontal Pod Autoscaler לסוג עומס העבודה.
בדיקה אם יש משאבי VerticalPodAutoscaler שמתנגשים:
כדי להציג רשימה של כל משאבי VerticalPodAutoscaler באשכול:
kubectl get vpa --all-namespacesבודקים את השדה
spec.targetRefשל כל משאב. אם כמה משאבי VerticalPodAutoscaler מטרגטים את אותו עומס העבודה, צריך להסיר או לשנות את המשאבים שיוצרים את הקונפליקט, כך שרק משאב VerticalPodAutoscaler אחד יטרגט עומס עבודה נתון.
פתרון בעיות בעדכונים של משאבי Pod
בקטעים הבאים מוסבר איך לפתור בעיות שבהן יש המלצות אבל הן לא מיושמות על יחידות Pods של יעד.
בקשות למשאבי Pod לא מתעדכנות
תסמינים:
- המניפסט של VerticalPodAutoscaler מציג המלצות בקטע
Status, אבל השדהresources.requestsבמניפסט של ה-Pod לא מתעדכן. - כשמשתמשים במצב העדכון
AutoאוRecreate, הפודים לא מופעלים מחדש כדי להחיל את ההמלצות.
הסיבה:
- השדה
updateModeהואOff: כשהשדהspec.updatePolicy.updateModeמוגדר כ-Off, הכלי VerticalPodAutoscaler יוצר המלצות אבל לא מיישם אותן. - ל-Workload יש רק עותק אחד: במצב עדכון
AutoאוRecreate, VerticalPodAutoscaler לא מפנה עומסי עבודה עם עותק אחד כדי למנוע השבתה.
הפתרון:
- בודקים את השדה
updateMode: משנים את מניפסט VerticalPodAutoscaler כדי להגדיר את השדהspec.updatePolicy.updateModeלערךAuto, RecreateאוInPlaceOrRecreate. - הגדלת מספר הרפליקות: בעומסי עבודה שמשתמשים במצב עדכון
AutoאוRecreate, מוודאים של-Deployment או ל-StatefulSet יש יותר מרפליקה אחת.
עדכונים במקום נכשלים או נדחים
תסמינים:
- השלמת השינוי של גודל מאגר התגים במקום נכשלת או נדחית.
הסיבה:
- קיבולת לא מספקת של הצומת: אם אין לצומת קיבולת לבקשות המשאבים המעודכנות, פעולת השינוי של הגודל במקום נדחית.
הפתרון:
בדיקת הסטטוס של שינוי הגודל שנדחה והקיבולת של הצומת:
אם שינוי הגודל נדחה ליותר מחמש דקות, VerticalPodAutoscaler חוזר לחלופה של הוצאת ה-Pod ויצירה מחדש שלו כדי להחיל את ההמלצה. כדי לבדוק את הסטטוס של העדכון שנדחה:
בודקים את ההערות של ה-Pod כדי לראות אם ההערה
vpaInPlaceUpdatedמוגדרת ל-"true":metadata: annotations: vpaInPlaceUpdated: "true" vpaUpdates: 'Pod resources updated by sample-deployment-vpa: container 0: cpu request, memory request'כדי לבדוק את הסטטוס של הדחייה, בודקים את השדה
status.conditionsשל אירועי שינוי הגודל שנדחו:status: conditions: - type: PodResizePending status: "True" reason: Deferred message: "Node didn't have enough resource: ..."בודקים את אירועי Kubernetes של ה-Pod:
kubectl get events -n NAMESPACE_NAME --field-selector involvedObject.kind=Pod,involvedObject.name=POD_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
NAMESPACE_NAME: מרחב השמות של ה-Pod. -
POD_NAME: השם של ה-Pod.
מחפשים אירועים עם אחת מהסיבות הבאות:
ResizedPod(עדכון מוצלח במקום) אוEvictedByVPA(חזרה ל יצירה מחדש).-
המאמרים הבאים
אם לא מצאתם פתרון לבעיה שלכם במסמכים, תוכלו לקבל עזרה נוספת במאמר בנושא קבלת תמיכה, כולל עצות בנושאים הבאים:
- פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care.
- קבלת תמיכה מהקהילה על ידי פרסום שאלות ב-StackOverflow ושימוש בתג
google-kubernetes-engineכדי לחפש בעיות דומות. אפשר גם להצטרף לערוץ Slack#kubernetes-engineכדי לקבל תמיכה נוספת מהקהילה. - פתיחת דיווחים על בעיות או בקשות להוספת תכונות באמצעות הכלי הציבורי למעקב אחר בעיות.