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 Controller für horizontales Pod-Autoscaling die Skalierung Ihrer Arbeitslast verwaltet, und können die Gründe für die jeweiligen Entscheidungen nachvollziehen.

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

Hinweis

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 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 GKE- und Cloud Logging APIs.

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 Cloud de Confiance by S3NSgehostet werden. Sie ist bei Google Cloud CLI und dem kubectl-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 Protokollgenerierung sowie zum Aufrufen und Verarbeiten 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 Observability 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 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.
  • Sie benötigen ein horizontales Pod-Autoscaling, das Sie überwachen möchten. Achten Sie darauf, dass die Felder für das horizontale Pod-Autoscaling keine vertraulichen Daten enthalten.

Kosten

Es gelten die Cloud Logging-Preise, wenn Sie Cloud Logging aktivieren und Entscheidungslogs für den horizontalen Pod-Autoscaler erfassen.

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 Cloud de Confiance 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

Logs für horizontales Pod-Autoscaling in der Cloud de Confiance -Konsole ansehen

Sie können das Verhalten des horizontalen Pod-Autoscalers in derCloud de Confiance -Konsole überwachen. In dieser Ansicht können Sie die atomaren und endgültigen Empfehlungsprotokolle, die in Cloud Logging verfügbar sind, bequem einsehen, ohne den Kontext Ihrer Arbeitslast zu verlassen.

So rufen Sie Logs für horizontales 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 automatische Skalieren Ihrer Arbeitslasten ermitteln. Im Bereich Logs finden Sie dieselben Informationen wie im Bereich Logs. Sie können diese Logs nach Art filtern, z. B. nach „Event“, „Final recommendation“ (Finale Empfehlung) und „Atomic recommendation“ (Atomare Empfehlung). Weitere Informationen zu den verschiedenen Logs finden Sie unter Logtypen.

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 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 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" im Bucket _Default 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 die Speicheranforderungen der potenziellen Log-Volumes sowie alle Auswirkungen auf Leistung oder 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 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 Ihrem KCP_HPA-Log protokolliert.

Atomare Empfehlung

Ein atomares Empfehlungsprotokoll beschreibt eine Empfehlung basierend auf einem einzelnen Messwert, der in Ihrem horizontalen 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 mit dem HPA verknüpft 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: Das 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ärts-Dä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 einem Grund, warum die von HPA vorgeschlagene Empfehlung nicht angewendet wird (z. B. aufgrund von Toleranz); oder none, wenn keine Überschreibung erfolgt.
  • result: Ergebnis der Empfehlung. Es wird entweder eine empfohlene Anzahl von Replikaten vorgeschlagen oder eine Fehlermeldung angezeigt, wenn die Empfehlung nicht berechnet werden kann.

Beispiel für ein Log 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"
}

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 Auf- oder Herunterskalierungsereignis aus, um das Deployment entsprechend anzupassen.

Ein endgültiges Empfehlungslog 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 anwendet.
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 Anzahl der Replikate 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. Bei diesem 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 Mindest- oder Höchstanzahl 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 verknüpft ist, wenn die Betätigung fehlgeschlagen ist.
actuation_time Zeitstempel der Auslösung bei Erfolg.
actuation_latency_seconds Die Zeit in Sekunden, die vom Beginn der Empfehlungsberechnung bis zum erfolgreichen Auslösen 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 berücksichtigt:

  • 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 Cloud de Confiance Support.

Nächste Schritte