בדף הזה מפורט מידע על אירועי החלטה שמופקים על ידי Horizontal Pod Autoscaler ב-Google Kubernetes Engine (GKE). ניתוח האירועים האלה מאפשר לכם לקבל תובנות לגבי האופן שבו בקר ה-Horizontal Pod Autoscaler מנהל את שינוי הגודל של עומס העבודה, ולהבין את תהליך קבלת ההחלטות שמאחורי הפעולות שלו.
הכלי Horizontal Pod Autoscaler פולט אירועים של החלטות, שנשמרים כרשומות ביומן ב-Cloud Logging.
לפני שמתחילים
חשוב לוודא שאתם עומדים בדרישות המוקדמות הבאות:
יצירת פרויקט חדש או בחירה בפרויקט קיים
אתם יכולים להשתמש בפרויקט קיים או ליצור פרויקט חדש לצורך המדריך הזה.
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
הפעלת ממשקי ה-API
מפעילים את ממשקי ה-API של GKE ו-Cloud Logging.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים
הגדרת Cloud Shell
במדריך הזה תשתמשו ב-Cloud Shell כדי להריץ פקודות של gcloud ושל kubectl. Cloud Shell היא סביבת מעטפת לניהול משאבים שמתארחים ב- Google Cloud. הוא מגיע עם Google Cloud CLI ועם כלי שורת הפקודה kubectl שמותקנים מראש.
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של המסוף ייפתח סשן של Cloud Shell בתוך מסגרת.
לפני שמריצים פקודות במדריך הזה, מוודאים שפרויקט ברירת המחדל מוגדר למזהה הפרויקט שבו רוצים לפרוס את האפליקציה לדוגמה. אם הוא עדיין לא מוגדר, מריצים את הפקודה הבאה ב-Cloud Shell:
gcloud config set project PROJECT_ID
מחליפים את PROJECT_ID במזהה הפרויקט.
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שדרושות בשביל להפעיל את יצירת היומנים, ולגשת ליומנים ולעבד אותם, אתם צריכים לבקש מהאדמין לתת לכם את תפקידי ה-IAM הבאים בפרויקט:
-
כדי להפעיל רישום של אירועים ב-Horizontal Pod Autoscaler באשכול:
אדמין של אשכול Kubernetes Engine (
roles/container.clusterAdmin) -
כדי לגשת ליומנים ולהשתמש ב-Logs Explorer וב-Observability Analytics:
Logs Viewer (
roles/logging.viewer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
דרישות
- באשכול GKE צריכה לפעול גרסה
1.31.5-gke.1090000ומעלה או גרסה1.32.1-gke.1260000ומעלה. - מפעילים את Cloud Logging באשכול GKE. התמחור של Cloud Logging חל.
הפעלת אירועי החלטה של Horizontal Pod Autoscaler
חשוב להפעיל גם את הרכיב של יומני המערכת.כדי ליצור אשכול חדש עם יומני ההחלטות KCP_HPA מופעלים, מריצים את הפקודה הבאה:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
כדי להפעיל את KCP_HPA יומני ההחלטות באשכול קיים, מריצים את הפקודה הבאה:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שרוצים ליצור או לעדכן. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
LOCATION: אזורי Compute או אזורים של האשכול.
הפקודות האלה מאפשרות לייצא את היומנים שנוצרו על ידי KCP_HPA ולשמור אותם ביעד logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" ב-Cloud Logging.
מאחזרים את הגדרות הרישום ביומן המעודכנות של האשכול ובודקים את רשימת היומנים כדי לוודא שהיומן KCP_HPA מופעל:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
הפלט אמור להיראות כך:
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_HPA
צפייה ביומנים של Horizontal Pod Autoscaler במסוף Google Cloud
אפשר לעקוב אחרי ההתנהגות של Horizontal Pod Autoscaler בGoogle Cloud מסוףGoogle Cloud . התצוגה הזו מאפשרת לראות בקלות את אותם יומנים של המלצות אטומיות וסופיות שזמינים ב-Cloud Logging, בלי לצאת מההקשר של עומס העבודה.
כדי לראות את היומנים של Horizontal Pod Autoscaler במסוף Google Cloud :
במסוף Google Cloud , עוברים לדף Workloads:
בוחרים את עומס העבודה שמנוהל על ידי Horizontal Pod Autoscaler.
לוחצים על הכרטיסייה התאמה.
בכרטיסייה הזו אפשר למצוא מידע שקשור להרחבת הפעילות, כולל שימוש במשאבים, נתוני יעילות ויומנים. הנתונים בכרטיסייה הזו יכולים לעזור לכם לזהות את ההגדרה היעילה ביותר להתאמה אוטומטית לעומס של עומסי העבודה. בקטע Logs אפשר למצוא את אותו מידע מLogs ולסנן את היומנים האלה לפי סוג, כולל Event, Final recommendation ו-Atomic recommendation. פרטים נוספים על היומנים השונים זמינים במאמר סוגי יומנים.
השבתה של אירועי החלטה של Horizontal Pod Autoscaler
מעדכנים את האשכול כדי להסיר את הרכיב KCP_HPA מהדגל --logging:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שרוצים ליצור או לעדכן. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
LOCATION: אזורי Compute או אזורים של האשכול.
הפקודה הזו משביתה את הייצוא של היומנים שנוצרו על ידי KCP_HPA. אי אפשר לאחזר אותם באמצעות המסנן logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" ב-Cloud Logging.
מאחזרים את הגדרת הרישום המעודכנת של האשכול ובודקים את רשימת היומנים כדי לוודא שהיומן KCP_HPA מושבת:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
הפלט אמור להיראות כך:
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER
סוגי יומנים
אירועי ההחלטה של Horizontal Pod Autoscaler מאוחסנים ב-Cloud Logging, במיקום logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" שנמצא בדלי _Default באותו פרויקט שבו נמצא אשכול GKE.
כל האירועים שמתועדים הם בפורמט JSON ואפשר למצוא אותם בשדה jsonPayload של רשומה ביומן.
חשוב להבין את צורכי האחסון של נפחי היומן הפוטנציאליים, בנוסף לכל השלכות הביצועים או העלויות. בדוגמאות הבאות מוסבר באיזו תדירות הכלי Horizontal Pod Autoscaler (HPA) יוצר כל סוג של אירוע החלטה:
המלצה אטומית: Horizontal Pod Autoscaler יוצר אירוע המלצה אטומי אחד כל 15 שניות לכל מדד שנמצא במעקב על ידי כל אובייקט HPA באשכול. לדוגמה, אם יש לכם שני אובייקטים של HPA באשכול, וכל אובייקט של HPA עוקב אחרי שלושה מדדים, אז כל 15 שניות יתועדו שש המלצות אטומיות.
המלצה סופית: הכלי Horizontal Pod Autoscaler יוצר אירוע המלצה סופית כל 15 שניות לכל אובייקט HPA באשכול. לדוגמה, אם יש לכם שני אובייקטים של HPA באשכול, שתי המלצות סופיות יתועדו כל 15 שניות.
בסך הכול, עם שני אובייקטים של HPA שכל אחד מהם עוקב אחרי שלושה מדדים, יומן KCP_HPA יקבל שמונה רשומות של אירועי החלטה כל 15 שניות.
המלצה אטומית
יומן המלצות אטומי מתאר המלצה שמבוססת על מדד ספציפי שמוגדר ב-Horizontal Pod Autoscaler.
יומן אטומי כולל את השדות הבאים:
| שדה | תיאור |
|---|---|
start_time |
מציין מתי התחיל ה-HPA לחשב המלצה. |
hpa |
השם של אובייקט ה-HPA שמשויך להמלצה. |
pod_count |
מציין את המספר הכולל של ה-Pods שמשויכים ל-HPA כשנוצרת ההמלצה. המספר הזה כולל גם פודים מוכנים, לא מוכנים ומוזנחים. |
metric |
מידע על המפרט והסטטוס של המדד שמשמש להמלצה. השדה metric מכיל את שדות המשנה הבאים:
|
summary |
שדה הסיכום מכיל מידע לגבי תוצאת ההמלצה, כולל מספר העותקים המוצע. אם לא ניתן להציע המלצה, תוצג הודעת שגיאה. השדה summary מכיל את שדות המשנה הבאים:
|
דוגמה ליומן המלצות אטומיות:
{
"insertId": "xiu4bty9k5b279wu",
"jsonPayload": {
"instance": {
"vm_name": "my-unique-vm-identifier",
"zone": "us-central1-a"
},
"atomicRecommendation": {
"startTime": "2025-02-06T20:07:00.573419526Z",
"hpa": "gke-managed-cim/kube-state-metrics",
"metric": {
"newestSampleAgeSeconds": -39.573419526,
"status": {
"averageValue": "25849856"
},
"newestSampleTime": "2025-02-06T20:06:21Z",
"type": "Resource",
"spec": {
"target": {
"averageValue": "400Mi"
},
"name": "memory"
}
},
"podCount": {
"ready": 1,
"total": 1
},
"summary": {
"override": "none",
"replicas": 1,
"dampening": "none"
}
}
},
"resource": {
"type": "k8s_control_plane_component",
"labels": {
"project_id": "my-project-id",
"cluster_name": "my-cluster",
"location": "us-central1-a",
"component_location": "us-central1-a",
"component_name": "hpa-controller"
}
},
"timestamp": "2025-02-06T20:07:00.593777835Z",
"severity": "INFO",
"labels": {
"compute.googleapis.com/resource_name": "my-unique-vm-identifier"
},
"logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
"sourceLocation": {
"file": "event_logger.go",
"line": "61"
},
"receiveTimestamp": "2025-02-06T20:07:05.284753647Z"
}
ההמלצה הסופית
יומן ההמלצות הסופי מתאר המלצה מאוחדת שהוצעה על ידי Horizontal Pod Autoscaler. הכלי Horizontal Pod Autoscaler משלב את כל ההמלצות האטומריות ממדדים שונים כדי ליצור המלצה סופית, ומיישם את ההמלצות הסופיות. הפעלה פירושה שה-HPA מורה לפריסה להתאים את מספר הרפליקות כך שיתאים לערך המומלץ. אם ההמלצה הסופית היא להשתמש במספר אחר של Pods לעומת מספר ה-Pods הפועלים, המערכת Horizontal Pod Autoscaler מפעילה אירוע של הגדלה או הקטנה כדי להתאים את הפריסה בהתאם.
יומן ההמלצות הסופי כולל את השדות הבאים:
| שדה | תיאור |
|---|---|
start_time |
מציין מתי התחיל ה-HPA לחשב המלצה. |
hpa |
השם של אובייקט ה-HPA שמשויך להמלצה. |
target_ref |
מציין את אובייקט ScaleTargetRef של HPA שמשויך להמלצה. |
configured_size |
מספר הרפליקות האחרון שנרשם לפני ש-HPA מחשב ומחיל את ההמלצה הזו. |
top_level_override |
מספק סיבה אם ההמלצה שהוצעה על ידי HPA לא מיושמת (לדוגמה, בגלל סבילות); או none אם לא מתבצעת החלפה. |
top_level_limit |
מספק סיבה אם צריך לשנות את ההמלצה שהוצעה על ידי HPA (לדוגמה, בגלל מספר הרפליקות שמוגדרות בשדות MinReplicas או MaxReplicas במפרט HPA). |
leading_metric_index |
המדד המוביל במערך Spec metrics הוא המדד שההמלצה האטומית המשויכת אליו משמשת כהמלצה הסופית. |
normalization |
אם יש סיכום של ייצוב והגבלות, הוא מוצג באופן הבא:
|
replicas |
מספר העותקים המומלץ. |
actuation_error |
הודעת שגיאה שמשויכת לכשל, אם ההפעלה נכשלה. |
actuation_time |
חותמת הזמן של ההפעלה במקרה של הצלחה. |
actuation_latency_seconds |
הזמן שעבר, בשניות, מתחילת חישוב ההמלצה ועד שההפעלה הצליחה. |
דוגמה ליומן המלצות סופי:
{
"insertId": "qzyv7alfv1sm19ns",
"jsonPayload": {
"finalRecommendation": {
"actuationTime": "2025-02-06T20:06:57.487786873Z",
"targetRef": {
"name": "kube-state-metrics",
"kind": "StatefulSet",
"apiVersion": "apps/v1"
},
"topLevelLimit": "none",
"hpa": "gke-managed-cim/kube-state-metrics",
"topLevelOverride": "noRecommendation",
"replicas": 1,
"configuredSize": 1,
"actuationLatencySeconds": 0.003722451,
"startTime": "2025-02-06T20:06:57.484064422Z"
},
"instance": {
"vm_name": "my-unique-vm-identifier",
"zone": "us-central1-a"
}
},
"resource": {
"type": "k8s_control_plane_component",
"labels": {
"cluster_name": "my-cluster",
"component_location": "us-central1-a",
"component_name": "hpa-controller",
"location": "us-central1-a",
"project_id": "my-project-id"
}
},
"timestamp": "2025-02-06T20:06:57.488193527Z",
"severity": "INFO",
"labels": {
"compute.googleapis.com/resource_name": "my-unique-vm-identifier"
},
"logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
"sourceLocation": {
"file": "event_logger.go",
"line": "61"
},
"receiveTimestamp": "2025-02-06T20:06:57.844898727Z"
}
פתרון בעיות
בקטע הזה מתוארות בעיות ומוסברות דרכי פתרון שקשורות לאירועים של Horizontal Pod Autoscaler.
אין אירועים
אם לא מופיעים אירועים של החלטות Horizontal Pod Autoscaler, צריך לוודא שביצעתם את כל הפעולות הבאות:
- הפעלתם את Cloud Logging באשכול.
- הפעלת את היומנים
KCP_HPAעבור האשכול. - פרסתם לפחות אובייקט
hpaאחד עם הגדרה נכונה באשכול.
כדי להציג את הגדרות האובייקט של hpa, מריצים את הפקודה הבאה:
kubectl describe hpa $HPA_NAME
אם עדיין לא מופיעים יומני KCP_HPA, אפשר לפנות אל Google Cloud התמיכה.
המאמרים הבאים
- מידע על יומנים של GKE
- הסבר על יומנים של GKE
- כאן מוסבר איך למצוא יומנים ספציפיים של GKE באמצעות שאילתות לדוגמה.
- איך מבצעים אופטימיזציה של התאמה אוטומטית לעומס של Pod על סמך מדדים