Vous pouvez effectuer le scaling de la plupart des services exécutés dans Kubernetes à partir de la ligne de commande ou dans un remplacement de configuration. Vous pouvez définir des paramètres de scaling pour les services d'exécution Apigee hybride dans le fichier overrides.yaml
.
Service | Mis en œuvre en tant que | Scaling |
---|---|---|
Cassandra | ApigeeDatastore (CRD) | Consultez la page Scaling de Cassandra. |
Ingress/LoadBalancer | Déploiement | Cloud Service Mesh utilise l'autoscaling horizontal des pods (HPA). |
Logger | DaemonSet | Les DaemonSets gèrent les instances dupliquées d'un pod sur tous les nœuds. Ils évoluent donc lorsque vous effectuez le scaling des pods eux-mêmes. |
MART Apigee Connect Watcher |
ApigeeOrganization (CRD) | Pour effectuer un scaling via la configuration, augmentez la valeur de la propriété de configuration mart: replicaCountMax: 2 replicaCountMin: 1 watcher: replicaCountMax: 2 replicaCountMin: 1 connectAgent: replicaCountMax: 2 replicaCountMin: 1 Ces déploiements utilisent un autoscaler horizontal de pods pour l'autoscaling. Définissez la propriété Pour en savoir plus sur la définition des propriétés de configuration, consultez la page Gérer les composants du plan d'exécution. |
Environnement d'exécution Synchronisateur UDCA |
ApigeeEnvironment (CRD) | Pour effectuer un scaling via la configuration, augmentez la valeur de la propriété replicaCountMin pour les stanzas udca , synchronizer et/ou runtime dans le fichier de remplacement. Exemple :
synchronizer: replicaCountMax: 10 replicaCountMin: 1 runtime: replicaCountMax: 10 replicaCountMin: 1 udca: replicaCountMax: 10 replicaCountMin: 1 Remarque : Ces modifications s'appliquent à TOUS les environnements du fichier de remplacement. Si vous souhaitez personnaliser le scaling pour chaque environnement, consultez la section Configurations avancées ci-dessous. Les déploiements utilisent un autoscaler horizontal de pods pour l'autoscaling. Définissez la propriété Pour en savoir plus sur la définition des propriétés de configuration, consultez la page Gérer les composants du plan d'exécution. |
Configurations avancées
Dans certains cas, vous devrez peut-être utiliser des options de scaling avancées. Exemples de scénarios :
- Définir différentes options de scaling pour chaque environnement. Par exemple, où "env1" a une valeur
minReplica
de 5 et "env2" a une valeurminReplica
de 2. - Définir différentes options de scaling pour chaque composant d'un environnement. Par exemple, où le composant
udca
a une valeurmaxReplica
de 5 et le composantsynchronizer
une valeurmaxReplica
de 2.
L'exemple suivant montre comment utiliser la commande kubernetes patch
pour modifier la propriété maxReplicas
du composant runtime
:
- Créez des variables d'environnement à utiliser avec la commande :
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
- Appliquez le correctif. Notez que cet exemple suppose que
kubectl
se trouve dans votre fichierPATH
: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
- Vérifiez que la modification a bien eu lieu en exécutant la commande suivante :
kubectl get hpa -n $APIGEE_NAMESPACE
Scaling basé sur l'environnement
Par défaut, le scaling est décrit au niveau de l'organisation. Vous pouvez remplacer les paramètres par défaut en spécifiant un scaling spécifique à l'environnement dans le fichier overrides.yaml
, comme illustré dans l'exemple suivant :
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
Scaling basé sur les métriques
Avec le scaling basé sur les métriques, l'environnement d'exécution peut utiliser les métriques du processeur et des applications pour procéder au scaling des pods apigee-runtime
.
L'API Horizontal Pod Autoscaler (HPA) de Kubernetes utilise le champ hpaBehavior
pour configurer les comportements de scaling à la hausse et à la baisse du service cible.
Le scaling basé sur les métriques n'est pas disponible pour les autres composants d'un déploiement hybride.
Le scaling peut être ajusté en fonction des métriques suivantes:
Métrique | Mesure | Remarques |
---|---|---|
serverMainTaskWaitTime | Temps d'attente moyen (en ms) de la file d'attente de traitement dans les instances d'exécution pour les requêtes de proxy afin de traiter les stratégies. | Cette métrique mesure l'impact de la complexité des règles associées au flux de requêtes proxy. |
serverNioTaskWaitTime | Temps d'attente moyen (en ms) de la file d'attente de traitement dans les instances d'exécution pour les requêtes de proxy au niveau de la couche HTTP. | Cette métrique mesure l'impact du nombre et de la taille de la charge utile sur les requêtes et les réponses du proxy. |
L'exemple suivant du stanza runtime
dans overrides.yaml
illustre les paramètres standards (et les plages autorisées) pour le scaling de pods apigee-runtime
dans une mise en œuvre hybride:
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)
Appliquez ces paramètres en mettant à jour le graphique apigee-runtime
pour chaque environnement. Exemple :
helm upgrade $ENV_RELEASE_NAME apigee-runtime/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set env=$ENV_NAME \ -f overrides.yaml
Activer ou désactiver le scaling basé sur les métriques
Le scaling basé sur les métriques est activé par défaut. Vous pouvez activer ou désactiver le scaling basé sur les métriques en définissant la propriété customAutoscaling.enabled
sur true
ou false
. Appliquez les modifications à la propriété customAutoscaling.enabled
en mettant à jour le graphique apigee-telemetry
. Exemple :
helm upgrade telemetry apigee-telemetry/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
Configurer un scaling plus agressif
L'augmentation des valeurs percent
et pods
de la règle de scaling à la hausse entraîne une règle de scaling à la hausse plus agressive. De même, l'augmentation des valeurs percent
et pods
dans scaleDown
entraînera une règle de scaling à la baisse agressive. Exemple :
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
Dans l'exemple ci-dessus, la valeur scaleDown.pods.value
est augmentée à 5, la valeur scaleUp.percent.value
est augmentée à 30 et la valeur scaleUp.pods.value
est augmentée. à 5.
Configurer un scaling moins agressif
Les valeurs de configuration hpaBehavior
peuvent également être réduites pour mettre en œuvre des règles de scaling à la hausse et à la baisse moins agressives. Exemple :
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
Dans l'exemple ci-dessus, scaleDown.percent.value
est réduit à 10, scaleDown.pods.value
est réduit à 1 et scaleUp.stablizationWindowSeconds
est augmenté. à 180.
Pour plus d'informations sur le scaling basé sur les métriques à l'aide du champ hpaBehavior
, consultez la section Règles de scaling.
Dépannage
Cette section décrit les méthodes de dépannage pour les erreurs courantes que vous pouvez rencontrer lors de la configuration du scaling et de l'autoscaling.
HPA indique unknown
pour les valeurs de métriques
Si le scaling basé sur les métriques ne fonctionne pas et que l'HPA indique unknown
pour les valeurs de métriques, utilisez la commande suivante pour vérifier la sortie du HPA:
kubectl describe hpa HPA_NAME
Lors de l'exécution de la commande, remplacez HPA_NAME par le nom du HPA que vous souhaitez afficher.
Le résultat affiche la cible du processeur et l'utilisation du service, indiquant que le scaling du processeur fonctionnera en l'absence de scaling basé sur les métriques. Pour connaître le comportement de l'autoscaler horizontal de pods avec plusieurs paramètres, consultez la section Scaling sur plusieurs métriques.