In diesem Dokument wird beschrieben, wie Sie einen oder mehrere Messwerte aus einem Pod oder einer Arbeitslast an Ihr Autoscaling senden.
Diese Messwerte stammen aus dem Dienst oder der Anwendung, die Sie ausführen. Ein Beispiel für bereitgestellte Messwerte sind die Messwerte, die von der vLLM Engine bereitgestellt werden.
Das Autoscaling für Arbeitslasten kann diese Daten dann verwenden, um Arbeitslasten effizienter zu skalieren. Sie können diese Funktion beispielsweise verwenden, um die Warteschlangentiefe oder aktive Anfragen zu beobachten und dann dem Autoscaling zu erlauben, die Anzahl der Pods zu erhöhen oder zu verringern.
Im vLLM-Beispiel ist ein Messwert, der nützlich sein kann, um die Nutzung zu verfolgen
vllm:gpu_cache_usage_perc.
Voraussetzungen
Für die Pods gelten folgende Voraussetzungen:
- GKE 1.35.1-gke.1396000 oder höher mit Clustern im Rapid Channel.
- Horizontales Pod-Autoscaling mit dem Leistungsprofil verwenden.
Für die Messwerte gelten folgende Voraussetzungen:
- Messwerte müssen über einen HTTP-Endpunkt zugänglich sein. Der Endpunktpfad ist standardmäßig
/metrics. - Messwerte müssen gemäß dem Prometheus-Standard formatiert sein.
- Es werden nur Gauge-Messwerte unterstützt.
- Labelschlüssel in Pod-Labelselektoren dürfen keine Sonderzeichen enthalten. Es werden nur Klein- und Großbuchstaben (a–z), Ziffern, Bindestriche und Unterstriche unterstützt.
- Wenn Sie nach Messwertlabels filtern, muss der Labelschlüssel mit dem regulären Ausdruck
^[a-zA-Z_][a-zA-Z0-9_]*übereinstimmen. Er muss also mit einem Buchstaben oder einem Unterstrich beginnen und darf nur Buchstaben, Ziffern oder Unterstriche enthalten. - Pro Cluster können maximal 20 eindeutige Messwerte bereitgestellt werden.
Messwerte für Autoscaling bereitstellen
Wählen Sie einen Messwert aus, der bereitgestellt werden soll. Sie können einen beliebigen Messwert auswählen, der von Ihrer Arbeitslast bereitgestellt wird und die im vorherigen Abschnitt aufgeführten Anforderungen erfüllt.
Wenn Ihre Arbeitslast mehrere Messwerte mit demselben Namen, aber unterschiedlichen Labels bereitstellt, fügen Sie einen Labelfilter hinzu, damit nur einer ausgewählt wird.
Fügen Sie die folgende benutzerdefinierte Ressource hinzu und ersetzen Sie die Details, die für Ihren Messwert und Pod spezifisch sind:
apiVersion: autoscaling.gke.io/v1beta1 kind: AutoscalingMetric metadata: name: NAME namespace: NAMESPACE spec: metrics: - pod: selector: matchLabels: APP_LABEL_NAME: APP_LABEL_VALUE containers: - endpoint: port: METRIC_PORT path: METRIC_PATH metrics: - gauge: name: METRIC prometheusMetricName: METRIC_PROMETHEUS_NAMEErsetzen Sie Folgendes, damit es Ihrer Arbeitslast entspricht:
NAME: Der Name des AutoscalingMetric-Objekts.NAMESPACE: Der Namespace, in dem sich die Pods befinden.APP_LABEL_NAMEundAPP_LABEL_VALUE: Der Labelname und -wert, die mit den Pods übereinstimmen, die den Messwert ausgeben.METRIC_PORT: Die Portnummer.METRIC_PATH: Der Pfad zum Messwert. Prüfen Sie den Pfad, der von Ihrem Dienst oder Ihrer Anwendung verwendet wird. Dieser Pfad ist oft/metrics.METRIC: Der Name des Messwerts, den Sie bereitstellen. Der Name muss mit dem regulären Ausdruck^[a-z]([-a-z0-9]*[a-z0-9])?übereinstimmen und darf nicht länger als 63 Zeichen sein. Das bedeutet, dass das erste Zeichen ein Kleinbuchstabe sein muss und alle folgenden Zeichen Bindestriche, Kleinbuchstaben oder Ziffern sein müssen. Das letzte Zeichen darf kein Bindestrich sein.Optional:
METRIC_PROMETHEUS_NAME: Der Prometheus-Messwertname, wie er vom Pod bereitgestellt wird. Sie können dieses Feld verwenden, um den Messwert umzubenennen, z. B. weil der vom Pod bereitgestellte Messwertname nicht den vom Autoscaling festgelegten Namensbeschränkungen entspricht.Weitere Informationen zu Namensbeschränkungen finden Sie unter Einschränkungen für horizontales Pod-Autoscaling.
Führen Sie den folgenden Befehl aus, um das Manifest anzuwenden:
kubectl apply -f FILE_NAME_AUTOSCALING_METRIC.yamlErsetzen Sie
FILE_NAME_AUTOSCALING_METRICdurch den Namen der YAML-Datei.Nachdem Sie die benutzerdefinierte Ressource hinzugefügt haben, wird der Messwert an die Autoscaling API gesendet. Der Messwert wird alle paar Sekunden gelesen und an das Autoscaling für Arbeitslasten gesendet.
Nachdem Sie die Messwerte für das Autoscaling bereitgestellt haben, können Sie das Autoscaling für Arbeitslasten so konfigurieren, dass diese Messwerte verwendet werden. Fügen Sie dazu die folgende benutzerdefinierte Ressource hinzu:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: NAME_HPA namespace: NAMESPACE spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: DEPLOYMENT minReplicas: MIN_REPLICAS maxReplicas: MAX_REPLICAS metrics: - type: Pods pods: metric: name: autoscaling.gke.io|NAME|METRIC target: type: AverageValue averageValue: AVERAGE_VALUEErsetzen Sie Folgendes, damit es Ihrer Arbeitslast entspricht:
NAME_HPA: Der Name desHorizontalPodAutoscaler-Objekts.NAMESPACE: Der Namespace, in dem sich die Pods befinden.DEPLOYMENT: Der Name der Bereitstellung, auf die Sie abzielen.MIN_REPLICAS: Die Mindestanzahl von Replikaten, auf die die Bereitstellung skaliert werden kann.MAX_REPLICAS: Die maximale Anzahl von Replikaten, auf die die Bereitstellung skaliert werden kann.NAME: Der Name des AutoscalingMetric-Objekts.METRIC: Der Name des Messwerts, den Sie bereitstellen.AVERAGE_VALUE: Der durchschnittliche Zielwert für den Messwert. Das Autoscaling passt die Anzahl der Replikate an, um einen durchschnittlichen Messwert für alle Pods beizubehalten.
Führen Sie den folgenden Befehl aus, um das Manifest anzuwenden:
kubectl apply -f FILE_NAME_HPA.yamlErsetzen Sie
FILE_NAME_HPAdurch den Namen der YAML-Datei.
Messwerte mit Messwertlabels filtern
Das Filtern von Messwerten mit Messwertlabels ist in GKE 1.36.0-gke.1759000 oder höher verfügbar.
Messwerte enthalten oft Labels. Labels sind Schlüssel/Wert-Paare, mit denen Sie einem Wert Dimensionen hinzufügen können. Für einen Messwert, der die Anzahl der Anfragen an einen HTTP-Endpunkt nach Methode und Umgebung aufschlüsselt, können beispielsweise Labels verwendet werden, um diesen Kontext anzugeben. Dieses Beispiel könnte so aussehen:
http_requests_total{method="GET", env="prod"} 11111
http_requests_total{method="PUT", env="staging"} 22222
Mit Labelfiltern können Sie dafür sorgen, dass Ihre Messwertspezifikation genau mit einem Messwert übereinstimmt. Wenn Sie beispielsweise nur den ersten Messwert im vorherigen Beispiel auswählen möchten, verwenden Sie die folgende Spezifikation für den AutoscalingMetric-Messwert gauge:
apiVersion: autoscaling.gke.io/v1beta1
kind: AutoscalingMetric
metadata:
name: filter-sample
spec:
# Several lines are omitted here.
metrics:
- gauge:
name: http_requests_total
filter:
matchLabels:
method: GET
env: prod
Die Schlüssel der matchLabels-Schlüssel/Wert-Paare müssen mit dem regulären Ausdruck ^[a-zA-Z_][a-zA-Z0-9_]* übereinstimmen. Sie müssen also mit einem Buchstaben oder einem Unterstrich beginnen und dürfen nur Buchstaben, Ziffern oder Unterstriche enthalten.
Fehlerbehebung bei Messwerten, die für das Autoscaling bereitgestellt werden
Sie können den Status der benutzerdefinierten Ressource AutoscalingMetric prüfen, um nach Konfigurationsfehlern zu suchen. Anleitung:
Prüfen Sie die benutzerdefinierte Ressource AutoscalingMetric, indem Sie den folgenden Befehl ausführen:
kubectl describe autoscalingmetric NAME -n NAMESPACEIm Feld
Statusfinden Sie Informationen zu konfigurierten Messwerten, z. B. Warnungen zu Konfigurationsfehlern und den genauen Namen des Messwerts, wie er imHorizontalPodAutoscaler-Objekt angezeigt werden sollte.
Nächste Schritte
- Weitere Informationen zum Autoscaling von Arbeitslasten anhand von Messwerten finden Sie unter Autoscaling von Arbeitslasten anhand von Messwerten.
- Informationen zum Konfigurieren des horizontalen Pod-Autoscaling .
- Weitere Informationen zur Fehlerbehebung beim horizontalen Autoscaling finden Sie unter Fehlerbehebung beim horizontalen Pod-Autoscaling.