Todos os produtos
Search
Central de documentação

Elastic Container Instance:Execute jobs usando instâncias preemptíveis do ECI

Última atualização: Jul 05, 2026

A execução contínua de jobs em lote e cargas de trabalho tolerantes a falhas pode gerar custos elevados em instâncias sob demanda. As instâncias preemptíveis permitem executar essas cargas em Pods baseados no Elastic Container Instance (ECI) com custo significativamente menor. O controlador de Job do Kubernetes substitui automaticamente qualquer Pod recuperado antes da conclusão do job.

Cargas de trabalho adequadas

Use instâncias preemptíveis para cargas de trabalho que toleram interrupções:

Adequado

Não adequado

Jobs em lote e tarefas pontuais

Aplicações com estado

Aplicações stateless e tolerantes a falhas, como serviços web escaláveis

Serviços de longa duração que não suportam interrupções durante a execução

Tarefas computacionais de curta duração onde reinícios são aceitáveis

Cargas cujo tempo de inicialização ou encerramento excede a janela de pré-liberação de 5 minutos

Como funciona

Ao criar uma instância preemptível, você define uma política de lance. A instância é provisionada quando o preço do seu lance supera o preço de mercado em tempo real e há estoque suficiente de recursos para aquele tipo de instância.

Período de proteção: Após a criação, a instância executa por um período de proteção de 1 hora (padrão), com faturamento baseado no preço de mercado no momento da compra.

Após o período de proteção: O sistema verifica o preço de mercado e o estoque a cada 5 minutos. Caso o preço de mercado ultrapasse o valor do seu lance ou o estoque se esgote, a instância será liberada. Um evento SpotToBeReleased é enviado à lista de eventos do Kubernetes aproximadamente 5 minutos antes da liberação. Aproveite essa janela para interromper o tráfego de entrada ou salvar o estado da sua carga de trabalho.

Continuidade do job: Quando um Pod é liberado antes da conclusão do job, o controlador de Job do Kubernetes cria automaticamente um novo Pod para dar continuidade à tarefa. O Pod original permanece com o status BidFailed.

Limitações

  • O período de proteção padrão é de 1 hora.

  • Após o término da proteção, a disponibilidade da instância depende do preço de mercado e do estoque de recursos, sem garantia de uptime.

  • O evento SpotToBeReleased chega cerca de 5 minutos antes da liberação. Se o encerramento limpo da sua carga de trabalho levar mais de 5 minutos, as instâncias preemptíveis podem não ser a melhor opção.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Um cluster ACK Serverless

  • O kubectl configurado para se conectar ao cluster

Execute um job em uma instância preemptível

Etapa 1: Crie o manifesto do job

Crie um arquivo chamado spot_job.yaml com o seguinte conteúdo:

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

A anotação k8s.aliyun.com/eci-spot-strategy defina a política de lance:

Valor

Descrição

SpotAsPriceGo

Adota automaticamente o preço de mercado no momento da compra como valor do lance.

SpotWithPriceLimit

Utiliza um preço máximo por hora definido por você. Adicione a anotação k8s.aliyun.com/eci-spot-price-limit para especifique o valor.

A anotação k8s.aliyun.com/eci-use-specs lista múltiplos tipos de instância. Especificar vários tipos aumenta a probabilidade de criação da instância preemptível quando o estoque de um tipo específico estiver baixo.

Etapa 2: Crie o job

kubectl create -f spot_job.yaml

Etapa 3: Monitore o status do Pod

kubectl get pod

O Pod passa pelos seguintes status:

Running — o job está em andamento:

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

Completed — o job foi concluído com sucesso:

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

BidFailed — o Pod foi liberado antes da conclusão do job. O controlador de Job já criou um novo Pod (pi-kp5zx) para continuar a execução:

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

Um evento SpotToBeReleased é emitido aproximadamente 5 minutos antes de um Pod entrar em BidFailed. Para visualize o evento, execute kubectl get events. Para obter detalhes sobre como lidar com eventos de pré-liberação, consulte Liberação de instâncias preemptíveis.

Próximos passos