איסוף יומני אירועים של Horizontal Pod Autoscaler

בדף הזה מפורט מידע על אירועי החלטה שמופקים על ידי התאמה אוטומטית של מספר העותקים של Pods ב-Google Kubernetes Engine ‏ (GKE). ניתוח האירועים האלה מאפשר לכם לקבל תובנות לגבי האופן שבו בקר ה-HPA מנהל את שינוי הגודל של עומס העבודה, ולהבין את תהליך קבלת ההחלטות שמוביל לפעולות שלו.

הכלי Horizontal Pod Autoscaler (HPA) פולט אירועים של החלטות, שנשמרים כרשומות ביומן ב-Cloud Logging.

לפני שמתחילים

חשוב לוודא שאתם עומדים בדרישות המוקדמות הבאות:

יצירת פרויקט חדש או בחירה בפרויקט קיים

אתם יכולים להשתמש בפרויקט קיים או ליצור פרויקט חדש לצורך המדריך הזה.

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. 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). איך מקצים תפקידים

הפעלת ממשקי ה-API

הגדרת Cloud Shell

במדריך הזה תשתמשו ב-Cloud Shell כדי להריץ פקודות של gcloud ושל kubectl. ‫Cloud Shell היא סביבת shell לניהול משאבים שמתארחים ב- Cloud de Confiance by S3NS. הוא מגיע עם Google Cloud CLI ועם כלי שורת הפקודה kubectl שמותקנים מראש.

במסוף Cloud de Confiance , מפעילים את Cloud Shell.

הפעלת 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 שאתם רוצים לעקוב אחריו. חשוב לוודא שהשדות של קנה המידה האוטומטי של ה-Pod האופקי לא כוללים מידע אישי רגיש.

עלויות

התמחור של Cloud Logging חל כשמפעילים את Cloud Logging ואוספים יומנים של החלטות של Horizontal Pod Autoscaler.

הפעלת אירועי החלטה של התאמה אופקית של קבוצות Pod לעומס

חשוב להפעיל גם את הרכיב של יומני המערכת.

כדי ליצור אשכול חדש עם יומני ההחלטות 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 או אזורים של האשכול.

הפקודות האלה מאפשרות לייצא את היומנים שנוצרו על ידי 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

אפשר לעקוב אחרי ההתנהגות של הכלי להרחבת קיבולת אוטומטית של Pods אופקיים בCloud de Confiance מסוף. התצוגה הזו מאפשרת לראות בקלות את אותם יומני המלצות אטומיות וסופיות שזמינים ב-Cloud Logging, בלי לצאת מההקשר של עומס העבודה.

כדי לראות את היומנים של Horizontal Pod Autoscaler במסוף Cloud de Confiance :

  1. במסוף Cloud de Confiance , עוברים לדף Workloads:

    כניסה לדף Workloads

  2. בוחרים את עומס העבודה שמנוהל על ידי Horizontal Pod Autoscaler.

  3. לוחצים על הכרטיסייה התאמה.

בכרטיסייה הזו אפשר למצוא מידע שקשור להרחבת הפעילות, כולל שימוש במשאבים, נתוני יעילות ויומנים. הנתונים בכרטיסייה הזו יכולים לעזור לכם לזהות את ההגדרה היעילה ביותר של שינוי קנה מידה אוטומטי של עומסי העבודה. בקטע 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: מזהה הפרויקט ב- Cloud de Confiance .
  • 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

סוגי יומנים

אירועי ההחלטה של הכלי האוטומטי לשינוי גודל של Pods אופקיים מאוחסנים ב-Cloud Logging, במיקום logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" שנמצא בדלי _Default באותו פרויקט שבו נמצא אשכול GKE. כל האירועים שמתועדים הם בפורמט JSON ואפשר למצוא אותם בשדה jsonPayload של רשומה ביומן.

חשוב להבין את צורכי האחסון של נפחי היומן הפוטנציאליים, בנוסף לכל השלכה על הביצועים או העלויות. בדוגמאות הבאות מוסבר באיזו תדירות הכלי האוטומטי לשינוי גודל של Pod אופקי יוצר כל סוג של אירוע החלטה:

  • המלצה אטומית: כל 15 שניות, הכלי האוטומטי לשינוי גודל של Pod אופקי יוצר אירוע המלצה אטומי אחד לכל מדד שנמצא במעקב על ידי כל אובייקט HPA באשכול. לדוגמה, אם יש לכם שני אובייקטים של HPA באשכול וכל אובייקט של HPA עוקב אחרי שלושה מדדים, אז כל 15 שניות יתועדו שש המלצות אטומיות.

  • המלצה סופית: כל 15 שניות, כלי ה-HPA האוטומטי ליצירת תרמילים אופקיים יוצר אירוע המלצה סופי אחד לכל אובייקט HPA באשכול. לדוגמה, אם יש לכם שני אובייקטים של HPA באשכול, שתי המלצות סופיות יתועדו כל 15 שניות.

בסך הכול, עם שני אובייקטים של HPA שכל אחד מהם עוקב אחרי שלושה מדדים, יומן KCP_HPA יקבל שמונה רשומות של אירועי החלטה כל 15 שניות.

המלצה אטומית

יומן המלצות אטומי מתאר המלצה שמבוססת על מדד ספציפי שמוגדר במאזן העומסים האופקי של ה-Pod.

יומן אטומי כולל את השדות הבאים:

שדה תיאור
start_time מציין מתי התחיל ה-HPA לחשב המלצה.
hpa השם של אובייקט ה-HPA שמשויך להמלצה.
pod_count מציין את המספר הכולל של ה-Pods שמשויכים ל-HPA כשנוצרת ההמלצה. המספר הזה כולל גם פודים מוכנים, לא מוכנים ומוזנחים.
metric מידע על המפרט והסטטוס של המדד שמשמש להמלצה. השדה metric מכיל את שדות המשנה הבאים:
  • index: האינדקס של המדד במערך Spec metrics.
  • type: סוג המדד עם ערכים מ-MetricSourceType (לדוגמה, Resource,‏ External).
  • spec: שם המדד ויעד שהוגדר למדד הזה.
  • status: תנאי סטטוס בהקשר של מדרגיות והגבלות על שינוי קנה מידה.
  • newest_sample_time: חותמת הזמן של דגימת המדד העדכנית ביותר.
  • newest_sample_age_seconds: הגיל של הדגימה האחרונה, שנמדד בשניות מאז שהתחיל חישוב ההמלצה. ערך שלילי מציין שהמדגם של המדדים קדם לתחילת החישוב.
summary שדה הסיכום מכיל מידע לגבי תוצאת ההמלצה, כולל מספר העותקים המוצע. אם לא ניתן להציע המלצה, תוצג הודעת שגיאה. השדה summary מכיל את שדות המשנה הבאים:
  • dampening: HPA מחיל הנחתה על ההמלצה ועל הכיוון שלה כדי לנסות לצמצם את גודל ההרחבה הפוטנציאלית. הפחתה יכולה לקרות בדרכים הבאות:
    • up: כיוון של הגדלת ערך המדד פירושו ש-HPA מניח שערכי המדדים של ה-Pods החסרים הם 100%.
    • down: כיוון של הנחתה כלפי מטה אומר ש-HPA מניח שתרמילי Pod חסרים או תרמילי Pod שלא מוכנים צורכים 0% שימוש במדד.
    • none: לא מוחל שיכוך.
  • override: הודעה שמספקת סיבה כשלא מוחל שינוי בהמלצה שהוצעה על ידי HPA (לדוגמה, בגלל סבילות); או none אם לא מתבצעת החלפה.
  • result: תוצאת ההמלצה. הכלי מציע מספר מומלץ של רפליקות או מציג הודעת שגיאה אם אי אפשר לחשב את ההמלצה.

דוגמה ליומן המלצות אטומיות:

{
  "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 הפועלים, הכלי 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 אם יש סיכום של ייצוב והגבלות, הוא מוצג באופן הבא:

stabilization: מתאר את מצב הייצוב אם הוא הוחל. הייצוב משמש להגבלת התנודות במספר העותקים המשוכפלים, כשהמדדים שמשמשים לשינוי הגודל ממשיכים להשתנות. השדה stabilization מורכב משדות המשנה הבאים:

  • replicas: מספר העותק המשוכפל אחרי הייצוב.
  • reason: סוג הייצוב שהוחל – scaleUp או scaleDown.
  • stabilization_window: משך הזמן המשויך לייצוב, בשניות.
  • replicas_before_stabilization: מספר העותקים המומלץ לפני הייצוב.

limitation: תיאור של אופן הטיפול בהגבלות על שינוי גודל, אם הן חלות. ההתנהגות הזו משנה את ההמלצות שמוצעות על ידי ה-HPA על סמך המגבלות שמוגדרות. השדה limitation מורכב משדות המשנה הבאים:

  • replicas: מספר העותקים המשוכפלים אחרי ההגבלה.
  • reason: הסיבה לכך שהקנה מידה לא חורג ממספר העותקים המינימלי או המקסימלי.
  • scaling_policy: מדיניות ההרחבה שחלה.
  • selectPolicy: מציין איך המדיניות נבחרת כשמגדילים את מספר המשתמשים בכיוון מסוים. ‫MaxChange תואם ל-MaxChangePolicySelect;‏ MinChange תואם ל-MinChangePolicySelect. אם ההתאמה לגודל מושבתת, השדה selectPolicy לא יופיע.
  • replicas_before_limitation: מספר העותקים המומלץ לפני ההגבלה.
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.

אין אירועים

אם לא מופיעים אירועים של החלטות לגבי שינוי גודל אוטומטי של Pod אופקי, צריך לוודא שביצעתם את כל הפעולות הבאות:

  • הפעלתם את Cloud Logging באשכול.
  • הפעלת את היומנים KCP_HPA עבור האשכול.
  • פרסתם לפחות אובייקט hpa אחד עם הגדרה נכונה באשכול.

כדי להציג את הגדרות האובייקט של hpa, מריצים את הפקודה הבאה:

  kubectl describe hpa $HPA_NAME

אם עדיין לא מופיעים יומני KCP_HPA, אפשר לפנות אל Cloud de Confiance התמיכה.

המאמרים הבאים