

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.

# Escalado automático en EKS SageMaker HyperPod
Escalado automático en EKS HyperPod

Amazon SageMaker HyperPod proporciona una solución gestionada de escalado automático de nodos basada en Karpenter para clústeres creados con la orquestación de EKS. [Karpenter](https://karpenter.sh/) es un administrador del ciclo de vida de los nodos de Kubernetes de código abierto creado por Kubernetes que optimiza el escalado de los clústeres y la rentabilidad. AWS A diferencia de las implementaciones autogestionadas de Karpenter, la implementación gestionada elimina SageMaker HyperPod la sobrecarga operativa que supone la instalación, la configuración y el mantenimiento de los controladores de Karpenter, a la vez que proporciona resiliencia y tolerancia a fallos integradas. Esta solución gestionada de escalado automático se basa en las capacidades de [aprovisionamiento continuo HyperPod](sagemaker-hyperpod-scaling-eks.md) de las que dispone y le permite escalar de forma eficiente los recursos de cómputo para las cargas de trabajo de formación e inferencia mediante la gestión y la recuperación automáticas de los fallos. 

Solo paga por lo que utiliza. Usted es responsable de pagar todas las instancias informáticas que se aprovisionan automáticamente mediante el escalado automático de acuerdo con los precios estándar. SageMaker HyperPod Para obtener información detallada sobre los precios, consulta [Amazon SageMaker AI](https://aws.amazon.com/sagemaker/ai/pricing/).

Al habilitar el escalado automático basado en Karpenter con HyperPod, tiene acceso a:
+ **Ciclo de vida gestionado por el servicio**: HyperPod gestiona la instalación, las actualizaciones y el mantenimiento de Karpenter, lo que elimina la sobrecarga operativa.
+ **Aprovisionamiento justo a tiempo**: Karpenter observará los pods pendientes y aprovisionará la computación necesaria para las cargas de trabajo del grupo bajo demanda.
+ **Escala a cero**: reduzca verticalmente a cero nodos sin mantener una infraestructura de controladores dedicada.
+ **Selección de nodos en función de la carga de trabajo**: Karpenter elige los tipos de instancias óptimos en función de los requisitos de los pods, las zonas de disponibilidad y los precios para minimizar los costos.
+ **Consolidación automática de nodos**: Karpenter evalúa periódicamente el clúster en busca de oportunidades de optimización y cambia las cargas de trabajo para eliminar los nodos infrautilizados.
+ **Resiliencia integrada**: aprovecha los mecanismos integrados HyperPod de tolerancia a fallos y recuperación de nodos.

En los siguientes temas se explica cómo habilitar el HyperPod escalado automático con Karpenter.

**Topics**
+ [

## Requisitos previos
](#sagemaker-hyperpod-eks-autoscaling-prereqs)
+ [

# Cree un rol de IAM para el HyperPod escalado automático con Karpenter
](sagemaker-hyperpod-eks-autoscaling-iam.md)
+ [

# Cree y configure un HyperPod clúster con el escalado automático de Karpenter
](sagemaker-hyperpod-eks-autoscaling-cluster.md)
+ [

# Cree un NodeClass
](sagemaker-hyperpod-eks-autoscaling-nodeclass.md)
+ [

# Cree un NodePool
](sagemaker-hyperpod-eks-autoscaling-nodepool.md)
+ [

# Implementación de una carga de trabajo
](sagemaker-hyperpod-eks-autoscaling-workload.md)

## Requisitos previos

+ El aprovisionamiento continuo está habilitado en su clúster. HyperPod Habilite el aprovisionamiento continuo configurándolo `--node-provisioning-mode` `Continuous` al crear el clúster SageMaker HyperPod . Para obtener más información, consulte [Aprovisionamiento continuo para mejorar las operaciones del clúster en Amazon EKS](sagemaker-hyperpod-scaling-eks.md).
+ Se ha instalado la versión 1.0.742.0\$11.0.241.0 o superior del Health Monitoring Agent. Necesario para las operaciones y la supervisión del HyperPod clúster. Debe configurarse antes de activar el escalado automático de Karpenter para garantizar la correcta gestión del ciclo de vida de los nodos y la elaboración de informes sobre el estado del clúster. Para obtener más información, consulte [Sistema de Monitoreo de Salud](sagemaker-hyperpod-eks-resiliency-health-monitoring-agent.md).
+ Solo si su clúster de Amazon EKS ejecuta Karpenter, tanto el Karpenter `NodePool` como las versiones de `NodeClaim` deben ser v1.
+ `NodeRecovery` configurado en automático. Para obtener más información, consulte [Recuperación automática de nodos](sagemaker-hyperpod-eks-resiliency-node-recovery.md).

# Cree un rol de IAM para el HyperPod escalado automático con Karpenter
Creación de un rol de IAM

En los siguientes pasos, crearás un rol de IAM que te permitirá gestionar los nodos de Kubernetes de tu clúster SageMaker HyperPod mediante el escalado automático basado en Karpenter. Esta función proporciona los permisos necesarios para añadir y eliminar nodos del clúster automáticamente en función HyperPod de la demanda de carga de trabajo.

**Apertura de la consola de IAM**

1. Inicie sesión en la consola de IAM Consola de administración de AWS y ábrala en console.aws.amazon.com.

1. Seleccione **Roles** en el panel de navegación.

1. Elija **Create role** (Crear rol).

**Configuración de la política de confianza**

1. En **Tipo de entidad de confianza**, elija **Política de confianza personalizada**.

1. Elija **Política de confianza personalizada** y sustituya la política predeterminada por lo siguiente:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "hyperpod.sagemaker.amazonaws.com"
                   ]
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. Elija **Siguiente**.

**Creación del rol y asociación a la política de permisos**

Como SageMaker HyperPod requiere permisos específicos que no están disponibles en las políticas AWS administradas, debes crear una política personalizada.

1. Elija **Crear política**. Se abrirá una nueva pestaña del navegador.

1. Seleccione la pestaña **JSON**.

1. Reemplace la política predeterminada con lo siguiente:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sagemaker:BatchAddClusterNodes",
                   "sagemaker:BatchDeleteClusterNodes"
               ],
               "Resource": "arn:aws:sagemaker:*:*:cluster/*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceAccount": "${aws:PrincipalAccount}"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:CreateGrant",
                   "kms:DescribeKey"
               ],
               "Resource": "arn:aws:kms:*:*:key/*",
               "Condition": {
                   "StringLike": {
                       "kms:ViaService": "sagemaker.*.amazonaws.com"
                   },
                   "Bool": {
                       "kms:GrantIsForAWSResource": "true"
                   },
                   "ForAllValues:StringEquals": {
                       "kms:GrantOperations": [
                           "CreateGrant",
                           "Decrypt",
                           "DescribeKey",
                           "GenerateDataKeyWithoutPlaintext",
                           "ReEncryptTo",
                           "ReEncryptFrom",
                           "RetireGrant"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. Elija **Siguiente**.

1. Para **Nombre de la política**, introduzca **SageMakerHyperPodKarpenterPolicy**.

1. (Opcional) En **Descripción**, escriba una descripción para la política.

1. Elija **Crear política**.

1. Vuelva a la pestaña de creación de roles y actualice la lista de políticas.

1. Busca y selecciona la **SageMakerHyperPodKarpenterPolicy**que acabas de crear.

1. Elija **Siguiente**.

**Asignación de un nombre al rol y creación del rol**

1. En **Nombre del rol**, ingrese `SageMakerHyperPodKarpenterRole`.

1. (Opcional) **En Descripción**, ingrese una descripción para el rol.

1. En la sección **Paso 1: selección de entidades de confianza**, compruebe que la política de confianza muestre las entidades principales de servicio correctas.

1. En la sección **Paso 2: adición de permisos**, compruebe que se haya asociado `SageMakerHyperPodKarpenterPolicy`.

1. Elija **Crear rol**.

**Registro del ARN del rol**

Después de crear el rol correctamente:

1. En la lista **Roles**, elija el nombre del rol `SageMakerHyperPodKarpenterRole`.

1. Copie el **ARN del rol** que se muestra en la sección **Resumen**. Necesitará este ARN al crear el clúster HyperPod.

El ARN tiene el siguiente formato: `arn:aws:iam::ACCOUNT-ID:role/SageMakerHyperPodKarpenterRole`.

# Cree y configure un HyperPod clúster con el escalado automático de Karpenter
Crea un clúster HyperPod

En los siguientes pasos, creará un SageMaker HyperPod clúster con el aprovisionamiento continuo activado y lo configurará para que utilice el escalado automático basado en Karpenter.

**Crea un clúster HyperPod**

1. Cargue la configuración de su entorno y extraiga valores de las CloudFormation pilas.

   ```
   source .env
   SUBNET1=$(cfn-output $VPC_STACK_NAME PrivateSubnet1)
   SUBNET2=$(cfn-output $VPC_STACK_NAME PrivateSubnet2)
   SUBNET3=$(cfn-output $VPC_STACK_NAME PrivateSubnet3)
   SECURITY_GROUP=$(cfn-output $VPC_STACK_NAME NoIngressSecurityGroup)
   EKS_CLUSTER_ARN=$(cfn-output $EKS_STACK_NAME ClusterArn)
   EXECUTION_ROLE=$(cfn-output $SAGEMAKER_STACK_NAME ExecutionRole)
   SERVICE_ROLE=$(cfn-output $SAGEMAKER_STACK_NAME ServiceRole)
   BUCKET_NAME=$(cfn-output $SAGEMAKER_STACK_NAME Bucket)
   HP_CLUSTER_NAME="hyperpod-eks-test-$(date +%s)"
   EKS_CLUSTER_NAME=$(cfn-output $EKS_STACK_NAME ClusterName)
   HP_CLUSTER_ROLE=$(cfn-output $SAGEMAKER_STACK_NAME ClusterRole)
   ```

1. Actualice el script de inicialización del nodo en el bucket de Amazon S3.

   ```
   aws s3 cp lifecyclescripts/on_create_noop.sh s3://$BUCKET_NAME
   ```

1. Cree un archivo de configuración del clúster con sus variables de entorno.

   ```
   cat > cluster_config.json << EOF
   {
       "ClusterName": "$HP_CLUSTER_NAME",
       "InstanceGroups": [
           {
               "InstanceCount": 1,
               "InstanceGroupName": "system",
               "InstanceType": "ml.c5.xlarge",
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://$BUCKET_NAME",
                   "OnCreate": "on_create_noop.sh"
               },
               "ExecutionRole": "$EXECUTION_ROLE"
           },
           {
               "InstanceCount": 0,
               "InstanceGroupName": "auto-c5-az1",
               "InstanceType": "ml.c5.xlarge",
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://$BUCKET_NAME",
                   "OnCreate": "on_create_noop.sh"
               },
               "ExecutionRole": "$EXECUTION_ROLE"
           },
           {
               "InstanceCount": 0,
               "InstanceGroupName": "auto-c5-4xaz2",
               "InstanceType": "ml.c5.4xlarge",
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://$BUCKET_NAME",
                   "OnCreate": "on_create_noop.sh"
               },
               "ExecutionRole": "$EXECUTION_ROLE",
               "OverrideVpcConfig": {
                   "SecurityGroupIds": [
                       "$SECURITY_GROUP"
                   ],
                   "Subnets": [
                       "$SUBNET2"
                   ]
               }
           },
           {
               "InstanceCount": 0,
               "InstanceGroupName": "auto-g5-az3",
               "InstanceType": "ml.g5.xlarge",
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://$BUCKET_NAME",
                   "OnCreate": "on_create_noop.sh"
               },
               "ExecutionRole": "$EXECUTION_ROLE",
               "OverrideVpcConfig": {
                   "SecurityGroupIds": [
                       "$SECURITY_GROUP"
                   ],
                   "Subnets": [
                       "$SUBNET3"
                   ]
               }
           }
       ],
       "VpcConfig": {
           "SecurityGroupIds": [
               "$SECURITY_GROUP"
           ],
           "Subnets": [
               "$SUBNET1"
           ]
       },
       "Orchestrator": {
           "Eks": {
               "ClusterArn": "$EKS_CLUSTER_ARN"
           }
       },
       "ClusterRole": "$HP_CLUSTER_ROLE",
       "AutoScaling": {
           "Mode": "Enable",
           "AutoScalerType": "Karpenter"
       },
       "NodeProvisioningMode": "Continuous"
   }
   EOF
   ```

1. Ejecute el siguiente comando para crear el HyperPod clúster.

   ```
   aws sagemaker create-cluster --cli-input-json file://./cluster_config.json
   ```

1. El proceso de creación del clúster debería tardar unos 20 minutos. Supervisa el estado del clúster hasta que se muestren InService ambos ClusterStatus y AutoScaling .Status.

1. Guarde el ARN del clúster para operaciones posteriores.

   ```
   HP_CLUSTER_ARN=$(aws sagemaker describe-cluster --cluster-name $HP_CLUSTER_NAME \
      --output text --query ClusterArn)
   ```

**Activación del escalado automático de Karpenter**

1. Ejecute el siguiente comando para habilitar el escalado automático basado en Karpenter en cualquier clúster preexistente que tenga el modo de aprovisionamiento continuo de nodos.

   ```
   aws sagemaker update-cluster \
       --cluster-name $HP_CLUSTER_NAME \
       --auto-scaling Mode=Enable,AutoScalerType=Karpenter \
       --cluster-role $HP_CLUSTER_ROLE
   ```

1. Compruebe que Karpenter se haya activado correctamente:

   ```
   aws sagemaker describe-cluster --cluster-name $HP_CLUSTER_NAME --query 'AutoScaling'
   ```

1. Resultado previsto:

   ```
   {
       "Mode": "Enable",
       "AutoScalerType": "Karpenter",
       "Status": "InService"
   }
   ```

Espere `Status` a que se muestre `InService` antes de proceder a configurar NodeClass y NodePool.

# Cree un NodeClass


**importante**  
Debe empezar con 0 nodos en su grupo de instancias y dejar que Karpenter se encargue del escalado automático. Si empieza con más de 0 nodos, Karpenter los reducirá a 0.

Una clase de nodos (`NodeClass`) define los ajustes de la infraestructura que se aplican a los grupos de nodos del clúster de Amazon EKS, incluida la configuración de la red, los ajustes de almacenamiento y el etiquetado de los recursos. A `HyperPodNodeClass` es una personalización `NodeClass` que se asigna a grupos de instancias creados previamente y define las restricciones en SageMaker HyperPod torno a las cuales se admiten los tipos de instancias y las zonas de disponibilidad para las decisiones de escalado automático de Karpenter.

**Consideraciones a tener en cuenta para crear una clase de nodo**
+ Puede especificar hasta 10 grupos de instancias en una `NodeClass`.
+ Al utilizar la partición de GPU con MIG (GPU de varias instancias), Karpenter puede aprovisionar nodos automáticamente con grupos de instancias compatibles con MIG. Asegúrate de que tus grupos de instancias incluyan tipos de instancias compatibles con MIG (ml.p4d.24xlarge, ml.p5.48xlarge o ml.p5e/p5en.48xlarge) y configura las etiquetas MIG adecuadas durante la creación del clúster. Para obtener más información [Uso de particiones de GPU en Amazon SageMaker HyperPod](sagemaker-hyperpod-eks-gpu-partitioning.md) sobre cómo configurar las particiones de la GPU, consulta.
+ Si se aplican etiquetas personalizadas a los grupos de instancias, puedes verlas en el `desiredLabels` campo al consultar el `HyperpodNodeClass` estado. Esto incluye etiquetas de configuración MIG, como. `nvidia.com/mig.config` Cuando los trabajos entrantes soliciten recursos MIG, Karpenter escalará automáticamente las instancias con las etiquetas MIG correspondientes aplicadas.
+ Si decides eliminar un grupo de instancias, te recomendamos eliminarlo de tu clúster `NodeClass` antes de eliminarlo del clúster. HyperPod Si se elimina un grupo de instancias mientras se usa en una `NodeClass`, la `NodeClass` se marcará como no `Ready` para aprovisionamiento y no se usará para las operaciones de escalado posteriores hasta que se elimine el grupo de instancias de la `NodeClass`.
+ Cuando elimine grupos de instancias de una `NodeClass`, Karpenter detectará una deriva de los nodos administrados por Karpenter en los grupos de instancias e interrumpirá los nodos en función de los controles de los presupuestos de interrupciones.
+ Las subredes que utiliza el grupo de instancias deben pertenecer a la misma zona de disponibilidad. Las subredes se especifican con `OverrideVpcConfig` para el grupo de instancias o para el clúster. `VpcConfig` se usa de forma predeterminada.
+ Por el momento, solo se admite la capacidad bajo demanda. No se admiten grupos de instancias con plan de entrenamiento o capacidad reservada.
+ No se admiten grupos de instancias con `DeepHealthChecks (DHC)`. Esto se debe a que un DHC tarda entre 60 y 90 minutos en completarse y los pods tienen el estado pendiente durante ese tiempo, lo que puede provocar un sobreaprovisionamiento.

En los siguientes pasos se muestra cómo crear una `NodeClass`.

1. Cree un archivo YAML (por ejemplo, nodeclass.yaml) con la configuración de su `NodeClass`.

1. Aplique la configuración al clúster con kubectl.

1. Haga referencia a la `NodeClass` en la configuración del `NodePool`.

1. A continuación, se muestra una `NodeClass` de ejemplo donde se utilizan los tipos de instancia ml.c5.xlarge y ml.c5.4xlarge:

   ```
   apiVersion: karpenter.sagemaker.amazonaws.com/v1
   kind: HyperpodNodeClass
   metadata:
     name: sample-nc
   spec:
     instanceGroups:
       # name of InstanceGroup in HyperPod cluster. InstanceGroup needs to pre-created
       # MaxItems: 10
       - auto-c5-xaz1
       - auto-c5-4xaz2
   ```

1. Aplique la configuración:

   ```
   kubectl apply -f nodeclass.yaml
   ```

1. Supervisa el NodeClass estado para asegurarte de que la condición Listo esté establecida en True:

   ```
   kubectl get hyperpodnodeclass sample-nc -o yaml
   ```

   ```
   apiVersion: karpenter.sagemaker.amazonaws.com/v1
   kind: HyperpodNodeClass
   metadata:
     creationTimestamp: "<timestamp>"
     name: sample-nc
     uid: <resource-uid>
   spec:
     instanceGroups:
     - auto-c5-az1
     - auto-c5-4xaz2
   status:
     conditions:
     // true when all IGs in the spec are present in SageMaker cluster, false otherwise
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 3
       reason: InstanceGroupReady
       status: "True"
       type: InstanceGroupReady
     // true if subnets of IGs are discoverable, false otherwise
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 3
       reason: SubnetsReady
       status: "True"
       type: SubnetsReady
     // true when all dependent resources are Ready [InstanceGroup, Subnets]
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 3
       reason: Ready
       status: "True"
       type: Ready
     instanceGroups:
     - desiredLabels:
       - key: <custom_label_key>
         value: <custom_label_value>
       - key: nvidia.com/mig.config
         value: all-1g.5gb
       instanceTypes:
       - ml.c5.xlarge
       name: auto-c5-az1
       subnets:
       - id: <subnet-id>
         zone: <availability-zone-a>
         zoneId: <zone-id-a>
     - instanceTypes:
       - ml.c5.4xlarge
       name: auto-c5-4xaz2
       subnets:
       - id: <subnet-id>
         zone: <availability-zone-b>
         zoneId: <zone-id-b>
   ```

# Cree un NodePool


El `NodePool` establece restricciones sobre los nodos que Karpenter puede crear y los pods que pueden ejecutarse en esos nodos. El `NodePool` se puede configurar para que haga cosas como:
+ Limitar la creación de nodos a determinadas zonas, tipos de instancias y arquitecturas de recursos de computación.
+ Definir etiquetas o taints para limitar los pod que pueden ejecutarse en los nodos que crea Karpenter.

**nota**  
HyperPod El proveedor admite un conjunto limitado de requisitos conocidos de Kubernetes y Karpenter que se explican a continuación. 

En los siguientes pasos se muestra cómo crear una `NodePool`.

1. Cree un archivo YAML llamado nodepool.yaml con la configuración de `NodePool` que desee.

1. Puede usar la siguiente configuración de muestra.

   Busque `Ready` en `Conditions` para indicar que todos los recursos dependientes funcionan correctamente.

   ```
   apiVersion: karpenter.sh/v1
   kind: NodePool
   metadata:
    name: sample-np
   spec:
    template:
      spec:
        nodeClassRef:
         group: karpenter.sagemaker.amazonaws.com
         kind: HyperpodNodeClass
         name: multiazc5
        expireAfter: Never
        requirements:
           - key: node.kubernetes.io/instance-type
             operator: Exists
   ```

1. Aplique el `NodePool` a su clúster:

   ```
   kubectl apply -f nodepool.yaml
   ```

1. Supervise el estado de `NodePool` para asegurarse de que el estado de la condición `Ready` se haya establecido en `True`:

   ```
   kubectl get nodepool sample-np -oyaml
   ```

   ```
   apiVersion: karpenter.sh/v1
   kind: NodePool
   metadata:
     name: <nodepool-name>
     uid: <resource-uid>
     ...
   spec:
     disruption:
       budgets:
       - nodes: 90%
       consolidateAfter: 0s
       consolidationPolicy: WhenEmptyOrUnderutilized
     template:
       spec:
         expireAfter: 720h
         nodeClassRef:
           group: karpenter.sagemaker.amazonaws.com
           kind: HyperpodNodeClass
           name: <nodeclass-name>
         requirements:
         - key: node.kubernetes.io/instance-type
           operator: Exists
   status:
     conditions:
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 2
       reason: ValidationSucceeded
       status: "True"
       type: ValidationSucceeded
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 2
       reason: NodeClassReady
       status: "True"
       type: NodeClassReady
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 2
       reason: Ready
       status: "True"
       type: Ready
   ```

**Etiquetas compatibles con Karpenter Provider HyperPod**

Estas son las restricciones y requisitos opcionales que puede especificar en su configuración de `NodePool`.


|  Tipo de requisito  |  Finalidad  |  Utilice valores Case/Supported   |  Recomendación  | 
| --- | --- | --- | --- | 
|  Tipos de instancias (`node.kubernetes.io/instance-type`)  |  Controla los tipos de SageMaker instancias entre los que Karpenter puede elegir  |  En lugar de restringirlo solo a ml.c5.xlarge, deja que Karpenter elija entre todos los tipos disponibles en sus grupos de instancias  |  No defina nada o utilice el operador Exists para ofrecer a Karpenter la máxima flexibilidad a la hora de elegir tipos de instancias rentables  | 
|  Zonas de disponibilidad (`topology.kubernetes.io/zone`)  |  Controla las zonas de AWS disponibilidad en las que se pueden crear los nodos  |  Nombres de zonas específicas como us-east-1c. Úselo cuando necesite que los pods se ejecuten en zonas específicas por motivos de latencia o de conformidad  | n/a | 
|  Arquitectura (`kubernetes.io/arch`)  |  Especifica la arquitectura de la CPU  |  Solo amd64 (actualmente no es compatible con ARM)  |  n/a  | 

# Implementación de una carga de trabajo


Los siguientes ejemplos demuestran cómo el HyperPod escalado automático con Karpenter aprovisiona automáticamente los nodos en respuesta a las demandas de carga de trabajo. En estos ejemplos se muestra el comportamiento de escalado básico y los patrones de distribución de múltiples zonas de disponibilidad.

**Implementación de una sola carga de trabajo**

1. La siguiente implementación de Kubernetes incluye pods que solicitan 1 CPU y 256 M de memoria por réplica o pod. En este escenario, los pods aún no se han creado.

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/refs/heads/main/examples/workloads/inflate.yaml
   ```

1. Para probar el proceso de escalado vertical, ejecute el siguiente comando. Karpenter agregará nuevos nodos al clúster.

   ```
   kubectl scale deployment inflate --replicas 10
   ```

1. Para probar el proceso de reducción vertical, ejecute el siguiente comando. Karpenter eliminará los nodos del clúster.

   ```
   kubectl scale deployment inflate --replicas 0
   ```

**Implemente una carga de trabajo en varios AZs**

1. Ejecute el siguiente comando para implementar una carga de trabajo que lance una implementación de Kubernetes, en la que los pods implementados deben distribuirse de manera uniforme entre las diferentes zonas de disponibilidad con un desfase máximo de 1.

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/refs/heads/main/examples/workloads/spread-zone.yaml
   ```

1. Ejecute el siguiente comando para ajustar el número de pods:

   ```
   kubectl scale deployment zone-spread --replicas 15
   ```

   Karpenter agregará nuevos nodos al clúster con al menos un nodo en una zona de disponibilidad diferente.

Para ver más ejemplos, consulta los [ejemplos de cargas de trabajo de Karpenter en](https://github.com/aws/karpenter-provider-aws/tree/main/examples/workloads). GitHub