Skip to content

Optimización específica por carga de trabajo

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

Esta guía cubre cómo optimizar las configuraciones de EKS Auto Mode para diferentes tipos de cargas de trabajo, incluidos servicios web, procesamiento por lotes, workloads de GPU y entrenamiento de AI/ML.


Servicios web (disponibilidad primero)

yaml
# web-service-optimized.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: web-tier
spec:
  template:
    metadata:
      labels:
        tier: web
    spec:
      requirements:
        # General-purpose instances
        - key: karpenter.k8s.aws/instance-category
          operator: In
          values: ["m"]
        - key: karpenter.k8s.aws/instance-size
          operator: In
          values: ["large", "xlarge", "2xlarge"]
        # Use only On-Demand (availability first)
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["on-demand"]
      taints:
        - key: tier
          value: web
          effect: NoSchedule
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    consolidateAfter: 5m
    budgets:
      - nodes: "10%"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-frontend
spec:
  replicas: 10
  selector:
    matchLabels:
      app: web-frontend
  template:
    metadata:
      labels:
        app: web-frontend
    spec:
      tolerations:
        - key: tier
          value: web
          effect: NoSchedule
      nodeSelector:
        tier: web
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              podAffinityTerm:
                labelSelector:
                  matchLabels:
                    app: web-frontend
                topologyKey: kubernetes.io/hostname
      containers:
        - name: web
          image: my-web-app:latest
          resources:
            requests:
              cpu: 500m
              memory: 512Mi
            limits:
              cpu: 1000m
              memory: 1Gi
          readinessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 15
            periodSeconds: 20

Resumen de optimización para servicios web

AspectoRecomendaciónJustificación
Tipo de capacidadOn-DemandRequisito de alta disponibilidad
Familia de instanciasSerie M (propósito general)CPU/memoria equilibradas
Anti-affinityPor hostnameDistribuir entre nodos
Health checksTanto readiness como livenessDetección rápida de fallos
PDBminAvailable: N-1Mantener el Service durante las actualizaciones

Procesamiento por lotes (costo primero, Spot)

yaml
# batch-processing-optimized.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: batch-tier
spec:
  template:
    metadata:
      labels:
        tier: batch
    spec:
      requirements:
        # Compute-optimized
        - key: karpenter.k8s.aws/instance-category
          operator: In
          values: ["c"]
        - key: karpenter.k8s.aws/instance-size
          operator: In
          values: ["xlarge", "2xlarge", "4xlarge"]
        # Use only Spot (cost first)
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot"]
        # Various instance types for better Spot availability
        - key: karpenter.k8s.aws/instance-generation
          operator: In
          values: ["5", "6", "7"]
      taints:
        - key: tier
          value: batch
          effect: NoSchedule
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
  disruption:
    consolidationPolicy: WhenEmpty
    consolidateAfter: 30s
---
apiVersion: batch/v1
kind: Job
metadata:
  name: data-processing
spec:
  parallelism: 20
  completions: 100
  backoffLimit: 10
  template:
    spec:
      tolerations:
        - key: tier
          value: batch
          effect: NoSchedule
      nodeSelector:
        tier: batch
      restartPolicy: OnFailure
      terminationGracePeriodSeconds: 30
      containers:
        - name: processor
          image: my-batch-processor:latest
          resources:
            requests:
              cpu: 2000m
              memory: 4Gi
            limits:
              cpu: 4000m
              memory: 8Gi
          env:
            - name: SPOT_AWARE
              value: "true"

Resumen de optimización para procesamiento por lotes

AspectoRecomendaciónJustificación
Tipo de capacidadSolo SpotMáximo ahorro de costos
Familia de instanciasSerie C (optimizada para cómputo)Cargas de trabajo intensivas en CPU
Diversidad de instanciasVarias generacionesMejor disponibilidad de Spot
Política de reinicioOnFailureGestionar interrupciones de Spot
ConsolidaciónAgresiva (30s)Limpieza rápida después de los jobs

Workloads de GPU (p5, g5)

yaml
# gpu-workload-optimized.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: gpu-tier
spec:
  template:
    metadata:
      labels:
        tier: gpu
        accelerator: nvidia
    spec:
      requirements:
        # GPU instances
        - key: karpenter.k8s.aws/instance-category
          operator: In
          values: ["g", "p"]
        - key: karpenter.k8s.aws/instance-gpu-manufacturer
          operator: In
          values: ["nvidia"]
        # Specific GPU instance types
        - key: node.kubernetes.io/instance-type
          operator: In
          values: ["g5.xlarge", "g5.2xlarge", "g5.4xlarge", "p5.48xlarge"]
        # On-Demand (GPU Spot availability is low)
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["on-demand"]
      taints:
        - key: nvidia.com/gpu
          value: "true"
          effect: NoSchedule
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: gpu-nodeclass
  limits:
    nvidia.com/gpu: 16
  disruption:
    consolidationPolicy: WhenEmpty
    consolidateAfter: 10m  # GPU takes longer to start
---
apiVersion: eks.amazonaws.com/v1
kind: NodeClass
metadata:
  name: gpu-nodeclass
spec:
  amiFamily: AL2023
  blockDeviceMappings:
    - deviceName: /dev/xvda
      ebs:
        volumeSize: 200Gi  # Large volume for model caching
        volumeType: gp3
        iops: 6000
        throughput: 250
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ml-inference
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ml-inference
  template:
    metadata:
      labels:
        app: ml-inference
    spec:
      tolerations:
        - key: nvidia.com/gpu
          value: "true"
          effect: NoSchedule
      nodeSelector:
        tier: gpu
      containers:
        - name: inference
          image: my-ml-model:latest
          resources:
            limits:
              nvidia.com/gpu: 1
            requests:
              cpu: 4000m
              memory: 16Gi

Guía de selección de instancias GPU

InstanciaGPUMemoria de GPUCaso de uso
g5.xlarge1x A10G24GBInferencia pequeña
g5.2xlarge1x A10G24GBInferencia mediana
g5.4xlarge1x A10G24GBInferencia grande
g5.12xlarge4x A10G96GBServicio de múltiples modelos
p5.48xlarge8x H100640GBEntrenamiento a gran escala

Resumen de optimización para GPU

AspectoRecomendaciónJustificación
Tipo de capacidadOn-DemandLa disponibilidad de GPU Spot es limitada
Almacenamiento200GB+ gp3Caché de modelos, checkpoints
ConsolidaciónRelajada (10m)El arranque de GPU es más lento
LímitesEstablecer límite de nvidia.com/gpuEvitar costos descontrolados de GPU

Workloads de entrenamiento de AI/ML

yaml
# ml-training-optimized.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: ml-training
spec:
  template:
    metadata:
      labels:
        tier: ml-training
    spec:
      requirements:
        # Large-scale GPU instances
        - key: node.kubernetes.io/instance-type
          operator: In
          values: ["p5.48xlarge", "p4d.24xlarge"]
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["on-demand"]
      taints:
        - key: ml-training
          value: "true"
          effect: NoSchedule
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: ml-training-nodeclass
  limits:
    nvidia.com/gpu: 64
---
apiVersion: eks.amazonaws.com/v1
kind: NodeClass
metadata:
  name: ml-training-nodeclass
spec:
  amiFamily: AL2023
  # Enable EFA networking
  blockDeviceMappings:
    - deviceName: /dev/xvda
      ebs:
        volumeSize: 500Gi
        volumeType: gp3
        iops: 16000
        throughput: 1000
    # Additional volume for training data
    - deviceName: /dev/xvdb
      ebs:
        volumeSize: 2000Gi
        volumeType: gp3
---
apiVersion: kubeflow.org/v1
kind: PyTorchJob
metadata:
  name: distributed-training
spec:
  pytorchReplicaSpecs:
    Master:
      replicas: 1
      template:
        spec:
          tolerations:
            - key: ml-training
              value: "true"
              effect: NoSchedule
          nodeSelector:
            tier: ml-training
          containers:
            - name: pytorch
              image: my-training-image:latest
              resources:
                limits:
                  nvidia.com/gpu: 8
    Worker:
      replicas: 3
      template:
        spec:
          tolerations:
            - key: ml-training
              value: "true"
              effect: NoSchedule
          nodeSelector:
            tier: ml-training
          containers:
            - name: pytorch
              image: my-training-image:latest
              resources:
                limits:
                  nvidia.com/gpu: 8

Resumen de optimización para entrenamiento de ML

AspectoRecomendaciónJustificación
Tipo de instanciap5.48xlarge, p4d.24xlargeCapacidad máxima de GPU
AlmacenamientoRaíz de 500GB+, datos de 2TB+Conjuntos de datos grandes, checkpoints
IOPS16000+Escrituras rápidas de checkpoints
RedesCon EFA habilitadoEntrenamiento distribuido
FrameworkPyTorchJob, TFJobSoporte distribuido nativo

Referencia rápida de tipos de workload

WorkloadEstrategia de NodePoolTipos de instanciaCapacidadConsolidación
Servicios webDisponibilidad primeroSerie mOn-DemandModerada (5m)
Backend de APIMixtaSeries m/cMixtaModerada (5m)
Procesamiento por lotesCosto primeroSerie cSolo SpotAgresiva (30s)
CI/CDCosto primeroSeries c/mSpot preferidoAgresiva (1m)
Bases de datosEstabilidad primeroSerie rOn-DemandConservadora (10m)
Inferencia de GPUDisponibilidad primeroSerie g5On-DemandRelajada (10m)
Entrenamiento de MLRendimiento primerop5/p4dOn-DemandRelajada (15m)
Procesamiento de streamsEquilibradaSeries m/cMixtaModerada (5m)

Directrices de recursos de Pod

Workloads limitados por CPU

yaml
resources:
  requests:
    cpu: 2000m      # Request what you need
    memory: 2Gi
  limits:
    cpu: 4000m      # Allow some burst
    memory: 4Gi

Workloads limitados por memoria

yaml
resources:
  requests:
    cpu: 500m
    memory: 8Gi     # Request what you need
  limits:
    cpu: 1000m
    memory: 8Gi     # Limit = request (no overcommit)

Workloads de GPU

yaml
resources:
  requests:
    cpu: 4000m
    memory: 16Gi
  limits:
    nvidia.com/gpu: 1   # GPU limits are always required
    cpu: 8000m
    memory: 32Gi

< Anterior: Ciclo de vida de Node | Tabla de contenidos | Siguiente: Guía de migración >