Ajuste los recursos del pod con el escalador automático vertical de pods
El escalador automático vertical de pods
-
Tiene un clúster de Amazon EKS existente. Si no lo tiene, consulte Introducción a Amazon EKS.
-
Tiene instalado el servidor de métricas de Kubernetes. Para obtener más información, consulte Vea el uso de los recursos con el servidor de métricas de Kubernet.
-
Utiliza un cliente
kubectl
que está configurado para comunicarse con el clúster de Amazon EKS. -
OpenSSL
1.1.1
o posterior instalado en su dispositivo.
Implementar el escalador automático vertical de pods
En esta sección, implementará el escalador automático vertical de pods en el clúster.
-
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.
-
Clone el repositorio kubernetes/autoscaler
de GitHub. git clone https://github.com/kubernetes/autoscaler.git
-
Cambie al directorio de
vertical-pod-autoscaler
.cd autoscaler/vertical-pod-autoscaler/
-
(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
-
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. Reemplace111122223333
por el ID de su cuenta. Reemplaceregion-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
-
Implemente el escalador automático vertical de pods en el clúster con el siguiente comando.
./hack/vpa-up.sh
-
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.
-
Implemente el ejemplo del escalador automático vertical de pods de
hamster.yaml
con el siguiente comando.kubectl apply -f examples/hamster.yaml
-
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
-
Describa uno de los Pods para ver la reserva de
cpu
ymemory
. Reemplacec7d89d6db-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, elvpa-updater
vuelve a lanzar los Pods con valores actualizados. -
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
-
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. Lamemory
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. -
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>
-
Cuando termine de experimentar con la aplicación de ejemplo, elimínela con el siguiente comando.
kubectl delete -f examples/hamster.yaml