בדף הזה מוסבר על אירועי החלטה שנוצרים על ידי התאמה אופקית של קבוצות Pod לעומס ב-Google Kubernetes Engine (GKE). ניתוח האירועים האלה מאפשר לכם לקבל תובנות לגבי האופן שבו בקר ה-HPA מנהל את שינוי הגודל של עומס העבודה, ולהבין את תהליך קבלת ההחלטות שמוביל לפעולות שלו.
הכלי Horizontal Pod Autoscaler (HPA) פולט אירועים של החלטות, שנשמרים כרשומות ביומן ב-Cloud Logging.
לפני שמתחילים
חשוב לוודא שאתם עומדים בדרישות המוקדמות הבאות:
יצירת פרויקט חדש או בחירה בפרויקט קיים
אתם יכולים להשתמש בפרויקט קיים או ליצור פרויקט חדש לצורך המדריך הזה.
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 Cloud de Confiance project.
הפעלת ממשקי ה-API
מפעילים את ממשקי ה-API של GKE ו-Cloud Logging, אם הם עדיין לא מופעלים.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים
הגדרת Cloud Shell
במדריך הזה תשתמשו ב-Cloud Shell כדי להריץ פקודות של gcloud ושל kubectl. Cloud Shell היא סביבת מעטפת לניהול משאבים שמתארחים ב- Cloud de Confiance by S3NS. הוא מותקן מראש עם Google Cloud CLI וכלי שורת הפקודה kubectl.
מפעילים את Cloud Shell במסוף Cloud de Confiance .
בחלק התחתון של המסוף ייפתח סשן של 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 חל.
- מוודאים שיש לכם מנגנון אוטומטי לשינוי גודל של Pods אופקי שאתם רוצים לעקוב אחריו. חשוב לוודא שהשדות של קנה המידה האוטומטי של ה-Pod האופקי לא כוללים מידע אישי רגיש.
עלויות
התמחור של Cloud Logging חל כשמפעילים את Cloud Logging ואוספים יומני החלטות של התאמה אופקית של קבוצות Pod לעומס.
הפעלת אירועי החלטה של Horizontal Pod Autoscaler (HPA)
חשוב להפעיל גם את הרכיב של יומני המערכת.gcloud
כדי ליצור אשכול חדש עם יומני ההחלטות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: מזהה הפרויקט ב- Cloud de Confiance . -
LOCATION: אזורי Compute או אזורים של האשכול.
Terraform
כדי להפעיל את יומני ההחלטות שלKCP_HPA באמצעות Terraform, צריך לעדכן את המשאב google_container_cluster. בבלוק logging_config, מוסיפים את הערך KCP_HPA לרשימה בשדה enable_components:
resource "google_container_cluster" "primary" {
name = "CLUSTER_NAME"
location = "LOCATION"
# ... other configuration ...
logging_config {
enable_components = ["SYSTEM_COMPONENTS", "KCP_HPA"]
}
}
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שרוצים ליצור. -
LOCATION: אזור או אזור זמין של מחשוב לאשכול.
הפקודות האלה מאפשרות לייצא את היומנים שנוצרו על ידי 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 (HPA) במסוף Cloud de Confiance
אפשר לעקוב אחרי ההתנהגות של הכלי האוטומטי לשינוי גודל של Pod אופקי בCloud de Confiance מסוף. התצוגה הזו מאפשרת לראות בקלות את אותם יומני המלצות אטומיות וסופיות שזמינים ב-Cloud Logging, בלי לצאת מההקשר של עומס העבודה.
כדי לראות את היומנים של Horizontal Pod Autoscaler במסוף Cloud de Confiance :
במסוף Cloud de Confiance , עוברים לדף Workloads:
בוחרים את עומס העבודה שמנוהל על ידי ה-Horizontal Pod Autoscaler.
לוחצים על הכרטיסייה Scaling (שינוי גודל).
בכרטיסייה הזו אפשר למצוא מידע שקשור להרחבת היקף הפעילות, כולל שימוש במשאבים, נתוני יעילות ויומנים. הנתונים בכרטיסייה הזו יכולים לעזור לכם לזהות את ההגדרה היעילה ביותר להתאמה אוטומטית לעומס (scaling) של עומסי העבודה. בקטע Logs מופיע אותו מידע שמופיע ב-Logs, ואפשר לסנן את היומנים האלה לפי סוג, כולל "Event", "Final recommendation" ו-"Atomic recommendation". לפרטים נוספים על היומנים השונים, אפשר לעיין במאמר סוגי יומנים.
השבתת אירועי החלטה של Horizontal Pod Autoscaler (HPA)
gcloud
מעדכנים את האשכול כדי להסיר את הרכיבKCP_HPA מהדגל --logging:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שרוצים ליצור או לעדכן. -
PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance . -
LOCATION: אזורי Compute או אזורים של האשכול.
Terraform
כדי להשבית את יומני ההחלטות שלKCP_HPA באמצעות Terraform, צריך לעדכן את המשאב google_container_cluster. בבלוק logging_config, מסירים את הערך KCP_HPA מהרשימה בשדה enable_components:
resource "google_container_cluster" "primary" {
name = "CLUSTER_NAME"
location = "LOCATION"
# ... other configuration ...
logging_config {
enable_components = ["SYSTEM_COMPONENTS"]
}
}
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שרוצים לעדכן. -
LOCATION: אזור או אזור זמין של מחשוב לאשכול.
הפקודה הזו משביתה את הייצוא של היומנים שנוצרו על ידי 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 של רשומה ביומן.
חשוב להבין את צורכי האחסון של נפחי היומן הפוטנציאליים, בנוסף לכל השלכה על הביצועים או העלויות. בדוגמאות הבאות מוסבר באיזו תדירות כלי ה-HPA יוצר כל סוג של אירוע החלטה:
המלצה אטומית: הכלי Horizontal Pod Autoscaler יוצר אירוע המלצה אטומי אחד כל 15 שניות לכל מדד שנמצא במעקב של כל אובייקט HPA באשכול. לדוגמה, אם יש לכם שני אובייקטים של HPA באשכול וכל אובייקט של HPA עוקב אחרי שלושה מדדים, שש המלצות אטומיות יתועדו כל 15 שניות.
המלצה סופית: כל 15 שניות, כלי ה-HPA יוצר אירוע המלצה סופי אחד לכל אובייקט HPA באשכול. לדוגמה, אם יש לכם שני אובייקטים של HPA באשכול, שתי המלצות סופיות יתועדו ביומן כל 15 שניות.
בסך הכול, עם שני אובייקטים של HPA שכל אחד מהם עוקב אחרי שלושה מדדים, יומן KCP_HPA יקבל שמונה רשומות בסך הכול של אירועי החלטה כל 15 שניות.
המלצה אטומית
יומן המלצות אטומי מתאר המלצה שמבוססת על מדד ספציפי שמוגדר במאזן העומסים האופקי של ה-Pod.
יומן אטומי כולל את השדות הבאים:
| שדה | תיאור |
|---|---|
start_time |
מציין מתי התחילה ההמלצה של HPA. |
hpa |
השם של אובייקט ה-HPA שמשויך להמלצה. |
pod_count |
מציין את המספר הכולל של Pods שמשויכים ל-HPA בזמן יצירת ההמלצה. המספר הזה כולל גם תרמילי Pod מוכנים, לא מוכנים ומוזנחים. |
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 (HPA). הכלי Horizontal Pod Autoscaler משלב את כל ההמלצות האטומריות ממדדים שונים כדי ליצור המלצה סופית, ומיישם את ההמלצות הסופיות. הפעלה פירושה שה-HPA מורה לפריסה להתאים את מספר הרפליקות כך שיתאים לערך המומלץ. אם ההמלצה הסופית מציעה מספר שונה של Pods ממספר ה-Pods הפועלים, ה-HPA מפעיל אירוע של הרחבה או צמצום כדי להתאים את הפריסה בהתאם.
יומן ההמלצות הסופיות כולל את השדות הבאים:
| שדה | תיאור |
|---|---|
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, אפשר לפנות אל Cloud de Confiance התמיכה.
המאמרים הבאים
- מידע על יומני GKE
- הסבר על היומנים של GKE.
- כאן מוסבר איך למצוא יומנים ספציפיים של GKE באמצעות שאילתות לדוגמה.
- מידע נוסף על התאמה אופקית של קבוצות Pod לעומס