Ereignislogs für horizontales Pod-Autoscaling erfassen

Auf dieser Seite finden Sie Informationen zu Entscheidungsereignissen, die vom horizontalen Pod-Autoscaler in Google Kubernetes Engine (GKE) ausgegeben werden. Wenn Sie diese Ereignisse analysieren, erhalten Sie Informationen dazu, wie der horizontale Pod-Autoscaler-Controller die Skalierung Ihrer Arbeitslast verwaltet, und können den Entscheidungsprozess hinter seinen Aktionen nachvollziehen.

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

Hinweis

Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

Projekt auswählen oder erstellen

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

  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.

APIs aktivieren

Aktivieren Sie die APIs für GKE und Cloud Logging.

Rollen, die zum Aktivieren von APIs erforderlich sind

Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen.

APIs aktivieren

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 gehostet werden Cloud de Confiance by S3NS. Sie ist bei Google Cloud CLI und kubectl dem Befehlszeilentool vorinstalliert.

Aktivieren Sie Cloud Shell in der Cloud de Confiance Console.

Cloud Shell aktivieren

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 Loggenerierung sowie zum Zugriff auf und zur Verarbeitung von Logs 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 Observability Analytics: Logbetrachter (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

  • Ihr GKE-Cluster muss Version 1.31.5-gke.1090000 oder höher oder 1.32.1-gke.1260000 oder höher ausführen.
  • Aktivieren Sie Cloud Logging in Ihrem GKE-Cluster. Es gelten die Preise für Cloud Logging.
  • Sie müssen ein horizontales Pod-Autoscaling haben, das Sie überwachen möchten. Die Felder für das horizontale Pod-Autoscaling dürfen keine sensiblen Daten enthalten.

Kosten

Es gelten die Preise für Cloud Logging , wenn Sie Cloud Logging aktivieren und Entscheidungslogs für das horizontale Pod-Autoscaling erfassen.

Entscheidungsereignisse für das horizontale 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 in einem 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 Cloud de Confiance Projekt ID.
  • LOCATION: Compute-Regionen oder -Zonen für Ihren Cluster.

Mit diesen Befehlen werden die von KCP_HPA generierten Logs exportiert und am Ziel logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" in Cloud Logging gespeichert.

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

Logs für das horizontale Pod-Autoscaling in der Cloud de Confiance Console ansehen

Sie können das Verhalten des horizontalen Pod-Autoscalers in der Cloud de Confiance Console überwachen. In dieser Ansicht können Sie die gleichen Logs für atomare und endgültige Empfehlungen sehen, die in Cloud Logging verfügbar sind, ohne den Kontext Ihrer Arbeitslast zu verlassen.

So rufen Sie Logs für das horizontale Pod-Autoscaling in der Cloud de Confiance Console auf:

  1. Rufen Sie in der Cloud de Confiance Console die Seite Arbeitslasten auf:

    Zu Arbeitslasten

  2. Wählen Sie die Arbeitslast aus, die vom horizontalen Pod-Autoscaler verwaltet wird.

  3. Klicken Sie auf den Tab Skalierung.

Auf diesem Tab finden Sie Informationen zur Skalierung, einschließlich Ressourcennutzung, Effizienzdaten und Logs. Anhand der Daten auf diesem Tab können Sie die effektivste Konfiguration für das Autoscaling Ihrer Arbeitslasten ermitteln. Im Abschnitt Logs finden Sie dieselben Informationen aus den Logs und können diese Logs nach Art filtern, einschließlich „Ereignis“, „Endgültige Empfehlung“ und „Atomare Empfehlung“. Weitere Informationen zu den verschiedenen Logs finden Sie unter Logtypen.

Entscheidungsereignisse für das horizontale Pod-Autoscaling 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 Cloud de Confiance 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 Filter in Cloud Logging abrufen.logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller"

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

Logtypen

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

Sie müssen die Speicheranforderungen der potenziellen Logmengen sowie alle Auswirkungen auf Leistung und Kosten kennen. In den folgenden Beispielen wird erläutert, wie oft der horizontale Pod-Autoscaler die einzelnen Arten von Entscheidungsereignissen generiert:

  • Atomare Empfehlung: Der horizontale Pod-Autoscaler generiert alle 15 Sekunden ein Ereignis für eine atomare Empfehlung 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 Ereignis für eine endgültige Empfehlung 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, enthält Ihr KCP_HPA Log alle 15 Sekunden insgesamt acht Einträge für Entscheidungsereignisse.

Atomare Empfehlung

Ein Log für eine atomare Empfehlung beschreibt eine Empfehlung, die auf einem einzelnen Messwert basiert, der für Ihr horizontales Pod-Autoscaling angegeben ist.

Ein Log für eine atomare Empfehlung enthält die folgenden Felder:

Feld Beschreibung
start_time Gibt an, wann der 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 mit dem HPA verknüpft sind, als die Empfehlung erstellt wurde. 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 wurde. Das Feld metric enthält die folgenden Unterfelder:
  • index: Index des Messwerts im Array Spec metrics.
  • 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 Skalierungslimits.
  • newest_sample_time: Zeitstempel der neuesten Messwertprobe.
  • newest_sample_age_seconds: Alter der letzten Probe in Sekunden seit Beginn der Empfehlungsberechnung. Ein negativer Wert bedeutet, dass die Messwertprobe vor Beginn der Berechnung erstellt wurde.
summary Das Feld „summary“ 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 Unterfelder:
  • dampening: Der HPA wendet eine Dämpfung auf die Empfehlung und ihre Richtung an, um das Ausmaß einer potenziellen Skalierung zu reduzieren. Die Dämpfung kann auf folgende Weise erfolgen:
    • up: Eine Aufwärtsdämpfung bedeutet, dass der HPA Pods mit fehlenden Messwerten mit einer Auslastung von 100% des Messwerts annimmt.
    • down: Eine Abwärtsdämpfung bedeutet, dass der HPA Pods mit fehlenden Messwerten oder nicht bereite Pods annimmt, die 0% des Messwerts verbrauchen.
    • none: Es wird keine Dämpfung angewendet.
  • override: Meldung, die einen Grund angibt, wenn die vom HPA vorgeschlagene Empfehlung nicht angewendet wird (z. B. aufgrund der Toleranz), oder none, wenn keine Überschreibung erfolgt.
  • result: Ergebnis der Empfehlung. Entweder wird eine empfohlene Anzahl von Replikaten vorgeschlagen oder 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 Log für eine endgültige Empfehlung beschreibt eine konsolidierte Empfehlung, die vom horizontalen Pod-Autoscaler vorgeschlagen wird. Der horizontale Pod-Autoscaler kombiniert alle atomaren Empfehlungen aus verschiedenen Messwerten, um eine endgültige Empfehlung zu erstellen und umzusetzen. Die Umsetzung bedeutet, dass der HPA die Bereitstellung anweist, die Anzahl der Replikate an den empfohlenen Wert anzupassen. Wenn die endgültige Empfehlung eine andere Anzahl von Pods vorschlägt als die Anzahl der ausgeführten Pods, löst der horizontale Pod-Autoscaler ein Ereignis zum Hoch- oder Herunterskalieren aus, um die Bereitstellung entsprechend anzupassen.

Ein Log für eine endgültige Empfehlung enthält die folgenden Felder:

Feld Beschreibung
start_time Gibt an, wann der 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 ScaleTargetRef-Objekt an, das mit einer Empfehlung verknüpft ist.
configured_size Die zuletzt aufgezeichnete Anzahl von Replikaten, bevor der HPA diese Empfehlung berechnet und anwendet.
top_level_override Gibt einen Grund an, wenn die vom 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 Array Spec metrics ist der Messwert, dessen zugehörige atomare Empfehlung als endgültige Empfehlung verwendet wird.
normalization Enthält eine Zusammenfassung der Stabilisierung und der Einschränkungen, falls vorhanden:

stabilization: Beschreibt den Stabilisierungsstatus, wenn er angewendet wurde. Die Stabilisierung wird verwendet, um das Fluktuieren der Anzahl der Replikate zu begrenzen, wenn die für die Skalierung verwendeten Messwerte ständig schwanken. Das Feld stabilization besteht aus den folgenden Unterfeldern:

  • replicas: Anzahl der Replikate nach der Stabilisierung.
  • reason: Angewendeter Stabilisierungstyp: scaleUp oder scaleDown.
  • stabilization_window: Zugehöriger Stabilisierungszeitraum in Sekunden.
  • replicas_before_stabilization: Empfohlene Anzahl von Replikaten vor der Stabilisierung.

limitation: Beschreibt, wie Skalierungslimits behandelt werden, wenn sie angewendet werden. Dieses Verhalten ändert die vom HPA vorgeschlagenen Empfehlungen basierend auf den vorhandenen Einschränkungen. Das Feld limitation besteht aus den folgenden Unterfeldern:

  • replicas: Anzahl der Replikate nach dem Limit.
  • reason: Grund dafür, dass die Anzahl der Replikate nicht über das Minimum oder Maximum hinaus skaliert wird.
  • scaling_policy: Die angewendete Skalierungsrichtlinie.
  • selectPolicy: Gibt an, wie eine Richtlinie ausgewählt wird, wenn in eine bestimmte Richtung skaliert wird. MaxChange entspricht MaxChangePolicySelect; MinChange entspricht MinChangePolicySelect. Wenn die Skalierung deaktiviert ist, ist das Feld selectPolicy nicht vorhanden.
  • replicas_before_limitation: Empfohlene Anzahl von Replikaten vor dem Limit.
replicas Empfohlene Anzahl von Replikaten.
actuation_error Eine Fehlermeldung, die mit dem Fehler verknüpft ist, wenn die Umsetzung fehlgeschlagen ist.
actuation_time Zeitstempel der erfolgreichen Umsetzung.
actuation_latency_seconds Zeit in Sekunden vom Beginn der Empfehlungsberechnung bis zum Erfolg der Umsetzung.

Beispiel für ein Log für eine endgültige 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 Schritte zur Fehlerbehebung im Zusammenhang mit Ereignissen des horizontalen Pod-Autoscalers beschrieben.

Keine Termine

Wenn keine Entscheidungsereignisse für das horizontale Pod-Autoscaling angezeigt werden, 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-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 weiterhin keine KCP_HPA-Logs angezeigt werden, wenden Sie sich an den Cloud de Confiance Support.

Nächste Schritte