Sie können die meisten in Kubernetes ausgeführten Dienste über die Befehlszeile oder per Konfigurationsüberschreibung skalieren. Sie können Skalierungsparameter für Apigee Hybrid-Laufzeitdienste in der overrides.yaml
-Datei festlegen.
Dienst | Implementierung als | Skalieren |
---|---|---|
Cassandra | ApigeeDatastore (CRD) | Weitere Informationen finden Sie unter Cassandra-Skalierung skalieren. |
Ingress/LoadBalancer | Deployment | Cloud Service Mesh verwendet horizontales Pod-Autoscaling (HPAs). |
Logger | DaemonSet | DaemonSets verwalten die Replikate eines Pods auf allen Knoten. Sie skalieren also, wenn Sie die Pods selbst skalieren. |
MART Apigee Connect Watcher |
ApigeeOrganization (CRD) | Zur Skalierung über die Konfiguration erhöhen Sie den Wert des Konfigurationsattributs mart: replicaCountMax: 2 replicaCountMin: 1 watcher: replicaCountMax: 2 replicaCountMin: 1 connectAgent: replicaCountMax: 2 replicaCountMin: 1 Diese Bereitstellungen verwenden ein horizontales Pod-Autoscaling für das Autoscaling. Legen Sie für das Attribut Weitere Informationen zum Festlegen von Konfigurationsattributen finden sich unter Komponenten der Laufzeitebene verwalten. |
Laufzeit Synchronizer UDCA |
ApigeeEnvironment (CRD) | Zur Skalierung über die Konfiguration erhöhen Sie den Wert des Attributs replicaCountMin für die Stanzas udca , synchronizer und/oder runtime in der Überschreibungsdatei. Beispiel:
synchronizer: replicaCountMax: 10 replicaCountMin: 1 runtime: replicaCountMax: 10 replicaCountMin: 1 udca: replicaCountMax: 10 replicaCountMin: 1 Hinweis: Diese Änderungen gelten für ALLE Umgebungen in der Überschreibungendatei. Wenn Sie die Skalierung für jede Umgebung anpassen möchten, lesen Sie den Abschnitt Erweiterte Konfigurationen weiter unten. Bereitstellungen verwenden ein horizontales Pod-Autoscaling für das Autoscaling. Legen Sie für das Attribut Weitere Informationen zum Festlegen von Konfigurationsattributen finden sich unter Komponenten der Laufzeitebene verwalten. |
Erweiterte Konfigurationen
In einigen Szenarien müssen Sie eventuell erweiterte Skalierungsoptionen verwenden. Beispielszenarien:
- Unterschiedliche Skalierungsoptionen für jede Umgebung festlegen. Beispiel: env1 hat ein
minReplica
von 5 und env2 einminReplica
von 2. - Unterschiedliche Skalierungsoptionen für jede Komponente in einer Umgebung festlegen. Beispiel: Die Komponente
udca
hat einmaxReplica
von 5 und die Komponentesynchronizer
hat einmaxReplica
von 2.
Das folgende Beispiel zeigt, wie Sie mit dem Befehl kubernetes patch
das Attribut maxReplicas
für die Komponente runtime
ändern:
- Erstellen Sie Umgebungsvariablen für die Verwendung mit dem Befehl:
export ENV_NAME=my-environment-name
export ENV_RELEASE_NAME=$ENV_NAME # the Helm release name for the environment
export APIGEE_NAMESPACE=apigee #the namespace where Apigee is deployed
export COMPONENT=runtime #can be udca or synchronizer
export MAX_REPLICAS=2
export MIN_REPLICAS=1
- Wenden Sie den Patch an. In diesem Beispiel wird davon ausgegangen, dass sich
kubectl
in IhremPATH
befindet:kubectl patch apigeeenvironment -n $APIGEE_NAMESPACE \ $(kubectl get apigeeenvironments -n $APIGEE_NAMESPACE -o jsonpath='{.items[?(@.spec.name == "'$ENV'" )]..metadata.name}') \ --patch "$(echo -e "spec:\n components:\n $COMPONENT:\n autoScaler:\n maxReplicas: $MAX_REPLICAS\n minReplicas: $MIN_REPLICAS")" \ --type merge
- Prüfen Sie, ob die Änderung erfolgreich war:
kubectl get hpa -n $APIGEE_NAMESPACE
Umgebungsbasierte Skalierung
Standardmäßig wird die Skalierung auf Organisationsebene beschrieben. Sie können die Standardeinstellungen überschreiben. Geben Sie dazu die umgebungsspezifische Skalierung in der Datei overrides.yaml
an, wie im folgenden Beispiel gezeigt:
envs: # Apigee environment name - name: ENV_NAME> components: # Environment-specific scaling override # Otherwise, uses scaling defined at the respective root component runtime: replicaCountMin: 2 replicaCountMax: 20
Messwertbasierte Skalierung
Bei der messwertbasierten Skalierung kann die Laufzeit CPU- und Anwendungsmesswerte verwenden, um die apigee-runtime
-Pods zu skalieren.
Die Kubernetes Horizontal Pod Autoscaler (HPA) API verwendet das Feld hpaBehavior
, um das Verhalten beim Hoch- und Herunterskalieren des Zieldienstes zu konfigurieren.
Die messwertbasierte Skalierung ist für andere Komponenten in einer Hybridbereitstellung nicht verfügbar.
Die Skalierung kann anhand der folgenden Messwerte angepasst werden:
Messwert | Messen | Hinweise |
---|---|---|
serverMainTaskWaitTime | Durchschnittliche Wartezeit (in ms) der Verarbeitungswarteschlange in Laufzeitinstanzen für Proxyanfragen zur Verarbeitung von Richtlinien. | Dieser Messwert misst die Auswirkungen der Komplexität in den mit dem Proxy-Anfrageablauf verknüpften Richtlinien. |
serverNioTaskWaitTime | Durchschnittliche Wartezeit (in ms) der Verarbeitungswarteschlange in Laufzeitinstanzen für Proxyanfragen in der HTTP-Schicht. | Dieser Messwert misst die Auswirkungen der Anzahl und Nutzlastgröße von Proxyanfragen und -antworten. |
Das folgende Beispiel aus der runtime
-Stanza in overrides.yaml
veranschaulicht die Standardparameter (und die zulässigen Bereiche) für die Skalierung von apigee-runtime
-Pods in einer Hybridimplementierung:
runtime: # the following parameters configure metrics-based scaling hpaMetrics: serverMainTaskWaitTime: 400M # (range: 300M to 450M) serverNioTaskWaitTime: 400M # (range: 300M to 450M) targetCPUUtilizationPercentage: 75 hpaBehavior: scaleDown: percent: periodSeconds: 60 # (range: 30 - 180) value: 20 # (range: 5 - 50) pods: periodSeconds: 60 # (range: 30 - 180) value: 2 # (range: 1 - 15) selectPolicy: Min stabilizationWindowSeconds: 120 # (range: 60 - 300) scaleUp: percent: periodSeconds: 60 # (range: 30 - 120) value: 20 # (range: 5 - 100) pods: periodSeconds: 60 # (range: 30 - 120) value: 4 # (range: 2 - 15) selectPolicy: Max stabilizationWindowSeconds: 30 # (range: 30 - 120)
Wenden Sie diese Einstellungen an, indem Sie das apigee-runtime
-Diagramm für jede Umgebung aktualisieren. Beispiel:
helm upgrade $ENV_RELEASE_NAME apigee-runtime/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set env=$ENV_NAME \ -f overrides.yaml
Messwertbasierte Skalierung aktivieren oder deaktivieren
Die messwertbasierte Skalierung ist standardmäßig aktiviert. Sie können die messwertbasierte Skalierung aktivieren oder deaktivieren, indem Sie die Property customAutoscaling.enabled
auf true
oder false
festlegen. Wenden Sie Änderungen auf das customAutoscaling.enabled
-Attribut an, indem Sie das apigee-telemetry
-Diagramm aktualisieren. Beispiel:
helm upgrade telemetry apigee-telemetry/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
Aggressivere Skalierung konfigurieren
Das Erhöhen der Werte percent
und pods
der Hochskalierungsrichtlinie führt zu einer aggressiveren Richtlinie für die Hochskalierung. Entsprechend führt das Erhöhen der Werte percent
und pods
in scaleDown
zu einer aggressiven Herunterskalierungsrichtlinie. Beispiel:
runtime: # ... hpaMetrics: serverMainTaskWaitTime: 400M serverNioTaskWaitTime: 400M targetCPUUtilizationPercentage: 75 hpaBehavior: scaleDown: percent: periodSeconds: 60 value: 20 pods: periodSeconds: 60 value: 4 selectPolicy: Min stabilizationWindowSeconds: 120 scaleUp: percent: periodSeconds: 60 value: 30 pods: periodSeconds: 60 value: 5 selectPolicy: Max stabilizationWindowSeconds: 30
Im obigen Beispiel wird scaleDown.pods.value
auf 5, scaleUp.percent.value
auf 30 und scaleUp.pods.value
auf 5 erhöht.
Weniger aggressive Skalierung konfigurieren
Die hpaBehavior
-Konfigurationswerte können auch reduziert werden, um weniger aggressive Richtlinien zum Hoch- und Herunterskalieren zu implementieren. Beispiel:
runtime: # ... hpaMetrics: serverMainTaskWaitTime: 400M serverNioTaskWaitTime: 400M targetCPUUtilizationPercentage: 75 hpaBehavior: scaleDown: percent: periodSeconds: 60 value: 10 pods: periodSeconds: 60 value: 1 selectPolicy: Min stabilizationWindowSeconds: 180 scaleUp: percent: periodSeconds: 60 value: 20 pods: periodSeconds: 60 value: 4 selectPolicy: Max stabilizationWindowSeconds: 30
Im obigen Beispiel wird scaleDown.percent.value
auf 10 und scaleDown.pods.value
auf 1 verringert. Außerdem wird scaleUp.stablizationWindowSeconds
auf 180 erhöht.
Weitere Informationen zur messwertbasierten Skalierung mit dem Feld hpaBehavior
finden Sie unter Skalierungsrichtlinien.
Fehlerbehebung
In diesem Abschnitt werden Methoden zur Fehlerbehebung für häufige Fehler beschrieben, die beim Konfigurieren der Skalierung und des Autoscalings auftreten können.
HPA zeigt unknown
für Messwerte an
Wenn die messwertbasierte Skalierung nicht funktioniert und der HPA unknown
für Messwerte anzeigt, verwenden Sie den folgenden Befehl, um die HPA-Ausgabe zu prüfen:
kubectl describe hpa HPA_NAME
Ersetzen Sie beim Ausführen des Befehls HPA_NAME durch den Namen des HPA, den Sie aufrufen möchten.
Die Ausgabe zeigt das CPU-Ziel und die Auslastung des Dienstes. Daran erkennen Sie, dass die CPU-Skalierung bei fehlender messwertbasierter Skalierung funktioniert. Informationen zum HPA-Verhalten mit mehreren Parametern finden Sie unter Skalierung für mehrere Messwerte.