Skip to content

Estrategias de utilización de Spot Instance

Versiones compatibles: EKS 1.29+, EKS Auto Mode GA Última actualización: February 19, 2026

Esta guía cubre estrategias para usar Spot instances de forma eficaz con EKS Auto Mode, incluidas configuraciones de capacidad mixta, diversificación y manejo de interrupciones.


Estrategia mixta de Spot y On-Demand

Una estrategia mixta logra tanto estabilidad como eficiencia de costos.

yaml
# spot-ondemand-mixed.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: mixed-capacity
spec:
  template:
    spec:
      requirements:
        - key: karpenter.k8s.aws/instance-category
          operator: In
          values: ["m", "c", "r"]
        - key: karpenter.k8s.aws/instance-generation
          operator: Gt
          values: ["5"]
        # Allow both Spot and On-Demand
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot", "on-demand"]
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    consolidateAfter: 1m
---
# Configure Spot preference in Pod
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spot-friendly-app
spec:
  replicas: 10
  selector:
    matchLabels:
      app: spot-friendly
  template:
    metadata:
      labels:
        app: spot-friendly
    spec:
      # Prefer Spot instances
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              preference:
                matchExpressions:
                  - key: karpenter.sh/capacity-type
                    operator: In
                    values: ["spot"]
      # For critical workloads, require On-Demand
      # requiredDuringSchedulingIgnoredDuringExecution:
      #   nodeSelectorTerms:
      #     - matchExpressions:
      #         - key: karpenter.sh/capacity-type
      #           operator: In
      #           values: ["on-demand"]
      containers:
        - name: app
          image: my-app:latest
          resources:
            requests:
              cpu: 500m
              memory: 512Mi

Pautas de selección del tipo de capacidad

Tipo de workloadCapacidad recomendadaJustificación
Servicios web sin estadoSpot preferidoPuede manejar interrupciones
Procesamiento por lotesSolo SpotAhorro de costos, reintentable
Bases de datosSolo On-DemandIntegridad de datos
Runners de CI/CDSpot preferidoAhorro de costos, reintentable
Inferencia de machine learningMixtaEquilibra costo y disponibilidad
Entrenamiento de machine learningMixta con checkpointingDe larga duración, puede crear checkpoints

Diversificación de Spot Instance

Use tipos de instancia diversos para distribuir el riesgo de interrupción.

yaml
# diversified-spot.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: diversified-spot
spec:
  template:
    spec:
      requirements:
        # Various instance families
        - key: karpenter.k8s.aws/instance-category
          operator: In
          values: ["m", "c", "r", "i", "d"]
        # Various generations
        - key: karpenter.k8s.aws/instance-generation
          operator: In
          values: ["5", "6", "7"]
        # Various sizes
        - key: karpenter.k8s.aws/instance-size
          operator: In
          values: ["large", "xlarge", "2xlarge"]
        # Various architectures
        - key: kubernetes.io/arch
          operator: In
          values: ["amd64", "arm64"]
        # Use only Spot
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot"]
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
  # Fast re-provisioning on Spot interrupt
  disruption:
    consolidationPolicy: WhenEmpty
    consolidateAfter: 30s

Mejores prácticas de diversificación

EstrategiaBeneficioConfiguración
Varias familias de instanciasReduce interrupciones correlacionadas["m", "c", "r", "i", "d"]
Varias generacionesAccede a un pool de capacidad más grande["5", "6", "7"]
Varios tamañosFlexibilidad en el aprovisionamiento["large", "xlarge", "2xlarge"]
Varias arquitecturasPool de capacidad 2x["amd64", "arm64"]

Manejo de interrupciones de Spot

Configuración de Disruption Budget

yaml
# spot-disruption-budget.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: spot-with-disruption-budget
spec:
  template:
    spec:
      requirements:
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot"]
        - key: karpenter.k8s.aws/instance-category
          operator: In
          values: ["m", "c", "r"]
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    consolidateAfter: 1m
    # Limit concurrent node disruptions
    budgets:
      - nodes: "10%"    # Only 10% of total nodes simultaneously
      - nodes: "3"      # Or maximum 3 nodes
      # Minimize disruptions during business hours
      - nodes: "0"
        schedule: "0 9-18 * * mon-fri"  # Weekdays 9-18
        duration: 9h

Configuración de Pod para conciencia de Spot

yaml
# Configure Spot interrupt handling in Pod
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spot-aware-app
spec:
  replicas: 5
  selector:
    matchLabels:
      app: spot-aware
  template:
    metadata:
      labels:
        app: spot-aware
    spec:
      # Allow time for graceful shutdown
      terminationGracePeriodSeconds: 120
      containers:
        - name: app
          image: my-app:latest
          lifecycle:
            preStop:
              exec:
                command: ["/bin/sh", "-c", "sleep 90"]
      # Spread across multiple AZs
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: topology.kubernetes.io/zone
          whenUnsatisfiable: DoNotSchedule
          labelSelector:
            matchLabels:
              app: spot-aware

Lista de comprobación para el manejo de interrupciones

ElementoDescripciónImplementación
Apagado ordenadoManeje SIGTERM correctamenteterminationGracePeriodSeconds
Hook PreStopRetrasa la terminaciónlifecycle.preStop
Distribución multi-AZSobrevive a interrupciones de toda una AZtopologySpreadConstraints
Varias réplicasSin punto único de fallareplicas > 1
Externalización del estadoNo almacene estado localmenteUse bases de datos/cachés externos

Ejemplos de ahorro de costos

+-----------------------------------------------------------------------------+
|                       Spot Instance Cost Savings Examples                    |
+-----------------------------------------------------------------------------+
|                                                                              |
|  Workload Type          On-Demand Cost   Spot Cost      Savings             |
|  ---------------------------------------------------------------------------  |
|  Batch Processing        $1,000/month    $300/month     70%                 |
|  Dev/Test Environment    $2,000/month    $500/month     75%                 |
|  CI/CD Pipeline          $500/month      $150/month     70%                 |
|  Non-critical API Server $3,000/month    $1,200/month   60%                 |
|                                                                              |
|  * Spot instance prices vary based on supply and demand                      |
|                                                                              |
+-----------------------------------------------------------------------------+

Cálculo del ahorro con Spot

Para estimar sus posibles ahorros con Spot:

  1. Identifique workloads aptos para Spot: Sin estado, tolerantes a fallas, flexibles
  2. Revise el historial de precios de Spot: Use AWS Spot Instance Advisor
  3. Calcule el costo base On-Demand: Gasto actual o proyectado
  4. Aplique el descuento promedio de Spot: Normalmente 60-90% menos que On-Demand
  5. Considere la sobrecarga por interrupciones: Cómputo adicional para reaprovisionamiento

Fórmula de ahorro con Spot

Estimated Monthly Savings =
    (On-Demand Hours * On-Demand Price) -
    (Spot Hours * Spot Price) -
    (Interrupt Overhead * On-Demand Price)

Where:
- Interrupt Overhead = Estimated interrupts * Recovery time * Instance count

Resumen de mejores prácticas de Spot

PrácticaDescripción
Diversificar tipos de instanciaUse más de 10 tipos de instancia para reducir el riesgo de interrupción
Usar varias AZsDistribuya en más de 3 AZs para disponibilidad
Establecer períodos de gracia adecuadosPermita más de 120 segundos para el apagado ordenado
Implementar health checksDetecte y reemplace pods no saludables rápidamente
Usar distribución topológicaEvite que todas las réplicas estén en el mismo pool de Spot
Externalizar el estadoNo almacene datos críticos en nodos Spot
Establecer disruption budgetsLimite las interrupciones concurrentes
Monitorear métricas de SpotHaga seguimiento de interrupciones y ahorros

< Anterior: Comportamiento de escalado | Tabla de contenidos | Siguiente: Operaciones >