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.
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
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 Google Cloudgehostet werden. Sie ist bei Google Cloud CLI und dem kubectl-Befehlszeilentool vorinstalliert.
In the Google 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 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 oder1.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:
|
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:
|
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:
|
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
- Weitere Informationen finden Sie unter GKE-Logs.
- Informationen zu GKE-Logs
- Beispielabfragen für die Suche nach bestimmten GKE-Logs
- Weitere Informationen zum Optimieren des Pod-Autoscalings anhand von Messwerten