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.
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Make sure that billing is enabled for your Trusted Cloud project.
-
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:
Logbetrachter (
roles/logging.viewer
) - Auf Ihrem GKE-Cluster muss Version
1.31.5-gke.1090000
oder höher oder Version1.32.1-gke.1260000
oder höher ausgeführt werden. - Aktivieren Sie Cloud Logging in Ihrem GKE-Cluster. Es gelten die Cloud Logging-Preise.
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.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.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.
index
: Index des Messwerts imSpec 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.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); odernone
, 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.replicas
: Replikatnummer nach der Stabilisierung.reason
: angewendeter Stabilisierungstyp –scaleUp
oderscaleDown
.stabilization_window
: Der zugehörige Stabilisierungszeitraum in Sekunden.replicas_before_stabilization
: Empfohlene Anzahl von Replikaten vor der Stabilisierung.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 undMinChange
entspricht MinChangePolicySelect. Wenn die Skalierung deaktiviert ist, ist das FeldselectPolicy
nicht vorhanden.replicas_before_limitation
: Empfohlene Anzahl von Replikaten vor der Einschränkung.- 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. - Weitere Informationen finden Sie unter GKE-Logs.
- GKE-Logs verstehen
- Beispielabfragen zum Suchen bestimmter GKE-Logs
- Pod-Autoscaling anhand von Messwerten optimieren
APIs aktivieren
Enable the GKE, and Cloud Logging 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.
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
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:
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:
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:
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:
|
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:
|
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:
|
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:
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.