In diesem Dokument wird beschrieben, wie Sie einen oder mehrere Messwerte von einem Pod oder einer Arbeitslast an Ihren Load-Balancer senden.
Diese Messwerte stammen aus dem Dienst oder der Anwendung, die Sie ausführen. Ein Beispiel sind die Messwerte, die von der vLLM Engine bereitgestellt werden.
Der Load-Balancer kann diese Daten dann mit
der auslastungsbasierten Lastverteilung
verwenden, um Arbeitslasten effizienter zu verteilen. Mit dieser Funktion können Sie beispielsweise die Regionen mit höherer Arbeitslastnutzung beobachten und den Load-Balancer dann Traffic an die Region mit den verfügbaren Ressourcen weiterleiten lassen. Im vLLM-Beispiel ist ein Messwert, mit dem sich die
Auslastung verfolgen lässt,
vllm:gpu_cache_usage_perc.
Voraussetzungen
Für die Pods gelten folgende Voraussetzungen:
- GKE 1.35.1-gke.1396000 oder höher.
- Die Gateways API ist aktiviert.
- Horizontales Pod-Autoscaling mit dem Leistungsprofil verwenden.
Für die Messwerte gelten folgende Voraussetzungen:
- Auf Messwerte muss über einen HTTP-Endpunkt unter den Pods zugegriffen werden können, die von Ihrem Gateway verteilt werden. Der Standardendpunktpfad ist
/metrics. - Messwerte müssen gemäß dem Prometheus-Standard formatiert sein.
Für Load-Balancer gelten Einschränkungen für Messwertnamen. Der Name darf beispielsweise nicht mehr als 64 Zeichen enthalten. Eine vollständige Liste der Einschränkungen finden Sie in der API-Referenz für
BackendServiceunter Details zum Feldbackends[].customMetrics[].name.Wenn der Messwert Ihres Dienstes diesen Einschränkungen nicht entspricht, können Sie ihn mit dem Feld
exportNameumbenennen.Es werden nur Messwerte vom Typ „Gauge“ zwischen 0 und 1 unterstützt, wobei 1 einer Auslastung von 100 % entspricht.
Labelnamen in Pod-Labelselektoren dürfen keine Sonderzeichen enthalten. Es werden nur Buchstaben von a bis z (Klein- oder Großbuchstaben), Ziffern, Bindestriche und Unterstriche unterstützt.
Pro Cluster können maximal 20 eindeutige Messwerte bereitgestellt werden. Für andere Dienste gelten eigene Limits. Informationen finden Sie beispielsweise unter den Limits und Anforderungen für Load-Balancer. Ein Cluster kann mehr als einen Load Balancer verwenden.
Auslastungsbasiertes GKE-Balancing (UBB) basierend auf benutzerdefinierten Messwerten
Mit dem auslastungsbasierten GKE-Balancing (UBB) können Sie den Load-Balancer Traffic basierend auf der Auslastung Ihrer Backend-Pods verteilen lassen. Anstatt sich auf einen generischen Messwert wie die CPU zu verlassen, können Sie UBB so konfigurieren, dass benutzerdefinierte Messwerte verwendet werden, die für die Leistung Ihrer Anwendung relevanter sind.
Wenn Sie UBB mit benutzerdefinierten Messwerten in GKE verwenden, gelten die folgenden Einschränkungen:
- Nur Gateway API:Sie können UBB mit benutzerdefinierten Messwerten nur mit Diensten verwenden, die Sie mit der Gateway API bereitstellen. GKE verwendet den GKE Gateway Controller, um mit der Gateway API zu interagieren. Die Service API und die Ingress API unterstützen UBB mit benutzerdefinierten Messwerten nicht. Die benutzerdefinierten Messwerte müssen von den Pods stammen, die Mitglieder der Dienste sind.
- Kein Cloud Service Mesh:Sie können UBB nicht mit benutzerdefinierten Messwerten mit Cloud Service Mesh verwenden.
- Nicht unterstützte Load-Balancer:Sie können UBB nicht mit benutzerdefinierten Messwerten mit externen Passthrough-Network-Load-Balancern und externen Proxy-Network-Load-Balancern verwenden.
Messwerte für Load-Balancing bereitstellen
Wählen Sie einen Messwert aus, der bereitgestellt werden soll. Sie können einen beliebigen Messwert auswählen, der von Ihrem Server bereitgestellt wird und die im vorherigen Abschnitt aufgeführten Anforderungen erfüllt. In diesem Beispiel wird ein benutzerdefinierter Messwert namens
queue_depth_utilverwendet.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_NAME loadBalancing: enabled: trueErsetzen Sie Folgendes, um es an Ihre Arbeitslast anzupassen:
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 den Pods entsprechen, 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 dem regulären Ausdruck^[a-z]([a-z0-9_-]*[a-z0-9])?entsprechen und darf nicht länger als 63 Zeichen sein. Das erste Zeichen muss also ein Kleinbuchstabe und alle folgenden Zeichen müssen Bindestriche, Unterstriche, Kleinbuchstaben oder Ziffern sein, mit Ausnahme des letzten Zeichens, das ein Buchstabe oder eine Ziffer sein muss.Optional:
METRIC_PROMETHEUS_NAME: der Prometheus-Messwertname, wie er vom Pod bereitgestellt wird. Mit diesem Feld können Sie den Messwert umbenennen, z. B. weil der vom Pod bereitgestellte Messwertname nicht den vom Load-Balancer festgelegten Namensbeschränkungen entspricht.Eine vollständige Liste der Einschränkungen finden Sie in der API-Referenz für
BackendServiceunter Details zum Feldbackends[].customMetrics[].name.
Führen Sie den folgenden Befehl aus, um das Manifest anzuwenden:
kubectl apply -f FILE_NAME.yamlErsetzen Sie
FILE_NAMEdurch den Namen der YAML-Datei.Wenn Sie die benutzerdefinierte Ressource hinzugefügt haben, wird der Messwert an die Autoscaling API gesendet. Der Messwert wird alle paar Sekunden gelesen und an den Load-Balancer gesendet.
Wenn Sie dieses Signal für das Load-Balancing verwenden möchten, geben Sie eine
GCPBackendPolicyan. Beispiel:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy spec: targetRef: group: "" kind: Service name: store-v1 default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.named_metrics.queue_depth_util dryRun: false
Beachten Sie, dass die von Prometheus gemeldeten Messwerte einem anderen Namensstandard folgen.
Wenn die Messwerte für das Load-Balancing gemeldet werden, fügt der GKE Metrics Agent intern das Präfix gke.named_metrics. hinzu, um die Anforderung der BackendService API zu erfüllen.
Wenn Sie einen zweiten Messwert bereitstellen möchten, führen Sie dieselben Schritte aus, um eine weitere benutzerdefinierte Ressource zu erstellen.
Nachdem Sie die Messwerte für den Load-Balancer bereitgestellt haben, können Sie den Load-Balancer so konfigurieren, dass diese Messwerte verwendet werden. Weitere Informationen finden Sie unter Load-Balancer für die Verwendung benutzerdefinierter Messwerte konfigurieren.
Weitere Informationen zur Verwendung des Load-Balancers finden Sie unter Auslastungsbasiertes Load-Balancing für GKE-Dienste konfigurieren.
Fehlerbehebung bei Messwerten, die für den Load-Balancer bereitgestellt werden
So prüfen Sie, ob die Messwerte korrekt für den Load-Balancer bereitgestellt werden:
- Prüfen Sie die Logs im GKE Metrics Agent. Wenn beim Bereitstellen der Messwerte ein Fehler aufgetreten ist, wird dies möglicherweise in den Logs angezeigt. Weitere Informationen zur Suche nach Fehlern finden Sie unter Fehlerbehebung bei Systemmesswerten.
- Sie können den Load-Balancer im Probelaufmodus verwenden, um alle empfangenen Messwerte zu sehen. Weitere Informationen zum Testen der Messwerte
mit dem Flag
dryRunfinden Sie unter Load-Balancer für die Verwendung benutzerdefinierter Messwerte konfigurieren.
Nächste Schritte
- Weitere Informationen zum auslastungsbasierten Load-Balancing finden Sie unter Auslastungsbasierte Load-Balancer für GKE-Dienste.
- Informationen zum Konfigurieren des auslastungsbasierten Load-Balancing für GKE-Dienste finden Sie unter Auslastungsbasiertes Load-Balancing für GKE-Dienste konfigurieren.