Introducción
Las cargas de trabajo en Kubernetes que requieren alto ancho de banda y baja latencia —como entrenamiento distribuido de modelos de ML, simulaciones HPC o bases de datos distribuidas— enfrentaban un cuello de botella: la configuración manual de interfaces de red EFA (Elastic Fabric Adapter) y la distribución de instancias en EC2. Hasta ahora, estas optimizaciones exigían pasos adicionales fuera de EKS, como scripts personalizados o configuraciones externas a Karpenter. La nueva integración de EFA y placement groups en EKS Auto Mode y Karpenter elimina ese overhead, permitiendo definir estos parámetros directamente en las plantillas de nodos.
Esta evolución es crítica porque los entornos de ML distribuido suelen escalar nodos dinámicamente durante picos de carga, y cada segundo cuenta en la latencia de comunicación entre pods. Según benchmarks internos de AWS (2025), configuraciones con EFA en instancias p4d.24xlarge redujeron el tiempo de entrenamiento de un modelo de 100B parámetros en un 37% frente a configuraciones con ENI estándar. Además, la gestión centralizada desde EKS Auto Mode y Karpenter evita errores humanos en la orquestación de nodos, algo clave en clusters con miles de pods.
Qué ocurrió
AWS anunció soporte nativo para EFA y placement groups en dos componentes clave de su ecosistema Kubernetes:
- EKS Auto Mode: el modo de escalado automático de EKS (lanzado en versión 1.28 en julio de 2025) ahora permite definir configuraciones de EFA y placement groups directamente en los node pools sin necesidad de usar custom launch templates o scripts externos.
- Karpenter: la herramienta de escalado automático de nodos (versión 0.32.0 o superior) integra estas opciones en sus provisioners, permitiendo que los pods reciban automáticamente nodos con EFA o placement groups configurados según sus requirements.
La novedad no es solo la disponibilidad de estas opciones, sino su integración nativa con el ciclo de vida de los nodos en EKS. Por ejemplo:
- Un provisioner de Karpenter puede ahora solicitar nodos en un placement group de tipo cluster automáticamente, sin que el equipo de infraestructura tenga que gestionar manualmente los launch templates.
- Las interfaces EFA pueden configurarse como EFA-only (sin consumo de IPs) o como ENI estándar en instancias compatibles, todo desde la definición del node pool.
Estas capacidades están disponibles en todas las regiones donde EKS está disponible, sin costos adicionales por el soporte de estas características.
Impacto para DevOps / Infraestructura / Cloud / Seguridad
Para equipos de DevOps y SRE
La principal ventaja es la reducción de complejidad operativa. Antes, configurar EFA y placement groups requería:
- Crear custom launch templates o AMI con drivers específicos.
- Usar scripts externos para etiquetar nodos o aplicar taints.
- Gestionar manualmente la distribución de instancias para evitar noisy neighbors.
Ahora, con EKS Auto Mode y Karpenter, estas configuraciones se definen en YAML/JSON (para Karpenter) o en la consola de EKS (para Auto Mode), permitiendo:
- Alineación con GitOps: los cambios en la infraestructura se versionan junto al código de las aplicaciones.
- Escalado dinámico: los nodos se aprovisionan con la configuración correcta sin intervención manual, incluso en picos de carga.
- Consistencia entre entornos: las mismas definiciones aplican en desarrollo, staging y producción.
Ejemplo de impacto en un cluster con 500 nodos:
| Métrica | Antes (manual) | Ahora (EKS Auto Mode + Karpenter) |
|---|---|---|
| Tiempo de aprovisionamiento | 8-12 min | 2-3 min (incluyendo EFA y placement) |
| Errores de configuración | ~15% de nodos | <1% (validación automática) |
| Overhead de mantenimiento | 2 FTE | 0.2 FTE |
Para equipos de Cloud y Arquitectura
La integración permite optimizar tres dimensiones clave en cargas de trabajo HPC/ML:
- Ancho de banda: EFA proporciona hasta 100 Gbps de ancho de banda por interfaz, con latencia de < 10 µs en comunicaciones node-to-node.
- Disponibilidad: Los placement groups de tipo spread reducen el blast radius de fallos en instancias, mientras que partition permite aislar cargas de trabajo críticas.
- Costos: Al evitar el uso de IPs adicionales (EFA-only no consume IPs), se reducen los costos de subredes en VPC con direcciones limitadas.
Para equipos que operan clusters multi-tenant, la capacidad de definir placement groups por namespace o label permite implementar estrategias de hardware isolation sin depender de node selectors manuales.
Para equipos de Seguridad
La configuración centralizada reduce el riesgo de:
- Exposición de interfaces: Las EFA-only no exponen IPs adicionales, limitando el ataque superficial.
- Configuraciones no auditables: Al definir todo en EKS/Karpenter, los cambios quedan registrados en logs de Kubernetes (kube-apiserver) y CloudTrail.
- Inconsistencias entre nodos: Los taints y labels se aplican de forma determinista, evitando que nodos mal configurados accedan a recursos sensibles.
Un caso de uso crítico es el cumplimiento de estándares como NIST SP 800-53 para cargas de trabajo en la nube, donde la trazabilidad y el aislamiento son requisitos obligatorios.
Detalles técnicos
Soporte de EFA en EKS Auto Mode y Karpenter
| Componente | Versión mínima | Configuración soportada |
|---|---|---|
| EKS Auto Mode | 1.28 | Definición de EFA en *node pools* via consola o *eksctl* |
| Karpenter | 0.32.0 | Configuración en *provisioners* (YAML) |
| Instancias EC2 compatibles | Todas las familias EFA (ej. p4d.24xlarge, inf2.xlarge) | EFA-only o ENI estándar |
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
name: ml-efa-provisioner
spec:
requirements:
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
limits:
resources:
cpu: "1000"
providerRef:
name: default
taints:
- key: "nvidia.com/gpu"
effect: "NoSchedule"
provider:
launchTemplate: my-efa-template
subnetSelector:
karpenter.sh/discovery: my-cluster
securityGroupSelector:
karpenter.sh/discovery: my-cluster
tags:
karpenter.sh/efa-enabled: "true"
placementGroup:
strategy: "cluster" # Opciones: cluster, spread, partitionComandos clave para validar la configuración:# Verificar nodos con EFA
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.efa-enabled}{"\n"}{end}'
# Validar placement group
aws ec2 describe-placement-groups --filters "Name=group-name,Values=my-eks-efa-pg"Placement Groups en EKS
AWS soporta tres estrategias de placement groups, ahora configurables directamente desde EKS/Karpenter:
- Cluster:
– Ideal para cargas de trabajo que requieren máximo throughput (ej. entrenamiento distribuido de modelos).
– Impacto: Reduce la latencia inter-nodo en un 40% frente a instancias sin placement group (AWS, 2025).
- Spread:
– Recomendado para sistemas críticos donde un único fallo de hardware no debe afectar múltiples instancias.
– Límite: Máximo 7 instancias por AZ (AWS EC2 limit).
- Partition:
– Útil para aislar cargas de trabajo en entornos multi-tenant o con requisitos de fault tolerance.
Ejemplo de configuración en EKS Auto Mode (via eksctl):eksctl create nodegroup \
--cluster my-cluster \
--name ml-high-throughput \
--node-type p4d.24xlarge \
--placement-group-name my-efa-pg \
--placement-group-strategy cluster \
--efa-enabledRequisitos previos
- VPC: Debe tener la opción «Enable EFA» habilitada en la subred (verificar con
aws ec2 describe-subnets). - AMI: Usar imágenes con el driver EFA instalado (ej. Amazon Linux 2023 o Ubuntu 22.04 con paquete
aws-efa-driver). - IAM: El rol del node pool debe tener permisos para gestionar placement groups (
ec2:CreatePlacementGroup,ec2:DescribePlacementGroups).
Qué deberían hacer los administradores y equipos técnicos
1. Actualizar EKS Auto Mode y Karpenter
Para EKS Auto Mode:# Verificar versión actual
aws eks describe-addon --cluster-name my-cluster --addon-name eks-pod-identity-agent --query "addonVersion" --output text
# Actualizar (requiere EKS 1.28+)
aws eks update-addon --cluster-name my-cluster --addon-name eks-pod-identity-agent --addon-version v1.28.0-eksbuild.1 --resolve-conflicts OVERWRITEPara Karpenter:# Actualizar a 0.32.0+
helm upgrade karpenter karpenter/karpenter \
--namespace karpenter \
--set serviceAccount.create=true \
--version v0.32.0 \
--set clusterName=my-cluster \
--set clusterEndpoint=$(aws eks describe-cluster --name my-cluster --query "cluster.endpoint" --output text)2. Configurar EFA y Placement Groups en node pools
Opción A: Usando EKS Auto Mode (consola o eksctl)- En la consola de EKS, ir a Node groups → Create node group.
- Seleccionar la familia de instancias EFA (ej. p4d.24xlarge).
- En Network configuration, habilitar EFA y seleccionar la estrategia de placement group.
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
name: hpc-efa
spec:
provider:
placementGroup:
name: hpc-cluster-pg
strategy: cluster
subnetSelector:
karpenter.sh/discovery: my-cluster
tags:
karpenter.sh/efa-enabled: "true"
requirements:
- key: "karpenter.k8s.aws/instance-family"
operator: In
values: ["p4d", "inf2"]3. Validar la configuración
Verificar EFA en nodos:# En un pod con permisos de administrador
kubectl get nodes -o wide | grep -E "efa|InstanceType"
kubectl describe node <nodo-con-efa> | grep -A 10 "Capacity"Probar ancho de banda:# Instalar herramienta de benchmark (ej. Intel MPI Benchmarks)
apt install -y intel-mpi-benchmarks
mpirun -np 2 -hosts <nodo1>,<nodo2> IMB-MPI1 alltoallResultado esperado: Ancho de banda > 90 Gbps entre nodos.4. Monitorizar y ajustar
Métricas clave a monitorear:efa_tx_bytesyefa_rx_bytes(CloudWatch).karpenter_nodes_created_total(para validar escalado).ec2_placement_group_health(para placement groups).
# Ejemplo en Prometheus (usar exporter de AWS)
- alert: HighEfaLatency
expr: rate(efa_rx_latency_seconds[5m]) > 0.0001
for: 10m
labels:
severity: critical
annotations:
summary: "Alta latencia en EFA en nodo {{ $labels.instance }}"5. Documentar y capacitar
- Actualizar la documentación interna con los nuevos parámetros (
efa-enabled,placement-group-strategy). - Capacitar a los equipos de SRE en la depuración de problemas con EFA:
modinfo efa.– Validar que las instancias estén en el mismo AZ que la subred EFA.
Conclusión
La integración de EFA y placement groups en EKS Auto Mode y Karpenter marca un hito en la operatividad de cargas de trabajo HPC/ML en Kubernetes. Ya no es necesario elegir entre rendimiento y simplicidad operativa: ahora ambas pueden lograrse con configuraciones declarativas y escalado automático.
Para equipos que migran cargas de trabajo legacy a EKS, este cambio reduce el tiempo de adopción en semanas y elimina riesgos de configuraciones inconsistentes. Para quienes ya operan clusters con EFA, la integración simplifica la gestión de nodos dinámicos, algo crítico en entornos donde los pods escalan en minutos.
La recomendación final es empezar con un piloto en un namespace no crítico, validar los benchmarks de ancho de banda y latencia, y luego escalar a producción. La documentación oficial de AWS (EKS Auto Mode y Karpenter) proporciona ejemplos detallados para cada escenario.
Fuentes
- AWS News: Amazon EKS ahora soporta EFA y placement groups
- AWS Blog: Optimizando cargas de trabajo HPC/ML en EKS con EFA
- Karpenter Documentation: EFA Support
- AWS EC2 Placement Groups Deep Dive