

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Creación de nodos autoadministrados con bloques de capacidad para ML
<a name="capacity-blocks"></a>

Los bloques de capacidad para machine learning (ML) permiten reservar instancias de GPU en una fecha futura para respaldar cargas de trabajo de ML de corta duración. Para obtener más información, consulte [Bloques de capacidad para ML](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html) en la *Guía del usuario de Amazon EC2 para instancias de Linux*.

## Consideraciones
<a name="capacity-blocks-considerations"></a>

**importante**  
Los bloques de capacidad solo están disponibles para determinados tipos de instancias de Amazon EC2 y regiones de AWS. Para obtener información sobre compatibilidad, consulte los [requisitos previos para trabajar con bloques de capacidad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-blocks-using.html#capacity-blocks-prerequisites) en la *Guía del usuario de Amazon EC2 para instancias de Linux*.
Si crea el grupo de nodos autoadministrados antes de que se active la reserva de capacidad, defina la capacidad deseada como `0`.
Para que los nodos dispongan de tiempo suficiente para vaciarse correctamente, le sugerimos que programe el escalado para que llegue a cero más de 30 minutos antes de la hora de finalización de la reserva del bloque de capacidad.
Para drenar los pods correctamente, se recomienda configurar AWS Node Termination Handler, tal como se explica en los pasos de ejemplo.

## Uso de bloques de capacidad con nodos autoadministrados
<a name="capacity-blocks-procedure"></a>

Puede utilizar bloques de capacidad con Amazon EKS para aprovisionar y escalar nodos autoadministrados. En los siguientes pasos se ofrece un ejemplo general. Los ejemplos de plantillas de AWS CloudFormation no cubren todos los aspectos necesarios en una carga de trabajo de producción. Por lo general, también es necesario un script de arranque para unir el nodo al clúster, especificar una AMI acelerada de Amazon EKS y un perfil de instancia adecuado para unirse al clúster. Para obtener más información, consulte [Creación de nodos autoadministrados de Amazon Linux](launch-workers.md).

1. Cree una plantilla de lanzamiento que se adapte a su carga de trabajo. Para obtener más información, consulte [Use Capacity Blocks for machine learning workloads](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-template-capacity-blocks.html) en la *Guía del usuario de Amazon EC2 Auto Scaling*.

   Asegúrese de que `LaunchTemplateData` incluya lo siguiente:
   +  `InstanceMarketOptions` con `"capacity-block"` establecido en `MarketType` 
   +  `CapacityReservationSpecification: CapacityReservationTarget` con `CapacityReservationId` establecido en el bloque de capacidad (por ejemplo: `cr-02168da1478b509e0 `)
   +  `IamInstanceProfile` con `Arn` establecido en el *iam-instance-profile-arn* aplicable 
   +  `ImageId` establecido en el *image-id* aplicable 
   +  `InstanceType` establecido en un tipo de instancia que admita bloques de capacidad (por ejemplo: *p5.48xlarge*)
   +  `SecurityGroupIds` establecido en los ID aplicables (por ejemplo:*sg-05b1d815d1EXAMPLE*)
   +  `UserData` establecido en los *user-data* aplicables a su grupo de nodos autoadministrado

     A continuación se muestra un extracto de una plantilla de CloudFormation que crea una plantilla de lanzamiento dirigida a un bloque de capacidad.

     ```
     NodeLaunchTemplate:
       Type: "aws::EC2::LaunchTemplate"
       Properties:
         LaunchTemplateData:
           InstanceMarketOptions:
             MarketType: "capacity-block"
           CapacityReservationSpecification:
             CapacityReservationTarget:
               CapacityReservationId: "cr-02168da1478b509e0"
           IamInstanceProfile:
             Arn: iam-instance-profile-arn
           ImageId: image-id
           InstanceType: p5.48xlarge
           KeyName: key-name
           SecurityGroupIds:
           - sg-05b1d815d1EXAMPLE
           UserData: user-data
     ```

     Debe pasar la subred de la zona de disponibilidad en la que se realiza la reserva, ya que los bloques de capacidad son zonales.

1. Utilice la plantilla de lanzamiento para crear un grupo de nodos autoadministrado. Si lo hace antes de que se active la reserva de capacidad, ajuste la capacidad deseada a `0`. Al crear el grupo de nodos, asegúrese de especificar únicamente la subred correspondiente a la zona de disponibilidad en la que se va a reservar la capacidad.

   A continuación se muestra un ejemplo de plantilla de CloudFormation a la que puede hacer referencia al crear una que se aplique a su carga de trabajo. En este ejemplo se obtienen `LaunchTemplateId` y `Version` del recurso ` AWS::Amazon EC2::LaunchTemplate` que se muestra en el paso anterior. También se obtienen los valores de `DesiredCapacity`, `MaxSize`, `MinSize` y `VPCZoneIdentifier` que se declaran en otras partes de la misma plantilla.

   ```
   NodeGroup:
     Type: "AWS::AutoScaling::AutoScalingGroup"
     Properties:
       DesiredCapacity: !Ref NodeAutoScalingGroupDesiredCapacity
       LaunchTemplate:
         LaunchTemplateId: !Ref NodeLaunchTemplate
         Version: !GetAtt NodeLaunchTemplate.LatestVersionNumber
       MaxSize: !Ref NodeAutoScalingGroupMaxSize
       MinSize: !Ref NodeAutoScalingGroupMinSize
       VPCZoneIdentifier: !Ref Subnets
       Tags:
         - Key: Name
           PropagateAtLaunch: true
           Value: !Sub ${ClusterName}-${NodeGroupName}-Node
         - Key: !Sub kubernetes.io/cluster/${ClusterName}
           PropagateAtLaunch: true
           Value: owned
   ```

1. Una vez que el grupo de nodos se ha creado correctamente, asegúrese de registrar el valor de `NodeInstanceRole` correspondiente al grupo de nodos que se ha creado. Esto es necesario para asegurarse de que, al escalar el grupo de nodos, los nuevos nodos se unan al clúster y Kubernetes pueda reconocerlos. Para obtener más información, consulte las instrucciones de Consola de administración de AWS en [Creación de nodos autoadministrados de Amazon Linux](launch-workers.md).

1. Se recomienda crear una política de escalado programado para el grupo de escalado automático que se ajuste a los tiempos de reserva del bloque de capacidad. Para obtener más información, consulte [Scheduled scaling for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-scheduled-scaling.html) en la *Guía del usuario de Amazon EC2 Auto Scaling*.

   Puede utilizar todas las instancias que haya reservado hasta 30 minutos antes de la hora de finalización del bloque de capacidad. Las instancias que aún estén en ejecución en ese momento comenzarán a finalizar. Para que los nodos dispongan de tiempo suficiente para vaciarse correctamente, le sugerimos que programe el escalado para que llegue a cero más de 30 minutos antes de la hora de finalización de la reserva del bloque de capacidad.

   Si en lugar de esto desea escalar verticalmente cada vez que el estado de la reserva de capacidad sea `Active`, debe actualizar la capacidad deseada para el grupo de escalado automático a la hora de inicio de la reserva del bloque de capacidad. En ese caso, también tendría que reducir verticalmente y manualmente más de 30 minutos antes de la hora de finalización de la reserva del bloque de capacidad.

1. El grupo de nodos ya está listo para la programación de cargas de trabajo y pods.

1. Para drenar los pods correctamente, se recomienda configurar AWS Node Termination Handler. Este controlador podrá observar eventos del ciclo de vida de “reducción horizontal de ASG” de Amazon EC2 Auto Scaling mediante EventBridge y permitir que el plano de control de Kubernetes tome las medidas necesarias antes de que la instancia deje de estar disponible. De lo contrario, los objetos de Kubernetes y pods quedarán bloqueados en estado pendiente. Para obtener más información, consulte [AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler) en GitHub.

   Si no configura Node Termination Handler, le recomendamos que comience a agotar los pods manualmente antes del plazo de 30 minutos, con el fin de que tengan tiempo suficiente para drenarse correctamente.