Les services Knative connaissent souvent des pics de trafic prévisibles, tels que les heures de pointe, les périodes de calme nocturnes ou les fenêtres planifiées pour les traitements par lots. L'Advanced Horizontal Pod Autoscaler (AHPA) gère ces deux schémas : il anticipe la demande à partir de métriques historiques (RPS, concurrence, CPU et mémoire) et met à l'échelle le service de manière proactive. Par ailleurs, instanceBounds permet d'imposer des valeurs plancher et plafond pour le nombre de réplicas durant des plages horaires spécifiques, en utilisant des expressions cron.
Lorsqu'une fenêtre planifiée débute, AHPA augmente le nombre de pods jusqu'au minimum défini. À la fin de la fenêtre, AHPA réduit le nombre de pods en conséquence. Cette approche basée sur un planning s'avère utile pour garantir un nombre minimal de réplicas sécurisé pendant les heures ouvrables, tout en permettant une réduction à zéro complète durant la nuit.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Déployé Knative dans votre cluster. Pour plus d'informations, consultez la rubrique Déployer Knative.
Déployé AHPA. 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 une ressource AdvancedHorizontalPodAutoscalerTemplate qui définit à la fois les métriques de mise à l'échelle prédictive et les limites de réplicas planifiées. Appliquez le fichier YAML suivant à votre cluster :
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscalerTemplate
metadata:
name: ahpa-demo
spec:
metrics:
- type: Resource
resource:
name: rps
target:
type: Utilization
averageUtilization: 10 # Scale out when RPS per pod exceeds 10
maxReplicas: 50 # Global ceiling
minReplicas: 0 # Global floor (allows scale-to-zero)
prediction:
quantile: 95 # Use 95th-percentile forecast for conservative scaling
scaleUpForward: 180 # Predict 180 seconds ahead to scale before demand arrives
instanceBounds:
- startTime: "2023-06-01 00:00:00" # Bounds active from this date
endTime: "2123-06-01 00:00:00" # Bounds active until this date
bounds:
- cron: '* 0-6 ? * *' # 12 AM – 6 AM: allow scale-to-zero
maxReplicas: 50
minReplicas: 0
- cron: '* 7-9 ? * *' # 7 AM – 9 AM: maintain at least 5 replicas
maxReplicas: 50
minReplicas: 5
- cron: '* 10-16 ? * *' # 10 AM – 4 PM: maintain at least 10 replicas
maxReplicas: 50
minReplicas: 10
- cron: '* 17-23 ? * *' # 5 PM – 11 PM: maintain at least 2 replicas
maxReplicas: 50
minReplicas: 2
Paramètres clés :
| Paramètre | Obligatoire | Description |
|---|---|---|
metrics |
Oui | Métriques utilisées pour la mise à l'échelle automatique. Valeurs prises en charge : RPS, concurrence, CPU et mémoire. |
maxReplicas |
Oui | Nombre maximal de réplicas autorisé globalement. |
minReplicas |
Oui | Nombre minimal de réplicas à maintenir globalement. |
instanceBounds |
Non | Plage horaire durant laquelle AHPA applique des limites de réplicas par période. Contient startTime et endTime. |
bounds |
Non | Limites de réplicas par période. Chaque entrée spécifie une expression cron, ainsi que maxReplicas et minReplicas. |
Syntaxe des expressions cron
Une expression cron se compose de cinq champs séparés par des espaces. Pour une référence complète, consultez la documentation relative aux Expressions cron.
| Champ | Caractères spéciaux | Obligatoire | Valeurs valides |
|---|---|---|---|
| Minutes | * / , - |
Oui | 0–59 |
| Heures | * / , - |
Oui | 0–23 |
| Jour du mois | * / , - ? |
Oui | 1–31 |
| Mois | * / , - |
Oui | 1–12 ou JAN–DEC (insensible à la casse) |
| Jour de la semaine | * / , - ? |
Non | 0–6 ou SUN–SAT (insensible à la casse). Si omis, tous les jours de la semaine s'appliquent. |
Caractères spéciaux :
*— correspond à n'importe quelle valeur (par exemple,*dans le champ Heures signifie chaque heure)/— définit un pas (par exemple,/5signifie toutes les 5 unités),— sépare les valeurs individuelles (par exemple,1,3,5)-— définit une plage (par exemple,1-5)?— indique une valeur variable ; valide uniquement dans les champs Jour du mois et Jour de la semaine
Étape 2 : Créer un service Knative et activer AHPA
Associez AHPA à un service Knative en ajoutant deux annotations au manifeste du service. Lorsque vous mettez à jour le modèle AHPA, Knative crée automatiquement une nouvelle révision.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, localisez votre cluster et cliquez sur son nom. Dans le volet de navigation de gauche, choisissez Applications > Knative.
-
Sous l'onglet Services, définissez le paramètre Namespace sur default, puis cliquez sur Create from Template. Collez le fichier YAML suivant, puis cliquez sur Create.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go-demo spec: template: metadata: annotations: autoscaling.knative.dev/class: ahpa.autoscaling.knative.dev # Use the AHPA autoscaler autoscaling.knative.dev.alibabacloud/ahpa-template: "ahpa-demo" # Reference the AHPA template from Step 1 spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"Une fois le service créé, notez son adresse de passerelle et son nom de domaine, car vous en aurez besoin à l'étape 3.

Étape 3 : Accéder au service
Exécutez la commande suivante pour envoyer une requête au service. Remplacez le nom de domaine et l'adresse de passerelle par les valeurs notées à l'étape 2.
# 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.com
Résultat attendu :
Hello Knative!
Étape 4 (Facultative) : Vérifier la mise à l'échelle planifiée
Consultez les tendances de mise à l'échelle des pods dans les Monitoring Dashboards de la page Knative. Pour obtenir des instructions de configuration, consultez la rubrique Afficher le tableau de bord de surveillance Knative.
Managed Service for Prometheus ne peut pas collecter les métriques RPS ou de concurrence lorsque le nombre de pods est nul. Vous pouvez consulter ces métriques dans la console uniquement après avoir accédé aux pods de l'application Knative. Lorsque les pods sont en cours d'exécution, les métriques apparaissent dans la console sans aucune étape supplémentaire.

Étapes suivantes
Configurez la mise à l'échelle automatique en fonction des requêtes concurrentes et du RPS sans limites de planning. Pour plus d'informations, consultez la rubrique Activer la mise à l'échelle automatique pour absorber les fluctuations de trafic.