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 verificar 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 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 su ID de 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.

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

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

  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