

 **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.

# Ajuste de los recursos del pod con el escalador automático vertical de pods
<a name="vertical-pod-autoscaler"></a>

El [Escalador automático vertical de pods](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) de Kubernetes ajusta de forma automática las reservas de CPU y memoria de sus pods para ayudar a “ajustar el tamaño” de las aplicaciones. Este ajuste puede mejorar el uso de los recursos del clúster y liberar CPU y memoria para otros pods. Este tema lo ayuda a implementar el escalador automático vertical de pods en el clúster y a comprobar que funciona.
+ Tiene un clúster de Amazon EKS existente. Si no lo tiene, consulte [Introducción a Amazon EKS](getting-started.md).
+ Tiene instalado el servidor de métricas de Kubernetes. Para obtener más información, consulte [Visualización del uso de los recursos con el servidor de métricas de Kubernetes](metrics-server.md).
+ Utiliza un cliente `kubectl` que está [configurado para comunicarse con el clúster de Amazon EKS](getting-started-console.md#eks-configure-kubectl).
+ OpenSSL `1.1.1` o posterior instalado en su dispositivo.

## Implementar el escalador automático vertical de pods
<a name="vpa-deploy"></a>

En esta sección, implementará el escalador automático vertical de pods en el clúster.

1. Abra una ventana de terminal y vaya al directorio en el que desee descargar el código fuente del escalador automático vertical de pods.

1. Clone el repositorio [kubernetes/autoscaler](https://github.com/kubernetes/autoscaler) de GitHub.

   ```
   git clone https://github.com/kubernetes/autoscaler.git
   ```

1. Cambie al directorio de `vertical-pod-autoscaler`.

   ```
   cd autoscaler/vertical-pod-autoscaler/
   ```

1. (Opcional) Si ya ha implementado otra versión del escalador automático vertical de pods, elimínela con el siguiente comando.

   ```
   ./hack/vpa-down.sh
   ```

1. Si los nodos no tienen acceso a Internet al registro de contenedores `registry.k8s.io`, entonces debe extraer las siguientes imágenes y enviarlas a su propio repositorio privado. Para obtener más información sobre cómo extraer y enviar las imágenes en su propio repositorio privado, consulte [Copiar una imagen de contenedor de un repositorio en otro repositorio](copy-image-to-repository.md).

   ```
   registry.k8s.io/autoscaling/vpa-admission-controller:0.10.0
   registry.k8s.io/autoscaling/vpa-recommender:0.10.0
   registry.k8s.io/autoscaling/vpa-updater:0.10.0
   ```

   Si va a enviar las imágenes a un repositorio privado de Amazon ECR, sustituya `registry.k8s.io` en los manifiestos por su registro. Reemplace *111122223333* por el ID de su cuenta. Reemplace *region-code* por la región de AWS en la que se encuentra el clúster. El siguiente comando supone que el nombre del repositorio privado es el mismo que el repositorio de origen en el manifiesto. Si le ha dado un nombre diferente a su repositorio, tendrá que cambiarlo también.

   ```
   sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/admission-controller-deployment.yaml
   sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/recommender-deployment.yaml
   sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/updater-deployment.yaml
   ```

1. Implemente el escalador automático vertical de pods en el clúster con el siguiente comando.

   ```
   ./hack/vpa-up.sh
   ```

1. Compruebe que se hayan creado correctamente los pods del Escalador automático vertical de pods.

   ```
   kubectl get pods -n kube-system
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   NAME                                        READY   STATUS    RESTARTS   AGE
   [...]
   metrics-server-8459fc497-kfj8w              1/1     Running   0          83m
   vpa-admission-controller-68c748777d-ppspd   1/1     Running   0          7s
   vpa-recommender-6fc8c67d85-gljpl            1/1     Running   0          8s
   vpa-updater-786b96955c-bgp9d                1/1     Running   0          8s
   ```

## Comprobar la instalación del escalador automático vertical de pods
<a name="vpa-sample-app"></a>

En esta sección, implementará una aplicación de ejemplo para verificar que el escalador automático vertical de pods funciona.

1. Implemente el ejemplo del escalador automático vertical de pods de `hamster.yaml` con el siguiente comando.

   ```
   kubectl apply -f examples/hamster.yaml
   ```

1. Obtenga los pods de la aplicación de ejemplo de `hamster`.

   ```
   kubectl get pods -l app=hamster
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   hamster-c7d89d6db-rglf5   1/1     Running   0          48s
   hamster-c7d89d6db-znvz5   1/1     Running   0          48s
   ```

1. Describa uno de los pods para ver la reserva de `cpu` y `memory`. Reemplace *c7d89d6db-rglf5* por uno de los ID obtenidos en la salida del paso anterior.

   ```
   kubectl describe pod hamster-c7d89d6db-rglf5
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   [...]
   Containers:
     hamster:
       Container ID:  docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24
       Image:         registry.k8s.io/ubuntu-slim:0.1
       Image ID:      docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
       Port:          <none>
       Host Port:     <none>
       Command:
         /bin/sh
       Args:
         -c
         while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
       State:          Running
         Started:      Fri, 27 Sep 2019 10:35:16 -0700
       Ready:          True
       Restart Count:  0
       Requests:
         cpu:        100m
         memory:     50Mi
   [...]
   ```

   Puede ver que el pod original reserva 100 milicpu de CPU y 50 mebibytes de memoria. En esta aplicación de ejemplo, 100 milicpu es menos de lo que necesita el pod para ejecutarse, por lo que está limitada a la CPU. También reserva mucha menos memoria de la que necesita. La implementación del Escalador automático vertical de pods de `vpa-recommender` analiza los pods de hamster para ver si los requisitos de CPU y memoria son adecuados. Si es necesario hacer algún ajuste, `vpa-updater` vuelve a lanzar los pods con valores actualizados.

1. Espere a que `vpa-updater` lance un nuevo pod de hamster. Esto debería tardar uno o dos minutos. Puede supervisar los pods con el siguiente comando.
**nota**  
Si no tiene la seguridad de que se haya lanzado un nuevo pod, compare los nombres de los pods con la lista anterior. Cuando se lance el nuevo pod, verá un nuevo nombre de pod.

   ```
   kubectl get --watch Pods -l app=hamster
   ```

1. Cuando se inicie un nuevo pod de hamster, descríbalo y vea las reservas de CPU y memoria actualizadas.

   ```
   kubectl describe pod hamster-c7d89d6db-jxgfv
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   [...]
   Containers:
     hamster:
       Container ID:  docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db
       Image:         registry.k8s.io/ubuntu-slim:0.1
       Image ID:      docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
       Port:          <none>
       Host Port:     <none>
       Command:
         /bin/sh
       Args:
         -c
         while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
       State:          Running
         Started:      Fri, 27 Sep 2019 10:37:08 -0700
       Ready:          True
       Restart Count:  0
       Requests:
         cpu:        587m
         memory:     262144k
   [...]
   ```

   En la salida anterior puede ver que la reserva de `cpu` ha aumentado a 587 milicpu, que es más de cinco veces el valor original. La `memory` ha aumentado a 262 144 kilobytes, lo que equivale a 250 mebibytes, o a cinco veces el valor original. Este pod no tenía recursos suficientes, y el Escalador automático vertical de pods corrigió la estimación con un valor mucho más adecuado.

1. Describa el recurso de `hamster-vpa` para ver la nueva recomendación.

   ```
   kubectl describe vpa/hamster-vpa
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   Name:         hamster-vpa
   Namespace:    default
   Labels:       <none>
   Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                   {"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d...
   API Version:  autoscaling.k8s.io/v1beta2
   Kind:         VerticalPodAutoscaler
   Metadata:
     Creation Timestamp:  2019-09-27T18:22:51Z
     Generation:          23
     Resource Version:    14411
     Self Link:           /apis/autoscaling.k8s.io/v1beta2/namespaces/default/verticalpodautoscalers/hamster-vpa
     UID:                 d0d85fb9-e153-11e9-ae53-0205785d75b0
   Spec:
     Target Ref:
       API Version:  apps/v1
       Kind:         Deployment
       Name:         hamster
   Status:
     Conditions:
       Last Transition Time:  2019-09-27T18:23:28Z
       Status:                True
       Type:                  RecommendationProvided
     Recommendation:
       Container Recommendations:
         Container Name:  hamster
         Lower Bound:
           Cpu:     550m
           Memory:  262144k
         Target:
           Cpu:     587m
           Memory:  262144k
         Uncapped Target:
           Cpu:     587m
           Memory:  262144k
         Upper Bound:
           Cpu:     21147m
           Memory:  387863636
   Events:          <none>
   ```

1. Cuando termine de experimentar con la aplicación de ejemplo, elimínela con el siguiente comando.

   ```
   kubectl delete -f examples/hamster.yaml
   ```