Skip to content

Gestión y optimización de costos ​

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

Esta guía cubre estrategias de optimización de costos para EKS Auto Mode, incluidos análisis de costos, medición de ahorros con Spot, right-sizing de recursos e integración con Savings Plans.

Actualización de julio de 2026: las tarifas de gestión de GPU se redujeron hasta un 60% ​

A partir del 1 de julio de 2026, se redujeron las tarifas de gestión de EKS Auto Mode para GPU y tipos de instancia acelerados:

  • G-series: tarifas de gestión reducidas en un 35%
  • P-series y AWS Trainium: tarifas de gestión reducidas en un 60%

Las reducciones se aplican automáticamente a todos los clusters de Auto Mode en cada AWS Region donde EKS Auto Mode está disponible; no se requiere ninguna acción. Auto Mode incluye capacidades creadas para workloads acelerados, como la extracción y descompresión paralelas de imágenes en instancias GPU con almacenamiento NVMe local (para que los contenedores grandes y las imágenes de modelos se inicien más rápido) y reparación de nodes con conocimiento de aceleradores, que detecta fallos de hardware GPU y reemplaza automáticamente los nodes no saludables. Consulta precios de Amazon EKS para ver la tabla de tarifas actualizada. (Anuncio)


Mejores prácticas de optimización de costos ​

yaml
# cost-optimization-best-practices.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: cost-optimized
spec:
  template:
    spec:
      requirements:
        # 1. Allow various instance families
        - key: karpenter.k8s.aws/instance-category
          operator: In
          values: ["m", "c", "r", "i", "d"]

        # 2. Include Graviton (ARM) instances (20% cheaper)
        - key: kubernetes.io/arch
          operator: In
          values: ["amd64", "arm64"]

        # 3. Prioritize Spot instances
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot", "on-demand"]

      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default

  # 4. Aggressive Consolidation
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    consolidateAfter: 1m
---
# Pod settings for cost optimization
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cost-efficient-app
spec:
  replicas: 5
  template:
    spec:
      # Prefer Spot
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              preference:
                matchExpressions:
                  - key: karpenter.sh/capacity-type
                    operator: In
                    values: ["spot"]

      # Appropriate resource requests (prevent overprovisioning)
      containers:
        - name: app
          resources:
            requests:
              cpu: 250m      # Based on actual usage
              memory: 256Mi
            limits:
              cpu: 500m
              memory: 512Mi

Panel de análisis de costos ​

Métricas de costo de CloudWatch ​

Configura un panel de CloudWatch para hacer seguimiento de los costos de Auto Mode:

json
{
  "widgets": [
    {
      "type": "metric",
      "properties": {
        "title": "Node Hours by Capacity Type",
        "metrics": [
          ["Karpenter", "karpenter_nodes_total", "capacity_type", "spot"],
          ["Karpenter", "karpenter_nodes_total", "capacity_type", "on-demand"]
        ],
        "period": 3600,
        "stat": "Average"
      }
    },
    {
      "type": "metric",
      "properties": {
        "title": "Node Provisioning Rate",
        "metrics": [
          ["Karpenter", "karpenter_nodeclaims_created"],
          ["Karpenter", "karpenter_nodeclaims_terminated"]
        ],
        "period": 3600,
        "stat": "Sum"
      }
    }
  ]
}

Integración con Kubecost ​

Para una asignación detallada de costos, integra Kubecost:

bash
# Install Kubecost
helm repo add kubecost https://kubecost.github.io/cost-analyzer/
helm install kubecost kubecost/cost-analyzer \
  --namespace kubecost \
  --create-namespace \
  --set kubecostToken="<your-token>"

Métricas clave de Kubecost para Auto Mode:

MétricaDescripciónCaso de uso
Costo del clusterGasto total de cómputoSeguimiento de presupuesto
Costo de namespaceCosto por namespaceChargeback
Costo de PodCosto por workloadObjetivos de optimización
Costo inactivoRecursos no utilizadosOportunidades de right-sizing
Ahorros de SpotDiferencia entre Spot y On-DemandValidar la estrategia de Spot

Medición de ahorros con Spot Instance ​

Calcular ahorros reales con Spot ​

bash
# Get current node distribution
kubectl get nodes -L karpenter.sh/capacity-type -L node.kubernetes.io/instance-type | \
  awk 'NR>1 {print $6, $7}' | sort | uniq -c

Script de análisis de ahorros con Spot ​

bash
#!/bin/bash
# spot-savings-analysis.sh

# Get Spot and On-Demand node counts
SPOT_NODES=$(kubectl get nodes -l karpenter.sh/capacity-type=spot --no-headers | wc -l)
OD_NODES=$(kubectl get nodes -l karpenter.sh/capacity-type=on-demand --no-headers | wc -l)

echo "Current Node Distribution:"
echo "  Spot nodes: $SPOT_NODES"
echo "  On-Demand nodes: $OD_NODES"
echo "  Spot percentage: $(echo "scale=2; $SPOT_NODES * 100 / ($SPOT_NODES + $OD_NODES)" | bc)%"

# Estimate savings (assuming average 70% Spot discount)
echo ""
echo "Estimated Monthly Savings:"
echo "  If all were On-Demand: \$X,XXX"
echo "  With current Spot mix: \$X,XXX"
echo "  Monthly savings: \$X,XXX (XX%)"

Consultas de AWS Cost Explorer ​

Usa Cost Explorer para analizar los costos de Auto Mode:

  1. Filtrar por tag: eks:cluster-name = your-cluster
  2. Agrupar por: Instance Type o Purchase Option
  3. Intervalo de tiempo: Últimos 30 días
  4. Comparar: gasto de Spot vs On-Demand

Análisis de right-sizing de recursos ​

Recomendaciones de VPA ​

Instala Vertical Pod Autoscaler para obtener recomendaciones de right-sizing:

bash
# Install VPA
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/vpa-v1-crd-gen.yaml
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/vpa-rbac.yaml
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/recommender-deployment.yaml

Configura VPA en modo de recomendación:

yaml
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: my-app-vpa
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  updatePolicy:
    updateMode: "Off"  # Recommendation only
  resourcePolicy:
    containerPolicies:
      - containerName: '*'
        minAllowed:
          cpu: 100m
          memory: 128Mi
        maxAllowed:
          cpu: 4
          memory: 8Gi

Análisis de patrones de uso ​

bash
# Get VPA recommendations
kubectl get vpa my-app-vpa -o jsonpath='{.status.recommendation.containerRecommendations[0]}' | jq

# Compare with current requests
kubectl get deployment my-app -o jsonpath='{.spec.template.spec.containers[0].resources}'

Matriz de decisión de right-sizing ​

Actual vs recomendadoAcciónAhorros esperados
Request > 2x usoReducir request20-50%
Request dentro de 2xÓptimo-
Request < usoAumentar requestEvitar OOM
Limit >> requestReducir limitMejor bin-packing

Estrategia de Savings Plans y Reserved Instances ​

Cómo interactúan Savings Plans con Auto Mode ​

EKS Auto Mode con Savings Plans:

EscenarioSavings Plans se aplicanRecomendación
Nodes On-DemandSíComprar Compute Savings Plans
Nodes SpotNo (ya tienen descuento)No incluir en la cobertura
Instancias GravitonSí (tarifa separada)Considerar ARM Savings Plans
Workloads mixtosParcialCalcular la línea base On-Demand

Dimensionamiento de Savings Plans ​

Recommended Savings Plans Coverage =
    Baseline On-Demand Hours *
    (1 - Expected Spot Percentage) *
    Average Instance Cost

Where:
- Baseline = Minimum sustained usage
- Expected Spot = Target Spot percentage (e.g., 60%)
- Don't over-commit (leave room for Spot)

Mejores prácticas de Savings Plans ​

PrácticaJustificación
Cubrir el 60-70% de la línea base On-DemandDejar margen para la optimización con Spot
Usar Compute Savings PlansFlexibilidad entre tipos de instancia
Revisar trimestralmenteAjustar a medida que evoluciona el workload
Excluir instancias GPUPlanes específicos de GPU separados

Reserved Instances vs Savings Plans ​

FactorReserved InstancesSavings Plans
FlexibilidadEspecífica de la instanciaCualquier instancia
Ajuste con Auto ModeDeficiente (las instancias varían)Bueno
Compromiso1 o 3 años1 o 3 años
RecomendaciónNo recomendadoRecomendado

Checklist de optimización de costos ​

Victorias rápidas ​

AcciónAhorros estimadosEsfuerzo
Habilitar Spot instances60-90% en nodes SpotBajo
Agregar soporte para ARM/Graviton20% en instancias ARMBajo
Ajustar requests con right-sizing10-30%Medio
Habilitar consolidación10-20%Bajo

Optimizaciones de mediano plazo ​

AcciónAhorros estimadosEsfuerzo
Implementar VPA15-30%Medio
Comprar Savings Plans20-40% en On-DemandBajo
Optimización Multi-AZ5-10%Medio
Programación de workloads10-20%Alto

Alertas de monitoreo de costos ​

Configura alertas para anomalías de costos:

yaml
# CloudWatch Alarm for unexpected node growth
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  NodeCountAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: EKS-Auto-Mode-Node-Count-High
      MetricName: karpenter_nodes_total
      Namespace: Karpenter
      Statistic: Average
      Period: 300
      EvaluationPeriods: 3
      Threshold: 100  # Adjust based on expected max
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - !Ref AlertSNSTopic

Atribución de costos ​

Estrategia de etiquetado para asignación de costos ​

yaml
# NodeClass with cost allocation tags
apiVersion: eks.amazonaws.com/v1
kind: NodeClass
metadata:
  name: tagged-nodeclass
spec:
  tags:
    Environment: production
    Team: platform
    CostCenter: "12345"
    Application: my-app
    ManagedBy: eks-auto-mode

Seguimiento de costos a nivel de namespace ​

yaml
# Namespace with cost labels
apiVersion: v1
kind: Namespace
metadata:
  name: team-a
  labels:
    cost-center: "team-a"
    environment: production

< Anterior: Operaciones | Tabla de contenidos | Siguiente: Ciclo de vida de Node >

Pregunta a la documentación

Enter envía, Shift+Enter añade una línea.