In diesem Dokument wird beschrieben, wie Sie einen oder mehrere Messwerte aus einem Pod oder einer Arbeitslast an Ihren Load Balancer senden.
Diese Messwerte stammen von dem Dienst oder der Anwendung, die Sie ausführen. Ein Beispiel finden Sie unter Von der vLLM Engine bereitgestellte Messwerte.
Der Load Balancer kann diese Daten dann mit dem auslastungsbasierten Load Balancing verwenden, um Arbeitslasten effizienter zu verteilen. Sie können dieses Feature beispielsweise verwenden, um die Regionen mit höherer Arbeitslast zu überwachen und den Load Balancer dann den Traffic in die Region mit den verfügbaren Ressourcen umleiten zu lassen. Im vLLM-Beispiel ist vllm:gpu_cache_usage_perc eine Metrik, die nützlich sein kann, um die Auslastung zu verfolgen.
Voraussetzungen
Für die Pods gelten die folgenden Anforderungen:
- 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 die folgenden Anforderungen.
- Messwerte müssen auf einem HTTP-Endpunkt unter den Pods zugänglich sein, für die Ihr Gateway ein Load Balancing durchführt. 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 länger als 64 Zeichen sein. Eine vollständige Liste der Einschränkungen finden Sie in den Details zum Feld
backends[].customMetrics[].namein der API-Referenz fürBackendService.Wenn der Messwert Ihres Dienstes diese Einschränkungen nicht erfüllt, können Sie ihn mit dem Feld
exportNameumbenennen.Es werden nur Messwerte für Anzeigen zwischen 0 und 1 unterstützt. Der Wert 1 entspricht einer Auslastung von 100%.
Labelnamen in Pod-Labelselektoren dürfen keine Sonderzeichen enthalten. Es werden nur Buchstaben (Klein- oder Großbuchstaben) von a bis z, Ziffern, Bindestriche und Unterstriche unterstützt.
Pro Cluster können maximal 20 eindeutige Messwerte bereitgestellt werden. Für andere Dienste gelten eigene Limits. Weitere Informationen finden Sie unter Limits und Anforderungen für Load Balancer. Ein Cluster kann mehr als einen Load Balancer verwenden.
GKE Utilization-Based Balancing (UBB) basierend auf benutzerdefinierten Messwerten
Mit der GKE-nutzungsbasierten Lastverteilung (Utilization-Based Balancing, UBB) können Sie den Load Balancer so konfigurieren, dass er Traffic basierend auf der Auslastung Ihrer Backend-Pods verteilt. Anstatt sich auf einen allgemeinen 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 die nutzungsbasierte Abrechnung mit benutzerdefinierten Messwerten nur mit Diensten verwenden, die Sie über die Gateway API bereitstellen. GKE verwendet den GKE-Gateway-Controller, um mit der Gateway API zu interagieren. Die Service- und Ingress-APIs 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 mit benutzerdefinierten Messwerten nicht 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 verfügbar gemacht werden soll. Sie können jeden 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 die folgenden Elemente entsprechend Ihrer Arbeitslast:
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 verfügbar machen. Der Name muss dem regulären Ausdruck^[a-z]([a-z0-9_-]*[a-z0-9])?entsprechen und darf maximal 63 Zeichen lang sein. Das erste Zeichen muss ein Kleinbuchstabe sein. 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. Sie können dieses Feld verwenden, um den Messwert umzubenennen, z. B. weil der vom Pod bereitgestellte Messwertname nicht den vom Load Balancer festgelegten Namenseinschränkungen entspricht.Eine vollständige Liste der Einschränkungen finden Sie in der API-Referenz für
BackendServiceim Abschnitt zum Feldbackends[].customMetrics[].name.
Wenden Sie das Manifest mit dem folgenden Befehl an:
kubectl apply -f FILE_NAME.yamlErsetzen Sie
FILE_NAMEdurch den Namen der YAML-Datei.Nachdem Sie die benutzerdefinierte Ressource hinzugefügt haben, wird der Messwert an die Autoscaling API übertragen. 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 für Messwerte, die von Prometheus gemeldet werden, ein anderer Namensstandard gilt.
Wenn die Messwerte für das Load-Balancing gemeldet werden, wird ihnen vom GKE Metrics Agent intern das Präfix gke.named_metrics. vorangestellt, um die BackendService API-Anforderung zu erfüllen.
Wenn Sie einen zweiten Messwert verfügbar machen möchten, führen Sie dieselben Schritte aus, um eine weitere benutzerdefinierte Ressource zu erstellen.
Nachdem Sie die Messwerte für den Load-Balancer verfügbar gemacht haben, können Sie ihn so konfigurieren, dass er diese Messwerte verwendet. Weitere Informationen finden Sie unter Load Balancer für die Verwendung benutzerdefinierter Messwerte konfigurieren.
Weitere Informationen zum Arbeiten mit dem Load-Balancer finden Sie unter Auslastungsbasiertes Load-Balancing für GKE-Dienste konfigurieren.
Fehlerbehebung bei Messwerten, die für den Load Balancer verfügbar gemacht werden
So prüfen Sie, ob die Messwerte korrekt für den Load Balancer verfügbar gemacht werden:
- Prüfen Sie die Logs im GKE Metrics Agent. Wenn beim Versuch, die Messwerte zu präsentieren, ein Fehler aufgetreten ist, wird dies möglicherweise in den Logs angezeigt. Weitere Informationen dazu, wie Sie nach Fehlern suchen, finden Sie unter Fehlerbehebung bei Systemmesswerten.
- Sie können den Load Balancer im Probelaufmodus verwenden, um sich alle empfangenen Messwerte anzusehen. 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.
- Auslastungsbasiertes Load Balancing für GKE-Dienste konfigurieren