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
minReplicavon 5 und env2 einminReplicavon 2. - Unterschiedliche Skalierungsoptionen für jede Komponente in einer Umgebung festlegen. Beispiel: Die Komponente
udcahat einmaxReplicavon 5 und die Komponentesynchronizerhat einmaxReplicavon 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 environmentexport APIGEE_NAMESPACE=apigee #the namespace where Apigee is deployedexport COMPONENT=runtime #can be udca or synchronizerexport MAX_REPLICAS=2export MIN_REPLICAS=1 - Wenden Sie den Patch an. In diesem Beispiel wird davon ausgegangen, dass sich
kubectlin IhremPATHbefindet: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 Eigenschaft 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.