

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Consideraciones sobre memoria y vCPU para AWS Batch en Amazon EKS
<a name="memory-cpu-batch-eks"></a>

En AWS Batch en Amazon EKS, puede especificar los recursos que se ponen a disposición de un contenedor. Por ejemplo, puede especificar los valores `requests` o `limits` para los recursos vCPU y memoria.

Las siguientes son restricciones para especificar los recursos de vCPU:
+ Debe especificarse al menos una vCPU de valor `requests` o `limits`.
+ Una unidad vCPU equivale a un núcleo físico o virtual. 
+ El valor de vCPU debe introducirse en números enteros o en incrementos de 0,25. 
+ El valor de vCPU válido más bajo es 0,25.
+ Si se especifican ambos, el valor `requests` debe ser menor o igual que el valor `limits`. De esta forma, puede configurar configuraciones de vCPU flexibles e invariables.
+ Los valores de vCPU no se pueden especificar en formato milliCPU. Por ejemplo, `100m` no es un valor válido.
+ AWS Batch utiliza el valor `requests` para tomar decisiones de escalado. Si no se especifica un valor `requests`, el valor `limits` se copia al valor `requests`.

Las siguientes son restricciones para especificar los recursos de memoria:
+ Debe especificarse al menos una memoria de valor `requests` o `limits`.
+ Los valores de memoria deben estar en mebibytes (MiBs).
+ Si se especifican ambos, el valor `requests` debe ser igual que el valor `limits`.
+ AWS Batch utiliza el valor `requests` para tomar decisiones de escalado. Si no se especifica un valor `requests`, el valor `limits` se copia al valor `requests`.

Las siguientes son restricciones para especificar los recursos de GPU:
+ Si se especifican ambos, el valor `requests` debe ser igual que el valor `limits`.
+ AWS Batch utiliza el valor `requests` para tomar decisiones de escalado. Si no se especifica un valor `requests`, el valor `limits` se copia al valor `requests`.

## Ejemplo: definiciones de trabajo
<a name="memory-cpu-batch-eks-example-job-definition"></a>

La siguiente AWS Batch de Amazon EKS configura los recursos compartidos de vCPU flexibles. Esto permite a AWS Batch de Amazon EKS utilizar toda la capacidad de vCPU para el tipo de instancia. Sin embargo, si hay otros trabajos en ejecución, al trabajo se le asigna un máximo de `2` vCPU. La memoria está limitada a 2 GB.

```
{
   "jobDefinitionName": "MyJobOnEks_Sleep",
   "type": "container",
   "eksProperties": {
       "podProperties": {
           "containers": [
               {
                   "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                   "command": ["sleep", "60"],
                   "resources": {
                       "requests": {
                           "cpu": "2",
                           "memory": "2048Mi"
                       }
                   }
               }
           ]
       }
   }
}
```

La siguiente AWS Batch de trabajo de Amazon EKS tiene un `request` valor de `1` y asigna un máximo de `4` vCPU al trabajo.

```
{
   "jobDefinitionName": "MyJobOnEks_Sleep",
   "type": "container",
   "eksProperties": {
       "podProperties": {
           "containers": [
               {
                   "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                   "command": ["sleep", "60"],
                   "resources": {
                       "requests": {
                           "cpu": "1"
                       },
                       "limits": {
                           "cpu": "4",
                           "memory": "2048Mi"
                       }
                   }
               }
           ]
       }
   }
}
```

La siguiente AWS Batch de trabajo de Amazon EKS establece un valor de vCPU `limits` de `1` y un valor de memoria `limits` de 1 GB.

```
{
   "jobDefinitionName": "MyJobOnEks_Sleep",
   "type": "container",
   "eksProperties": {
       "podProperties": {
           "containers": [
               {
                   "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                   "command": ["sleep", "60"],
                   "resources": {
                       "limits": {
                           "cpu": "1",
                           "memory": "1024Mi"
                       }
                   }
               }
           ]
       }
   }
}
```

Cuando AWS Batch traduce un AWS Batch en Amazon EKS a un pod de Amazon EKS, AWS Batch copia el valor `limits` al valor `requests`. Esto ocurre si no se especifica un valor `requests`. Al enviar la definición de trabajo del ejemplo anterior, el pod `spec` es el siguiente.

```
apiVersion: v1
kind: Pod
...
spec:
  ...
  containers:
    - command:
        - sleep
        - 60
      image: public.ecr.aws/amazonlinux/amazonlinux:2
      resources:
        limits:
          cpu: 1
          memory: 1024Mi
        requests:
          cpu: 1
          memory: 1024Mi
      ...
```

## Reservas de CPU y memoria de los nodos
<a name="memory-cpu-batch-eks-node-cpu-memory-reservations"></a>

AWS Batch se basa en la lógica predeterminada del archivo `bootstrap.sh` para las reservas de vCPU y memoria. Para obtener más información sobre el archivo `bootstrap.sh`, consulte [bootstrap.sh](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/al2/runtime/bootstrap.sh). Al ajustar el tamaño de los recursos de vCPU y memoria, tenga en cuenta los ejemplos siguientes.

**nota**  
Si no se está ejecutando ninguna instancia, las reservas de vCPU y memoria pueden afectar inicialmente a la lógica de escalado de AWS Batch y a la toma de decisiones. Una vez ejecutadas las instancias, AWS Batch ajusta las asignaciones iniciales.

## Ejemplo: reserva de CPU de nodo
<a name="memory-cpu-batch-eks-node-cpu-reservations"></a>

El valor de reserva de CPU se calcula en milinúcleos mediante la cantidad total de vCPU disponibles para la instancia.


| Número de vCPU | Porcentaje reservado | 
| --- | --- | 
| 1 | 6 % | 
| 2 | 1 % | 
| 3-4 | 0,5% | 
| 4 y superior | 0,25 % | 

Si se utilizan los valores anteriores, se aplica lo siguiente:
+ El valor de reserva de CPU para una instancia `c5.large` con 2 vCPU es de 70 m. Se calcula de la siguiente manera: *(1\$160) \$1 (1\$110) = 70 m*.
+ El valor de reserva de CPU para una instancia `c5.24xlarge` con 96 vCPU es de 310 m. Se calcula de la siguiente manera: (1\$160) \$1 (1\$110) \$1 (2\$15) \$1 (92\$12.5) = 310 m.

En este ejemplo, hay 1930 unidades de vCPU milicore (calculadas entre 2000 y 70) disponibles para ejecutar trabajos en una instancia `c5.large`. Supongamos que su trabajo requiere unidades vCPU `2` (2\$11000 m), el trabajo no cabe en una sola instancia `c5.large`. Sin embargo, un trabajo que requiere unidades de vCPU `1.75` es adecuado.

## Ejemplo: reserva de memoria de nodo
<a name="memory-cpu-batch-eks-node-memory-reservations"></a>

El valor de reserva de memoria se calcula en mebibytes de la siguiente manera:
+ Capacidad de la instancia en mebibytes. Por ejemplo, una instancia de 8 GB equivale a 7,748 MiB.
+ El valor `kubeReserved`. El valor `kubeReserved` es la cantidad de memoria que se debe reservar para los daemon del sistema. El valor `kubeReserved` se calcula de la siguiente manera: *((11 \$1 número máximo de pods que admite el tipo de instancia) \$1 255)*. Para obtener información sobre el número máximo de pods que admite un tipo de instancia, consulte [eni-max-pods.txt](https://github.com/awslabs/amazon-eks-ami/blob/main/nodeadm/internal/kubelet/eni-max-pods.txt) 
+ El valor `HardEvictionLimit`. Cuando la memoria disponible cae por debajo del valor `HardEvictionLimit`, la instancia intenta expulsar los pods.

La fórmula para calcular la memoria asignable es la siguiente: (*instance\$1capacity\$1in\$1MiB*) - (11 \$1 (*maximum\$1number\$1of\$1pods*)) - 255 - (*`HardEvictionLimit` value.*)).

 Una instancia `c5.large` admite hasta 29 pods. Para una instancia `c5.large` de 8 GB con un valor `HardEvictionLimit` de 100 MiB, la memoria asignable es 7074 MiB. Esto se calcula de la siguiente manera: *(7748 - (11 \$1 29) -255 -100) = 7074 MiB*. En este ejemplo, un trabajo MiB de 8192 no cabe en esta instancia aunque sea una instancia 8 gibibyte (GiB).

## DaemonSets
<a name="memory-cpu-batch-eks-reservations-daemonset-scaling"></a>

Cuando utilice DaemonSets, tenga en cuenta lo siguiente:
+ Si no se está ejecutando ninguna instancia AWS Batch de Amazon EKS, DaemonSets puede afectar inicialmente a la lógica del escalado y a la toma de decisiones de AWS Batch. AWS Batch inicialmente asigna 0,5 unidades de vCPU y 500 MiB para DaemonSets previsto. Una vez ejecutadas las instancias, AWS Batch ajusta las asignaciones iniciales.
+ Si DaemonSet define los límites de vCPU o memoria, los AWS Batch en Amazon EKS tienen menos recursos. Le recomendamos que mantenga el número de DaemonSets asignados a los AWS Batch trabajos lo más bajo posible.