Pour les applications dont le temps de démarrage est long, comme les services Java ou les charges de travail d'inférence IA, la fonctionnalité d'instance réservée d'ACK Serverless Knative maintient une instance peu coûteuse en permanence. Cela garantit que la première requête après une période d'inactivité est traitée immédiatement, sans attendre un démarrage à froid.
Fonctionnement
Par défaut, Knative réduit le nombre de pods d'un service à zéro lorsque le trafic s'arrête. Lorsqu'une nouvelle requête arrive, le système doit allouer des ressources, extraire l'image et démarrer l'application avant de pouvoir répondre. Ce processus peut prendre plusieurs secondes.
Lorsqu'une instance réservée est activée, le comportement de mise à l'échelle à zéro évolue comme suit :
Arrêt du trafic — Le service Knative réduit ses capacités, mais une instance réservée reste en ligne.
-
Arrivée de la première requête — Deux actions se produisent simultanément :
La requête est acheminée vers l'instance réservée pour un traitement immédiat.
Knative crée des instances aux spécifications standard pour prendre en charge le trafic continu.
Transfert du trafic — Dès que la première instance standard est prête, toutes les requêtes suivantes lui sont acheminées.
Nettoyage — Après avoir traité la requête initiale, l'instance réservée est automatiquement arrêtée.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Déployé Knative
(Requis pour les instances réservées ECI ou ACS) Installé ACK Virtual Node. Consultez la section Composants pour plus de détails
Activer les instances réservées
Ajoutez les annotations suivantes au manifeste de votre service Knative pour activer la fonctionnalité :
| Annotation | Description |
|---|---|
knative.aliyun.com/reserve-instance: "enable" |
Active la fonctionnalité d'instance réservée |
knative.aliyun.com/reserve-instance-type: <type> |
Définit le type d'instance. Valeurs prises en charge : eci (par défaut), ecs, acs |
Les instances réservées fonctionnent en continu et engendrent des frais même lorsqu'aucun trafic n'est traité. Consultez la documentation sur la Facturation pour plus de détails.
Choisir un type d'instance
Utilisez le tableau suivant pour sélectionner le type d'instance adapté à votre charge de travail :
| Type d'instance | Idéal pour | Requiert |
|---|---|---|
| ECI (par défaut) | Charges de travail serverless polyvalentes ; aucune gestion de nœud nécessaire | ACK Virtual Node |
| ACS | Charges de travail nécessitant un contrôle précis de la classe de calcul et des niveaux de qualité | ACK Virtual Node |
| ECS | Charges de travail GPU ou nécessitant un type d'instance ECS spécifique | Un nœud ECS compatible |
Si vous hésitez sur le type à utiliser, commencez par ECI. Cette option couvre la plupart des scénarios polyvalents sans configuration supplémentaire au-delà d'ACK Virtual Node.
Configurer des instances réservées ECI
Elastic Container Instance (ECI) est le type d'instance réservée par défaut. Utilisez l'annotation knative.aliyun.com/reserve-instance-eci-use-specs pour spécifier la taille des ressources, soit par type d'instance, soit par CPU et mémoire.
Spécification par type d'instance
L'exemple suivant spécifie ecs.t6-c1m1.large et ecs.t5-lc1m2.small comme types d'instance candidats :
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-spec-1
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-eci-use-specs: "ecs.t6-c1m1.large,ecs.t5-lc1m2.small"
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8
Spécification par CPU et mémoire
Si vous n'avez pas besoin d'un type d'instance spécifique, définissez les ressources CPU et mémoire requises. L'exemple suivant spécifie une instance avec 1 cœur et 2 GiB de mémoire :
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-spec-2
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-eci-use-specs: "1-2Gi"
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8
Configurer des instances réservées ACS
Les instances réservées Alibaba Cloud Container Compute Service (ACS) vous permettent de spécifier la classe de calcul et les niveaux de qualité. Pour utiliser ACS, installez ACK Virtual Node et ajoutez l'annotation knative.aliyun.com/reserve-instance-type: acs.
Spécification par classe de calcul et qualité
Utilisez knative.aliyun.com/reserve-instance-acs-compute-class pour définir la classe de calcul et knative.aliyun.com/reserve-instance-acs-compute-qos pour définir la qualité de calcul. Ces deux annotations sont facultatives.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-type: acs
# (Optional) Compute class for the ACS pod
knative.aliyun.com/reserve-instance-acs-compute-class: "general-purpose"
# (Optional) Compute quality for the ACS pod
knative.aliyun.com/reserve-instance-acs-compute-qos: "default"
spec:
containers:
- image: registry-vpc.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"
Spécification par CPU et mémoire
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go-resource
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-type: acs
knative.aliyun.com/reserve-instance-cpu-resource-request: "1"
knative.aliyun.com/reserve-instance-memory-resource-request: "2Gi"
spec:
containers:
- image: registry-vpc.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"
Configurer des instances réservées ECS
Utilisez un type d'instance ECS moins coûteux pour réduire les coûts liés à l'inactivité. Les instances réservées ECS sont particulièrement utiles pour les charges de travail GPU.
Charges de travail GPU
L'exemple suivant configure ecs.gn6i-c4g1.xlarge en tant qu'instance réservée GPU aux spécifications réduites pour un service d'inférence Qwen. L'instance standard utilise un GPU complet, tandis que l'instance réservée utilise une spécification GPU plus petite pour traiter la première requête à moindre coût.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
labels:
release: qwen
name: qwen
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/metric: "concurrency"
# Enable and configure an ECS reserved instance. You can configure one or more instance types.
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-type: ecs
knative.aliyun.com/reserve-instance-ecs-use-specs: ecs.gn6i-c4g1.xlarge
labels:
release: qwen
spec:
containers:
- command:
- sh
- -c
- python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code
--served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization
0.95 --quantization gptq --max-model-len=6144
image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1
imagePullPolicy: IfNotPresent
name: vllm-container
resources:
# Resource configuration for the standard instance
limits:
cpu: "16"
memory: 60Gi
nvidia.com/gpu: "1"
requests:
cpu: "8"
memory: 36Gi
nvidia.com/gpu: "1"
volumeMounts:
- mountPath: /mnt/models/Qwen-7B-Chat-Int8
name: qwen-7b-chat-int8
volumes:
- name: qwen-7b-chat-int8
persistentVolumeClaim:
claimName: qwen-7b-chat-int8-dataset
Spécification par CPU et mémoire
L'exemple suivant spécifie une instance ECS réservée avec 1 cœur et 2 GiB de mémoire :
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-resource
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-type: ecs
knative.aliyun.com/reserve-instance-cpu-resource-request: "1"
knative.aliyun.com/reserve-instance-cpu-resource-limit: "1"
knative.aliyun.com/reserve-instance-memory-resource-request: "2Gi"
knative.aliyun.com/reserve-instance-memory-resource-limit: "2Gi"
spec:
containers:
- image: registry-vpc.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
env:
- name: TARGET
value: "Knative"
Configurer un pool d'instances réservées
Une seule instance réservée traite la première requête après une période d'inactivité. Pour les services qui reçoivent régulièrement des pics de trafic soudains, étendez cette capacité à un pool en définissant le nombre de réplicas avec knative.aliyun.com/reserve-instance-replicas.
L'exemple suivant crée un pool de trois instances aux spécifications réduites :
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-reserve-pool
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-replicas: "3"
knative.aliyun.com/reserve-instance-eci-use-specs: "ecs.t6-c1m1.large,ecs.t5-lc1m2.small"
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8
Application en production
Choisissez le type d'instance le moins coûteux capable d'exécuter votre application et de traiter au moins une requête de manière fiable. L'instance réservée ne doit gérer le trafic que pendant la brève période précédant la disponibilité des instances standard. Elle n'a pas besoin de correspondre aux spécifications de l'instance standard.
Utilisez un pool réservé pour les services sujets à de fortes variations de trafic. Si votre service reçoit des pics de trafic soudains, configurez plusieurs réplicas à l'aide de knative.aliyun.com/reserve-instance-replicas pour absorber plus efficacement la charge initiale.
Tenez compte de la facturation continue lors du dimensionnement des instances réservées. Les instances réservées engendrent des frais en permanence, y compris pendant les périodes d'inactivité sans trafic. Utilisez le type d'instance le plus petit capable de traiter une seule requête afin de limiter les coûts d'inactivité.
Facturation
Les instances réservées fonctionnent en continu et engendrent des frais, y compris pendant les périodes sans trafic. Consultez la documentation relative à la facturation pour chaque type d'instance :
Étapes suivantes
Utiliser des instances spot économiques dans Knative
Utiliser HPA dans Knative pour la mise à l'échelle horizontale automatique des pods
Mettre à l'échelle automatiquement les services en fonction des requêtes de trafic
Utiliser AHPA pour mettre en œuvre une mise à l'échelle automatique planifiée