Escalador automático vertical de pods - Amazon EKS

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 comprobar que funciona.

Requisitos previos

Implementar el escalador automático vertical de pods

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

Para implementar el escalador automático vertical de pods

  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 k8s.gcr.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 e insertar las imágenes en su propio repositorio privado, consulte Copiar una imagen de contenedor de un repositorio a otro repositorio.

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

    Si va a enviar las imágenes a un repositorio privado de Amazon ECR, sustituya k8s.gcr.io en los manifiestos por su registro. Reemplace 111122223333 por su ID de cuenta y sustituya region-code por la Región de AWS en la que se encuentra su registro. 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/k8s.gcr.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/admission-controller-deployment.yaml sed -i.bak -e 's/k8s.gcr.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/recommender-deployment.yaml sed -i.bak -e 's/k8s.gcr.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. Compruebe que se hayan creado correctamente los pods del escalador automático vertical de pods.

    kubectl get pods -n kube-system

    Salida:

    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 comprobar que el escalador automático vertical de pods funciona.

Para probar la instalación del escalador automático vertical de pods

  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

    Salida:

    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 devueltos en la salida del paso anterior.

    kubectl describe pod hamster-c7d89d6db-rglf5

    Salida:

    ... Containers: hamster: Container ID: docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24 Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: docker-pullable://k8s.gcr.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 se necesita realizar ajustes, el vpa-updater vuelve a lanzar los pods con valores actualizados.

  4. Espere a que vpa-updater lance un nuevo pod 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 pods 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 pod de hamster, descríbalo y vea las reservas de CPU y memoria actualizadas.

    kubectl describe pod hamster-c7d89d6db-jxgfv

    Salida:

    ... Containers: hamster: Container ID: docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: docker-pullable://k8s.gcr.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

    Salida:

    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