Vertical Pod Autoscaler - Amazon EKS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Vertical Pod Autoscaler

Il Vertical Pod Autoscaler di Kubernetes regola automaticamente le prenotazioni di CPU e memoria per i tuoi Pods in modo da "dimensionare correttamente" le tue applicazioni. Questo processo di adeguamento può migliorare l'utilizzo delle risorse del cluster e liberare CPU e memoria per altri Pods. Questo argomento illustra come implementare Vertical Pod Autoscaler nel cluster e verificarne il funzionamento.

Prerequisiti

Implementazione di Vertical Pod Autoscaler

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

Implementazione di Vertical Pod Autoscaler
  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. Sostituisci 111122223333 con l'ID del tuo 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 al repository un nome diverso, 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 Pods 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.

Per testare l'installazione 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 Pods dall'applicazione di esempio 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 Pods per visualizzarne la relativa 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
    [...]

    Tieni presente che il Pod originale riserva 100 millicpu di CPU e 50 mebibyte di memoria. Per questa applicazione di esempio, 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 vpa-recommender di Vertical Pod Autoscaler analizza i Pods hamster per verificare se i requisiti di CPU e memoria sono appropriati. Se sono necessari adeguamenti, vpa-updater riavvia i Podscon i valori aggiornati.

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

    Nota

    Se non sei certo che sia stato avviato un nuovo Pod, confronta i nomi dei Pod facendo riferimento all'elenco precedente. All'avvio del nuovo Pod, verrà visualizzato un nuovo nome per il Pod.

    kubectl get --watch Pods -l app=hamster
  5. Quando viene avviato un nuovo pod 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