Regolazione delle risorse del pod con Vertical Pod Autoscaler - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Regolazione delle risorse del pod con Vertical Pod Autoscaler

Vertical Pod Autoscaler di Kubernetes regola automaticamente le prenotazioni di CPU e memoria per i pod per aiutare a “dimensionare correttamente” le applicazioni. Questo processo di adeguamento può migliorare l’utilizzo delle risorse del cluster e liberare CPU e memoria per altri pod. Questo argomento illustra come implementare Vertical Pod Autoscaler nel cluster e verificarne il funzionamento.

Implementazione di Vertical Pod Autoscaler

In questa sezione, verrà implementato Vertical Pod Autoscaler nel cluster.

  1. Aprire una finestra del terminale e passare a una directory in cui si desidera scaricare il codice sorgente di Vertical Pod Autoscaler.

  2. Clona il repository GitHub kubernetes/autoscaler.

    git clone https://github.com/kubernetes/autoscaler.git
  3. Passare alla directory vertical-pod-autoscaler.

    cd autoscaler/vertical-pod-autoscaler/
  4. (Facoltativo) Se è già stata implementata un'altra versione di Vertical Pod Autoscaler, rimuoverla con il comando seguente.

    ./hack/vpa-down.sh
  5. Se i nodi non hanno accesso Internet al registro del container registry.k8s.io, devi estrarre le seguenti immagini e inviarle al tuo repository privato. Per ulteriori informazioni su come estrarre e inviare immagini al tuo repository privato, consulta la sezione Copia di un'immagine di container da un repository a un altro.

    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

    Se invii le immagini a un repository Amazon ECR privato, sostituisci registry.k8s.io nei manifesti con il tuo registro. Sostituire 111122223333 con l'ID account. Sostituisci region-code con la regione AWS in cui si trova il cluster. I comandi seguenti presuppongono che tu abbia dato al repository lo stesso nome del repository nel manifesto. Se hai dato un nome diverso al repository, dovrai modificare anch’esso.

    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. Implementare Vertical Pod Autoscaler nel cluster mediante il comando seguente.

    ./hack/vpa-up.sh
  7. Verifica che i pod di Vertical Pod Autoscaler siano stati creati correttamente.

    kubectl get pods -n kube-system

    Di seguito viene riportato un output di esempio:

    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

Test dell'installazione di Vertical Pod Autoscaler

In questa sezione, verrà implementata un'applicazione di esempio per verificare il corretto funzionamento di Vertical Pod Autoscaler.

  1. Implementare l'applicazione di esempio hamster.yaml per Vertical Pod Autoscaler mediante il comando seguente.

    kubectl apply -f examples/hamster.yaml
  2. Recupera i pod dall’applicazione esemplificativa hamster.

    kubectl get pods -l app=hamster

    Di seguito viene riportato un output di esempio:

    hamster-c7d89d6db-rglf5 1/1 Running 0 48s hamster-c7d89d6db-znvz5 1/1 Running 0 48s
  3. Descrivi uno dei pod per visualizzare la prenotazione di cpu e memory. Sostituisci c7d89d6db-rglf5 con uno degli ID restituiti nell'output del passaggio precedente.

    kubectl describe pod hamster-c7d89d6db-rglf5

    Di seguito viene riportato un output di esempio:

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

    Nota che il pod originale riserva 100 millicpu di CPU e 50 mebibyte di memoria. Per questa applicazione esemplificativa, 100 millicpu è un valore inferiore a quanto il pod deve eseguire, quindi risulta limitato dalla CPU. Il pod riserva inoltre una quantità di memoria nettamente inferiore rispetto alla necessaria. L’implementazione di Vertical Pod Autoscaler vpa-recommender analizza i pod hamster per verificare se i requisiti di CPU e memoria siano appropriati. Se sono necessari adeguamenti, vpa-updater rilancia i pod con valori aggiornati.

  4. Attendi che vpa-updater avvii un nuovo pod hamster. Potrebbero essere necessari uno o due minuti. È possibile monitorare i pod con il comando seguente.

    Nota

    Se non si è sicuri che sia stato avviato un nuovo pod, confronta i nomi dei pod facendo riferimento all’elenco precedente. All’avvio del nuovo pod, sarà visualizzato il relativo nome.

    kubectl get --watch Pods -l app=hamster
  5. Quando è avviato un nuovo pod hamster, aggiungi una descrizione e visualizza le prenotazioni di CPU e memoria aggiornate.

    kubectl describe pod hamster-c7d89d6db-jxgfv

    Di seguito viene riportato un output di esempio:

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

    Nell'output precedente puoi osservare che la prenotazione della cpu è passata a 587 millicpu, ossia un valore di oltre cinque volte superiore a quello originale. La memory è aumentata a 262.144 KB (circa 250 mebibyte), ossia cinque volte il valore originale. Questo pod disponeva di un numero insufficiente di risorse e pertanto Vertical Pod Autoscaler ha corretto la stima con un valore più adeguato.

  6. Descrivere la risorsa hamster-vpa per visualizzare la nuova raccomandazione.

    kubectl describe vpa/hamster-vpa

    Di seguito viene riportato un output di esempio:

    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. Dopo aver provato l'applicazione di esempio, è possibile eliminarla con il comando seguente.

    kubectl delete -f examples/hamster.yaml