Horizontale Pod-Autoscaling-Ereignisse ansehen


Auf dieser Seite finden Sie Informationen zu Entscheidungsereignissen, die vom Horizontal Pod Autoscaler in Google Kubernetes Engine (GKE) ausgegeben werden. Wenn Sie diese Ereignisse analysieren, erhalten Sie Informationen dazu, wie der Controller für horizontales Pod-Autoscaling die Skalierung Ihrer Arbeitslast verwaltet, und können die Entscheidungsfindung hinter den jeweiligen Aktionen nachvollziehen.

Der horizontale Pod-Autoscaler gibt Entscheidungsereignisse aus, die als Logeinträge in Cloud Logging gespeichert werden.

Hinweise

Sie müssen die folgenden Voraussetzungen erfüllen:

Projekt auswählen oder erstellen

Sie können ein vorhandenes Projekt verwenden oder für diese Anleitung ein neues erstellen.

  1. In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Trusted Cloud project.

  3. APIs aktivieren

    Enable the GKE, and Cloud Logging APIs.

    Enable the APIs

    Cloud Shell einrichten

    In dieser Anleitung verwenden Sie Cloud Shell zum Ausführen von gcloud- und kubectl-Befehlen. Cloud Shell ist eine Shell-Umgebung für die Verwaltung von Ressourcen, die in Trusted Cloud by S3NSgehostet werden. Sie ist bei Google Cloud CLI und dem kubectl-Befehlszeilentool vorinstalliert.

    In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    In einem Frame im unteren Teil der Console wird eine Cloud Shell-Sitzung geöffnet.

    Achten Sie vor dem Ausführen von Befehlen in dieser Anleitung darauf, dass Ihr Standardprojekt auf die Projekt-ID festgelegt ist, in der Sie die Beispielanwendung bereitstellen möchten. Führen Sie den folgenden Befehl in Cloud Shell aus, falls sie noch nicht festgelegt ist:

    gcloud config set project PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

    Erforderliche Rollen und Berechtigungen

    Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aktivieren der Protokollgenerierung sowie zum Aufrufen und Verarbeiten von Protokollen benötigen:

    Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

    Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

    Voraussetzungen

    • Auf Ihrem GKE-Cluster muss Version 1.31.5-gke.1090000 oder höher oder Version 1.32.1-gke.1260000 oder höher ausgeführt werden.
    • Aktivieren Sie Cloud Logging in Ihrem GKE-Cluster. Es gelten die Cloud Logging-Preise.

    Entscheidungsereignisse für horizontales Pod-Autoscaling aktivieren

    Führen Sie den folgenden Befehl aus, um einen neuen Cluster mit aktivierten KCP_HPA-Entscheidungslogs zu erstellen:

    gcloud container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --project=PROJECT_ID \
        --logging=SYSTEM,KCP_HPA
    

    Führen Sie den folgenden Befehl aus, um die KCP_HPA-Entscheidungslogs für einen vorhandenen Cluster zu aktivieren:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --project=PROJECT_ID \
        --logging=SYSTEM,KCP_HPA
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME: Name des Clusters, den Sie erstellen oder aktualisieren möchten.
    • PROJECT_ID: Ihre Trusted Cloud Projekt-ID.
    • LOCATION: Compute-Regionen oder -Zonen für Ihren Cluster.

    Mit diesen Befehlen können Sie die von KCP_HPA generierten Logs exportieren und am Zielort logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" in Cloud Logging speichern.

    Rufen Sie die aktualisierte Logging-Konfiguration des Clusters ab und prüfen Sie die Liste der Logs, um sicherzustellen, dass das KCP_HPA-Log aktiviert ist:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=loggingConfig \
        --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
    

    Die Ausgabe sieht etwa so aus:

    SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_HPA
    

    Entscheidungsereignisse für horizontales Pod-Autoscaling deaktivieren

    So aktualisieren Sie einen Cluster, um die Komponente KCP_HPA aus dem Flag --logging zu entfernen:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --project=PROJECT_ID \
        --logging=SYSTEM
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME: Name des Clusters, den Sie erstellen oder aktualisieren möchten.
    • PROJECT_ID: Ihre Trusted Cloud Projekt-ID.
    • LOCATION: Compute-Regionen oder -Zonen für Ihren Cluster.

    Mit diesem Befehl wird der Export der von KCP_HPA generierten Logs deaktiviert. Sie können sie nicht mit dem logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller"-Filter in Cloud Logging abrufen.

    Rufen Sie die aktualisierte Logging-Konfiguration des Clusters ab und prüfen Sie die Liste der Logs, um sicherzustellen, dass das KCP_HPA-Log deaktiviert ist:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=loggingConfig \
        --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
    

    Die Ausgabe sieht etwa so aus:

    SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER
    

    Arten von Logs

    Die Entscheidungsereignisse für den horizontalen Pod-Autoscaler werden in Cloud Logging am Speicherort logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" gespeichert, der sich im Bucket _Default im selben Projekt wie Ihr GKE-Cluster befindet. Alle protokollierten Ereignisse liegen im JSON-Format vor und sind im Feld jsonPayload eines Logeintrags enthalten.

    Achten Sie darauf, dass Sie die Speicheranforderungen der potenziellen Log-Volumes sowie alle Auswirkungen auf Leistung oder Kosten kennen. In den folgenden Beispielen wird erläutert, wie oft das horizontale Pod-Autoscaling die einzelnen Arten von Entscheidungsereignissen generiert:

    • Atomare Empfehlung: Der horizontale Pod-Autoscaler generiert alle 15 Sekunden ein atomares Empfehlungsereignis für jeden Messwert, der von jedem HPA-Objekt in Ihrem Cluster überwacht wird. Wenn Sie beispielsweise zwei HPA-Objekte in Ihrem Cluster haben und jedes HPA-Objekt drei Messwerte überwacht, werden alle 15 Sekunden sechs atomare Empfehlungen protokolliert.

    • Endgültige Empfehlung: Der horizontale Pod-Autoscaler generiert alle 15 Sekunden ein endgültiges Empfehlungsereignis für jedes HPA-Objekt in Ihrem Cluster. Wenn Sie beispielsweise zwei HPA-Objekte in Ihrem Cluster haben, werden alle 15 Sekunden zwei endgültige Empfehlungen protokolliert.

    Insgesamt werden mit zwei HPA-Objekten, die jeweils drei Messwerte überwachen, alle 15 Sekunden acht Entscheidungsereigniseinträge in das KCP_HPA-Log geschrieben.

    Atomare Empfehlung

    Ein atomares Empfehlungsprotokoll beschreibt eine Empfehlung, die auf einem einzelnen Messwert basiert, der in Ihrem Horizontal Pod Autoscaler angegeben ist.

    Ein atomares Log enthält die folgenden Felder:

    Feld Beschreibung
    start_time Gibt an, wann HPA mit der Berechnung einer Empfehlung begonnen hat.
    hpa Der Name des HPA-Objekts, das mit der Empfehlung verknüpft ist.
    pod_count Gibt die Gesamtzahl der Pods an, die dem HPA zugeordnet sind, wenn die Empfehlung erstellt wird. Diese Zahl umfasst auch bereite, nicht bereite und ignorierte Pods.
    metric Enthält Informationen zur Spezifikation und zum Status des Messwerts, der für die Empfehlung verwendet wird. Das Feld metric enthält die folgenden untergeordneten Felder:
    • index: Index des Messwerts im Spec metrics-Array.
    • type: Messwerttyp mit Werten aus dem MetricSourceType (z. B. „Resource“, „External“).
    • spec: Name des Messwerts und ein für diesen Messwert festgelegtes Ziel.
    • status: Statusbedingungen in Bezug auf Skalierbarkeit und Skalierungseinschränkungen.
    • newest_sample_time: Zeitstempel der neuesten Messwertprobe.
    • newest_sample_age_seconds: Alter der letzten Stichprobe in Sekunden seit Beginn der Empfehlungsberechnung. Ein negativer Wert bedeutet, dass die Messwertstichprobe vor dem Beginn der Berechnung liegt.
    summary Das Feld „Zusammenfassung“ enthält Informationen zum Empfehlungsergebnis, einschließlich der vorgeschlagenen Anzahl von Replikaten. Wenn keine Empfehlung vorgeschlagen werden kann, wird eine Fehlermeldung angezeigt. Das Feld summary enthält die folgenden untergeordneten Felder:
    • dampening: HPA wendet eine Dämpfung auf die Empfehlung und ihre Richtung an, um das Ausmaß einer potenziellen Skalierung zu verringern. Die Dämpfung kann auf folgende Weise erfolgen:
      • up: Bei einer Aufwärts-Dämpfungsrichtung geht HPA davon aus, dass Pods mit fehlenden Messwerten eine 100-prozentige Nutzung des Messwerts aufweisen.
      • down: Eine Richtung für die Abwärtsdämpfung bedeutet, dass HPA von Pods mit fehlenden Messwerten oder nicht bereiten Pods ausgeht, die 0% der Messwertnutzung verbrauchen.
      • none: Es wird keine Dämpfung angewendet.
    • override: Meldung mit einer Begründung, wenn die von HPA vorgeschlagene Empfehlung nicht angewendet wird (z. B. aufgrund von Toleranz); oder none, wenn keine Überschreibung erfolgt.
    • result: Ergebnis der Empfehlung. Entweder wird eine empfohlene Anzahl von Replikaten vorgeschlagen oder es wird eine Fehlermeldung angezeigt, wenn die Empfehlung nicht berechnet werden kann.

    Beispiel für ein Log für eine atomare Empfehlung:

    {
      "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"
    }
    

    Abschließende Empfehlung

    Ein Protokoll mit der endgültigen Empfehlung beschreibt eine konsolidierte Empfehlung, die vom horizontalen Pod-Autoscaler vorgeschlagen wird. Das horizontale Pod-Autoscaling kombiniert alle atomaren Empfehlungen aus verschiedenen Messwerten, um eine endgültige Empfehlung zu erstellen und umzusetzen. „Actuation“ bedeutet, dass der HPA das Deployment anweist, die Anzahl der Replikate an den empfohlenen Wert anzupassen. Wenn die endgültige Empfehlung eine andere Anzahl von Pods als die Anzahl der ausgeführten Pods vorschlägt, löst das horizontale Pod-Autoscaling ein Hoch- oder Herunterskalierungsereignis aus, um das Deployment entsprechend anzupassen.

    Ein endgültiges Empfehlungsprotokoll enthält die folgenden Felder:

    Feld Beschreibung
    start_time Gibt an, wann HPA mit der Berechnung einer Empfehlung begonnen hat.
    hpa Der Name des HPA-Objekts, das mit der Empfehlung verknüpft ist.
    target_ref Gibt das HPA-Objekt ScaleTargetRef an, das mit einer Empfehlung verknüpft ist.
    configured_size Die zuletzt aufgezeichnete Anzahl von Replikaten, bevor HPA diese Empfehlung berechnet und angewendet hat.
    top_level_override Gibt einen Grund an, wenn die von HPA vorgeschlagene Empfehlung nicht angewendet wird (z. B. aufgrund der Toleranz), oder none, wenn keine Überschreibung erfolgt.
    top_level_limit Gibt einen Grund an, wenn die vom HPA vorgeschlagene Empfehlung angepasst werden muss, z. B. aufgrund der Anzahl der Replikate, die durch die Felder MinReplicas oder MaxReplicas in der HPA-Spezifikation definiert sind.
    leading_metric_index Der führende Messwertindex im Spec metrics-Array ist der Messwert, dessen zugehörige atomare Empfehlung als endgültige Empfehlung verwendet wird.
    normalization Enthält eine Zusammenfassung der Stabilisierung und Einschränkung, sofern vorhanden:

    stabilization: Beschreibt den Stabilisierungsstatus, falls er angewendet wurde. Die Stabilisierung wird verwendet, um das Hin- und Herwechseln der Replikatanzahl einzuschränken, wenn die für die Skalierung verwendeten Messwerte ständig schwanken. Das Feld stabilization besteht aus den folgenden Unterfeldern:

    • replicas: Replikatnummer nach der Stabilisierung.
    • reason: angewendeter Stabilisierungstyp – scaleUp oder scaleDown.
    • stabilization_window: Der zugehörige Stabilisierungszeitraum in Sekunden.
    • replicas_before_stabilization: Empfohlene Anzahl von Replikaten vor der Stabilisierung.

    limitation: Beschreibt, wie Skalierungseinschränkungen behandelt werden, wenn sie angewendet werden. Durch dieses Verhalten werden die vom HPA vorgeschlagenen Empfehlungen auf Grundlage der vorhandenen Einschränkungen angepasst. Das Feld limitation besteht aus den folgenden Unterfeldern:

    • replicas: Replikatnummer nach der Einschränkung.
    • reason: Grund dafür, dass nicht über die minimale oder maximale Anzahl von Replikaten hinaus skaliert wird.
    • scaling_policy: die angewendete Skalierungsrichtlinie.
    • selectPolicy: Gibt an, wie eine Richtlinie beim Skalieren in eine bestimmte Richtung ausgewählt wird. MaxChange entspricht MaxChangePolicySelect und MinChange entspricht MinChangePolicySelect. Wenn die Skalierung deaktiviert ist, ist das Feld selectPolicy nicht vorhanden.
    • replicas_before_limitation: Empfohlene Anzahl von Replikaten vor der Einschränkung.
    replicas Empfohlene Anzahl von Replikaten.
    actuation_error Eine Fehlermeldung, die mit dem Fehler zusammenhängt, wenn die Betätigung fehlgeschlagen ist.
    actuation_time Zeitstempel der Aktion bei Erfolg.
    actuation_latency_seconds Die Zeit in Sekunden, die vom Beginn der Empfehlungsberechnung bis zum erfolgreichen Ausführen der Aktion vergangen ist.

    Beispiel für ein Log der endgültigen Empfehlung:

    {
      "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"
    }
    

    Fehlerbehebung

    In diesem Abschnitt werden Probleme und Lösungsschritte im Zusammenhang mit Ereignissen des horizontalen Pod-Autoscalers beschrieben.

    Keine Termine

    Wenn Sie keine Ereignisse für Entscheidungen zum horizontalen Pod-Autoscaling sehen, haben Sie möglicherweise Folgendes nicht getan:

    • Sie haben Cloud Logging für den Cluster aktiviert.
    • Sie haben die KCP_HPA-Logs für den Cluster aktiviert.
    • Sie haben mindestens ein korrekt konfiguriertes hpa-Objekt in Ihrem Cluster bereitgestellt.

    Führen Sie den folgenden Befehl aus, um die Konfiguration Ihres hpa-Objekts aufzurufen:

      kubectl describe hpa $HPA_NAME
    

    Wenn Sie weiterhin keine KCP_HPA-Logs sehen, wenden Sie sich an den Trusted Cloud -Support.

    Nächste Schritte