Horizontale Pod-Autoscaling-Ereignisse ansehen


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

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

Hinweise

Die folgenden Voraussetzungen müssen erfüllt sein:

Projekt auswählen oder erstellen

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

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

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 Google Cloudgehostet werden. Sie ist bei Google Cloud CLI und dem kubectl-Befehlszeilentool vorinstalliert.

In the Google 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 Protokollerstellung und zum Zugriff auf und zur Verarbeitung von Protokollen benötigen:

  • So aktivieren Sie die Ereignisprotokollierung für das horizontale Pod-Autoscaling in Ihrem Cluster: Administrator für Kubernetes Engine-Cluster (roles/container.clusterAdmin)
  • So greifen Sie auf Logs zu und verwenden den Log Explorer und Log Analytics: Loganzeige (roles/logging.viewer)

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 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 den horizontalen Pod-Autoscaler aktivieren

Führen Sie den folgenden Befehl aus, um einen neuen Cluster mit aktivierten KCP_HPA-Entscheidungsprotokollen 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-Entscheidungsprotokolle 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 Google Cloud Projekt-ID.
  • LOCATION: Compute-Regionen oder ‑Zonen für Ihren Cluster.

Mit diesen Befehlen können Sie die von KCP_HPA generierten Protokolle exportieren und im Ziel 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 in der Liste der Protokolle, ob das KCP_HPA-Protokoll aktiviert ist:

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

Die Ausgabe sieht in etwa so aus:

SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_HPA

Entscheidungsereignisse für den horizontalen Pod-Autoscaler deaktivieren

Aktualisieren Sie einen Cluster, um die KCP_HPA-Komponente aus dem --logging-Flag 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 Google Cloud -Projekt-ID.
  • LOCATION: Compute-Regionen oder ‑Zonen für Ihren Cluster.

Mit diesem Befehl wird der Export der von KCP_HPA generierten Protokolle 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 in der Liste der Protokolle, ob das KCP_HPA-Protokoll deaktiviert ist:

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

Die Ausgabe sieht in etwa so aus:

SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER

Arten von Protokollen

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

Achten Sie darauf, dass Sie neben den Leistungs- oder Kostenaspekten auch die Speicheranforderungen der potenziellen Protokollvolumina kennen. In den folgenden Beispielen wird erläutert, wie häufig der horizontale Pod-Autoscaler 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.

Bei zwei HPA-Objekten, die jeweils drei Messwerte überwachen, werden in Ihrem KCP_HPA-Log alle 15 Sekunden insgesamt acht Einträge für Entscheidungsereignisse protokolliert.

Atomare Empfehlung

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

Ein atomares Protokoll 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 beim Erstellen der Empfehlung mit dem HPA verknüpft sind. Diese Zahl umfasst auch bereite, nicht bereite und ignorierte Pods.
metric Enthält Informationen zur Spezifikation und zum Status des für die Empfehlung verwendeten Messwerts. Das Feld metric enthält die folgenden untergeordneten Felder:
  • index: Index des Messwerts im Spec metrics-Array.
  • type: Messwerttyp mit Werten aus MetricSourceType (z. B. „Ressource“, „Extern“).
  • spec: Name des Messwerts und ein für diesen Messwert festgelegtes Ziel.
  • status: Statusbedingungen im Hinblick auf Skalierbarkeit und Skalierungsbeschränkungen.
  • newest_sample_time: Zeitstempel des neuesten Messwert-Beispiels.
  • newest_sample_age_seconds: Alter der letzten Stichprobe, gemessen in Sekunden seit Beginn der Empfehlungsberechnung. Ein negativer Wert bedeutet, dass die Messwertstichprobe vor Beginn der Berechnung liegt.
summary Das Feld „summary“ enthält Informationen zum Empfehlungsergebnis, einschließlich der vorgeschlagenen Anzahl von Replicas. Wenn keine Empfehlung vorgeschlagen werden kann, wird eine Fehlermeldung angezeigt. Das Feld summary enthält die folgenden untergeordneten Felder:
  • dampening: HPA dämpft die Empfehlung und ihre Richtung, um die Auswirkungen einer potenziellen Skalierung zu verringern. Eine Dämpfung kann auf folgende Weisen erfolgen:
    • up: Eine Dämpfung nach oben bedeutet, dass der HPA annimmt, dass Pods mit fehlenden Messwerten eine Auslastung von 100% des Messwerts haben.
    • down: Eine Dämpfung nach unten bedeutet, dass der HPA annimmt, dass Pods mit fehlenden Messwerten oder nicht einsatzbereite Pods 0% des Messwerts verbrauchen.
    • none: Es wird keine Dämpfung angewendet.
  • override: Eine Nachricht mit einem Grund, warum die von HPA vorgeschlagene Empfehlung nicht angewendet wird (z. B. aufgrund der Toleranzgrenze) oder none, wenn keine Überschreibung erfolgt.
  • result: Ergebnis der Empfehlung. Es wird entweder eine empfohlene Anzahl von Replicas vorgeschlagen oder eine Fehlermeldung angezeigt, wenn die Empfehlung nicht berechnet werden kann.

Beispiel für ein Protokoll für atomare Empfehlungen:

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

Endgültige Empfehlung

Ein endgültiges Empfehlungsprotokoll beschreibt eine konsolidierte Empfehlung, die vom horizontalen Pod-Autoscaling vorgeschlagen wird. Der horizontale Pod-Autoscaler kombiniert alle atomaren Empfehlungen aus verschiedenen Messwerten, um eine endgültige Empfehlung zu erstellen, und setzt diese Empfehlungen um. Bei der Aktivierung weist der HPA das Deployment an, die Anzahl der Replikate an den empfohlenen Wert anzupassen. Wenn die endgültige Empfehlung eine andere Anzahl von Pods als die Anzahl der laufenden Pods vorschlägt, löst das horizontale Pod-Autoscaling ein Skalierungsereignis 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 der Replikate, bevor HPA diese Empfehlung berechnet und anwendet.
top_level_override Gibt einen Grund an, wenn die von HPA vorgeschlagene Empfehlung nicht angewendet wird (z. B. aufgrund der Toleranz). Andernfalls wird none angezeigt.
top_level_limit Gibt einen Grund an, wenn die von HPA vorgeschlagene Empfehlung angepasst werden muss, z. B. aufgrund der Anzahl der Replikaten, die in den Feldern MinReplicas oder MaxReplicas in der HPA-Spezifikation definiert sind.
leading_metric_index Der erste Messwertindex im Spec metrics-Array ist der Messwert, dessen zugehörige atomare Empfehlung als endgültige Empfehlung verwendet wird.
normalization Zusammenfassung der Stabilisierung und Einschränkungen, sofern vorhanden:

stabilization: Gibt den Stabilisierungsstatus an, falls er angewendet wurde. Mit der Stabilisierung wird das Schwanken der Replikatanzahl eingeschränkt, wenn die für die Skalierung verwendeten Messwerte ständig schwanken. Das Feld stabilization besteht aus den folgenden untergeordneten Feldern:

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

limitation: Gibt an, wie Skalierungseinschränkungen behandelt werden, falls sie angewendet werden. Durch dieses Verhalten werden die von der HPA vorgeschlagenen Empfehlungen an die geltenden Einschränkungen angepasst. Das Feld limitation besteht aus den folgenden untergeordneten Feldern:

  • replicas: Replikationsnummer nach Begrenzung.
  • reason: Grund, warum nicht über die Mindest- oder Maximalzahl von Replikaten hinaus skaliert wird.
  • scaling_policy: die angewendete Skalierungsrichtlinie.
  • selectPolicy: Gibt an, wie eine Richtlinie bei der Skalierung 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 der Replikate vor der Einschränkung.
replicas Empfohlene Anzahl von Replicas.
actuation_error Eine Fehlermeldung, die mit dem Fehler zusammenhängt, falls die Betätigung fehlgeschlagen ist.
actuation_time Zeitstempel der Aktivierung bei Erfolg.
actuation_latency_seconds Die Zeit in Sekunden, die vergangen ist, seit die Empfehlung berechnet wurde, bis die Aktivierung erfolgreich war.

Beispiel für ein Protokoll für endgültige Empfehlungen:

{
  "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 Schritte zur Lösung im Zusammenhang mit Ereignissen des horizontalen Pod-Autoscalings beschrieben.

Keine Termine

Wenn Sie keine Entscheidungsereignisse des horizontalen Pod-Autoscalings sehen, prüfen Sie, ob Sie alle folgenden Schritte ausgeführt haben:

  • Sie haben Cloud Logging für den Cluster aktiviert.
  • Sie haben die KCP_HPA-Protokolle 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 immer noch keine KCP_HPA-Protokolle sehen, wenden Sie sich an den Google Cloud Support.

Nächste Schritte