Ajuste los recursos del pod con el escalador automático vertical de pods - Amazon EKS

Ajuste los recursos del pod con el escalador automático vertical de pods

El escalador automático vertical de pods 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 la utilización 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 verificar que funciona.

Implementar el escalador automático vertical de pods

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.

  2. Clone el repositorio kubernetes/autoscaler de GitHub.

    git clone https://github.com/kubernetes/autoscaler.git
  3. Cambie al directorio de vertical-pod-autoscaler.

    cd autoscaler/vertical-pod-autoscaler/
  4. (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
  5. 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.

    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
  6. Implemente el escalador automático vertical de pods en el clúster con el siguiente comando.

    ./hack/vpa-up.sh
  7. Verifique 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

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
  2. 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
  3. 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 vpa-recommender analiza los hamster de Pods para ver si los requisitos de CPU y memoria son adecuados. Si se necesita realizar ajustes, el vpa-updater vuelve a lanzar los Pods con valores actualizados.

  4. Espere a que vpa-updater lance un nuevo Pods de hamster. Esto debería tardar uno o dos minutos. Puede monitorear los Pods con el siguiente comando.

    nota

    Si no está seguro de que se haya lanzado un nuevo Pod, compare los nombres de los Pod con la lista anterior. Cuando se lance el nuevo Pod, verá un nuevo nombre de Pod.

    kubectl get --watch Pods -l app=hamster
  5. Cuando comience un nuevo Pods 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.

  6. 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>
  7. Cuando termine de experimentar con la aplicación de ejemplo, elimínela con el siguiente comando.

    kubectl delete -f examples/hamster.yaml