Tous les produits
Search
Centre de documentation

Elastic Container Instance:Exécuter des tâches à l'aide d'instances ECI préemptibles

Dernière mise à jour :Aug 26, 2026

L'exécution continue de tâches par lots et de charges de travail tolérantes aux pannes sur des instances à la demande peut s'avérer coûteuse. Les instances préemptibles vous permettent d'exécuter ces charges de travail sur des Pods basés sur Elastic Container Instance (ECI) à un coût nettement inférieur. Le contrôleur Job de Kubernetes remplace automatiquement tout Pod récupéré avant la fin de la tâche.

Charges de travail adaptées

Utilisez des instances préemptibles pour les charges de travail qui peuvent tolérer une interruption :

Adapté Non adapté
Tâches par lots et tâches ponctuelles Applications avec état
Applications sans état et tolérantes aux pannes, telles que les services web évolutifs Services de longue durée qui ne peuvent pas gérer une interruption en cours de tâche
Tâches de calcul de courte durée où les redémarrages sont acceptables Charges de travail dont le temps de démarrage ou d'arrêt dépasse la fenêtre de pré-libération de 5 minutes

Fonctionnement

Lorsque vous créez une instance préemptible, spécifiez une politique d'enchère. L'instance est créée lorsque votre prix d'enchère dépasse le prix du marché en temps réel et que l'inventaire des ressources pour ce type d'instance est suffisant.

Période de protection : Après sa création, l'instance fonctionne pendant une période de protection d'une heure (par défaut), facturée au prix du marché en vigueur au moment de l'achat.

Après la période de protection : Le système vérifie le prix du marché et l'inventaire toutes les 5 minutes. Si le prix du marché dépasse votre prix d'enchère ou si l'inventaire est épuisé, l'instance est libérée. Un événement SpotToBeReleased est envoyé à la liste des événements Kubernetes environ 5 minutes avant la libération. Utilisez cette fenêtre pour arrêter le trafic entrant ou enregistrer l'état de votre charge de travail.

Continuité de la tâche : Lorsqu'un Pod est libéré avant la fin de la tâche, le contrôleur Job de Kubernetes crée automatiquement un nouveau Pod pour poursuivre l'exécution. Le Pod d'origine est conservé avec le statut BidFailed.

Limites

  • Par défaut, la période de protection est d'une heure.

  • Après la période de protection, la disponibilité de l'instance dépend du prix du marché et de l'inventaire des ressources ; aucune garantie de temps de fonctionnement n'est offerte.

  • L'événement SpotToBeReleased arrive environ 5 minutes avant la libération. Si votre charge de travail nécessite plus de 5 minutes pour s'arrêter proprement, les instances préemptibles peuvent ne pas être adaptées.

Prérequis

Avant de commencer, assurez-vous d'avoir :

  • Un cluster ACK Serverless

  • kubectl configuré pour se connecter au cluster

Exécuter une tâche sur une instance préemptible

Étape 1 : Créer le manifeste de la tâche

Créez un fichier nommé spot_job.yaml avec le contenu suivant :

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    metadata:
      annotations:
        k8s.aliyun.com/eci-use-specs: ecs.c5.large,2-4Gi  # Multiple instance types improve creation success rate
        k8s.aliyun.com/eci-spot-strategy: SpotAsPriceGo    # Use the real-time market price as the bid price
    spec:
      containers:
      - name: pi
        image: registry-vpc.cn-beijing.aliyuncs.com/ostest/perl
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

L'annotation k8s.aliyun.com/eci-spot-strategy définit la politique d'enchère :

Valeur Description
SpotAsPriceGo Utilise automatiquement le prix du marché au moment de l'achat comme prix d'enchère.
SpotWithPriceLimit Utilise un prix horaire maximal que vous définissez. Ajoutez l'annotation k8s.aliyun.com/eci-spot-price-limit pour spécifier le prix.

L'annotation k8s.aliyun.com/eci-use-specs répertorie plusieurs types d'instances. La spécification de plusieurs types augmente les chances de création d'une instance préemptible lorsque l'inventaire d'un type est faible.

Étape 2 : Créer la tâche

kubectl create -f spot_job.yaml

Étape 3 : Surveiller le statut du Pod

kubectl get pod

Le Pod passe par les statuts suivants :

Running — la tâche est en cours :

NAME       READY   STATUS    RESTARTS   AGE
pi-frmr8   1/1     Running   0          35s

Completed — la tâche s'est terminée avec succès :

NAME       READY   STATUS      RESTARTS   AGE
pi-frmr8   0/1     Completed   0          2h

BidFailed — le Pod a été libéré avant la fin de la tâche. Le contrôleur Job a déjà créé un nouveau Pod (pi-kp5zx) pour poursuivre l'exécution :

NAME       READY   STATUS      RESTARTS   AGE
pi-frmr8   1/1     BidFailed   0          4h53m
pi-kp5zx   1/1     Running     0          3h45m
Remarque

Un événement SpotToBeReleased est émis environ 5 minutes avant qu'un Pod ne passe au statut BidFailed. Pour afficher l'événement, exécutez kubectl get events. Pour plus de détails sur la gestion des événements de pré-libération, consultez Libération des instances préemptibles.

Étapes suivantes