Advanced Horizontal Pod Autoscaler (AHPA) effectue une mise à l'échelle prédictive en se basant sur les valeurs historiques de métriques telles que le nombre de requêtes par seconde (RPS), la concurrence, l'utilisation du CPU et la mémoire. Il provisionne les ressources à l'avance et maintient le nombre maximal ou minimal de pods spécifié pendant une période donnée. En définissant des expressions cron, vous spécifiez les nombres maximal et minimal de pods pour des plages horaires précises.
Prérequis
Vous avez déployé Knative dans le cluster ACS.
AHPA est déployé dans le cluster ACS. Pour plus d'informations, consultez la rubrique Déployer AHPA.
Étape 1 : Configurer les métriques de mise à l'échelle automatique avec AHPA
Créez un ConfigMap AHPA à partir du contenu YAML ci-dessous, puis déployez AHPA dans le cluster ACS.
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
name: ahpa-demo
spec:
metrics:
- type: Resource
resource:
name: rps
target:
type: Utilization
averageUtilization: 10 # The RPS threshold is set to 10.
maxReplicas: 50 # The maximum number of replicated pods is set to 50.
minReplicas: 0 # The minimum number of replicated pods is set to 0.
prediction:
quantile: 95 # The confidence level of prediction is set to 95%.
scaleUpForward: 180 # The time range of forward prediction is set to 180 seconds.
# The number of replicated pods is limited by the maximum number of replicated pods and the minimum number of replicated pods defined by AHPA from 00:00:00 on June 1, 2023 to 00:00:00 on June 1, 2123.
instanceBounds:
- startTime: "2023-06-01 00:00:00"
endTime: "2123-06-01 00:00:00"
bounds:
# The minimum number of replicated pods is 0 and the maximum number of replicated pods is 50 from 0 am to 6 am.
- cron: '* 0-6 ? * *'
maxReplicas: 50
minReplicas: 0
# The minimum number of replicated pods is 5 and the maximum number of replicated pods is 50 from 7 am to 9 am.
- cron: '* 7-9 ? * *'
maxReplicas: 50
minReplicas: 5
# The minimum number of replicated pods is 10 and the maximum number of replicated pods is 50 from 10 am to 4 pm.
- cron: '* 10-16 ? * *'
maxReplicas: 50
minReplicas: 10
# The minimum number of replicated pods is 2 and the maximum number of replicated pods is 50 from 5 pm to 11 pm.
- cron: '* 17-23 ? * *'
maxReplicas: 50
minReplicas: 2
Paramètre | Obligatoire | Description |
| Oui | Configurez les métriques de mise à l'échelle automatique. Les métriques RPS, concurrence, CPU et mémoire sont prises en charge. |
| Oui | Nombre maximal de pods répliqués autorisé. |
| Oui | Nombre minimal de pods répliqués à garantir. |
| Non | Période durant laquelle le nombre de pods répliqués est limité par les valeurs maximale et minimale définies par AHPA.
|
| Non | Nombres maximal et minimal de pods répliqués pour la période spécifiée.
|
Champs utilisés dans les expressions cron
Champs des expressions cron. Consultez la rubrique Tâches planifiées Cron.
Champ | Caractère spécial | Obligatoire | Description |
Minutes | * / , - | Oui | Valeurs valides : 0 à 59. |
Heures | * / , - | Oui | Valeurs valides : 0 à 23. |
Jour du mois | * / , – ? | Oui | Valeurs valides : 1 à 31. |
Mois | * / , - | Oui | Valeurs valides : 1 à 12 ou JAN à DEC. Remarque Les valeurs valides de JAN à DEC ne sont pas sensibles à la casse. |
Jour de la semaine | * / , – ? | Non | Valeurs valides : 0 à 6 ou SUN à SAT. Remarque
|
Caractères spéciaux utilisés dans les expressions cron :
L'astérisque (*) indique n'importe quelle valeur. Par exemple,
*signifie n'importe quelle minute ou heure.La barre oblique (/) indique la taille du pas. Par exemple,
/5signifie toutes les cinq unités de temps.Les virgules (,) servent de délimiteurs. Par exemple,
1,3,5indique les valeurs 1, 3 et 5.Les traits d'union (-) définissent des plages de valeurs. Par exemple,
1-5indique les valeurs de 1 à 5.Le point d'interrogation (?) est utilisé uniquement dans les champs Jour du mois et Jour de la semaine pour indiquer des valeurs variables.
Étape 2 : Créer un service Knative et activer AHPA pour ce service
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez .
-
Sur la page Knative, cliquez sur l'onglet Services. Sélectionnez default dans la liste déroulante Namespace. Cliquez sur Create from Template, collez le modèle YAML suivant dans l'éditeur, puis cliquez sur Create. Cette opération crée un service nommé helloworld-go-demo.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go-demo spec: template: metadata: annotations: autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev # Specify the AHPA plug-in. autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # If you modify the AHPA template parameter, the corresponding revision is also updated. spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"Une fois le service créé, notez l'adresse de la passerelle et le nom de domaine du service, car ils seront utilisés à l'étape Étape 3 : Accéder au service.
Dans l'onglet Services, vous trouverez l'adresse de la passerelle (par exemple,
alb-xxx.ncs.com) dans la section Gateway. Dans la liste des services, la colonne Default Domain affiche le nom de domaine du service (par exemple,helloworld-go.default.example.com). Pour accéder au service, envoyez une requête à l'adresse de la passerelle en définissant l'en-têteHostsur le nom de domaine par défaut du service.
Étape 3 : Accéder au service
-
Exécutez la commande suivante pour accéder au service :
# helloworld-go-demo.default.example.com is the default domain name of the Service. # alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.com is the gateway address of the Service. curl -H "Host: helloworld-go-demo.default.example.com" http://alb-i5lagvip6fga******.cn-shenzhen.alb.aliyuncs.comRésultat attendu :
Hello Knative!
Étape 4 (Facultative) : Vérifier la mise à l'échelle automatique planifiée
Sur la page Monitoring Dashboards de Knative, vous pouvez consulter les tendances de mise à l'échelle des instances de service Knative. Pour plus d'informations sur le tableau de bord de surveillance Knative, consultez la rubrique Afficher le tableau de bord de surveillance du service Knative.
Si une application Knative est mise à l'échelle à zéro et qu'aucun pod n'est en cours d'exécution, Managed Service for Prometheus ne peut pas collecter de métriques telles que la concurrence des requêtes ou le nombre de requêtes par seconde pour ces pods. Ces métriques n'apparaissent dans la console qu'après l'envoi de requêtes aux pods de l'application Knative.
Si une application Knative n'est pas mise à l'échelle à zéro, la console affiche les métriques telles que la concurrence des requêtes et le nombre de requêtes par seconde pour les pods, même s'ils ne traitent aucune requête.

Références
Vous pouvez configurer la mise à l'échelle automatique en fonction du nombre de requêtes concurrentes des pods et des configurations RPS. Pour plus d'informations, consultez la rubrique Activer la mise à l'échelle automatique pour absorber les fluctuations de trafic.