Utilizzo di Kubernetes Vertical Pod Autoscaler

Scopri come utilizzare Kubernetes Vertical Pod Autoscaler per regolare automaticamente le richieste di risorse e i limiti per i container in esecuzione in pod su un cluster creato utilizzando Kubernetes Engine (OKE).

Nota

Non è possibile utilizzare l'Autoscaler pod verticale di Kubernetes con pool di nodi virtuali.
Puoi utilizzare Kubernetes Vertical Pod Autoscaler per regolare automaticamente le richieste di risorse e i limiti per i container in esecuzione nei pod di una distribuzione. Vertical Pod Autoscaler può migliorare l'utilizzo delle risorse cluster mediante:
  • Impostazione automatica delle richieste in base all'uso per assicurarsi che la quantità di risorsa appropriata sia disponibile per ogni pod.
  • Mantenimento dei rapporti tra limiti e richieste specificati nelle configurazioni iniziali dei contenitori.
  • Ridimensionamento dei pod che richiedono risorse in eccesso, in base al loro utilizzo nel tempo.
  • Ridimensionamento dei pod che sono risorse sotto-richieste, in base al loro utilizzo nel tempo.

Il Vertical Pod Autoscaler ha tre componenti:

  • Raccomandante: esegue il monitoraggio del consumo di risorse corrente e passato e fornisce i valori consigliati di CPU e richiesta di memoria per un contenitore.
  • Aggiornamento: verifica la presenza di pod con risorse errate e le elimina in modo che i pod possano essere ricreati con i valori di richiesta aggiornati.
  • Plugin di ammissione: imposta le richieste di risorse corrette sui nuovi pod, ovvero i pod appena creati o ricreati dal controller a causa delle modifiche apportate dal programma di aggiornamento.

Per ulteriori informazioni, vedere Vertical Pod Autoscaler e Managing Resources for Containers nella documentazione di Kubernetes.

È possibile configurare Vertical Pod Autoscaler utilizzando l'oggetto di definizione delle risorse personalizzato VerticalPodAutoscaler. L'oggetto VerticalPodAutoscaler consente di specificare i pod per la scalabilità automatica verticale e gli eventuali suggerimenti sulle risorse da applicare. Per ulteriori informazioni, vedere VerticalPodAutoscaler e Oggetto Definizione risorsa personalizzata nella documentazione di Kubernetes.

L'Autoscaler pod verticale richiede l'installazione di un'origine delle metriche, ad esempio il server delle metriche Kubernetes, nel cluster. Per ulteriori informazioni, vedere Distribuzione del server delle metriche Kubernetes in un cluster.

Override intervalli limite

Il Vertical Pod Autoscaler tenta di formulare raccomandazioni entro i valori minimo e massimo specificati da un intervallo di limiti, se ne è stato definito uno. Tuttavia, se l'intervallo di limiti applicabile è in conflitto con i valori specificati nella sezione resourcePolicy del file manifesto VerticalPodAutoscaler, Vertical Pod Autoscaler dà priorità al criterio delle risorse e formula raccomandazioni di conseguenza (anche se i valori non rientrano nell'intervallo di limiti). Per ulteriori informazioni, vedere Limita intervalli e Intervallo limiti di override dei criteri risorsa nella documentazione di Kubernetes.

Creazione di suggerimenti senza applicarli

È possibile utilizzare Vertical Pod Autoscaler per creare e applicare suggerimenti o semplicemente per creare suggerimenti (senza aggiornare i pod). Per creare semplicemente suggerimenti senza applicarli, impostare updateMode: "Off" nella sezione updatePolicy del file manifesto VerticalPodAutoscaler.

Quando vengono creati i pod, Vertical Pod Autoscaler analizza le esigenze di CPU e memoria dei container e registra tali suggerimenti nel campo Status. Il Vertical Pod Autoscaler non esegue alcuna azione per aggiornare le richieste di risorse per i contenitori in esecuzione.

Esclusione di container specifici

È possibile utilizzare Vertical Pod Autoscaler per creare e applicare suggerimenti a tutti i contenitori di un pod oppure escludere in modo selettivo determinati contenitori. Per disattivare i suggerimenti per un determinato contenitore, nella sezione resourcePolicy del file manifesto VerticalPodAutoscaler specificare un valore containerName e impostare mode: "Off" nella sezione containerPolicies.

Note sul Vertical Pod Autoscaler

Tenere presente quanto riportato di seguito.

  • Al momento, si consiglia di non utilizzare il Vertical Pod Autoscaler con Horizontal Pod Autoscaler sulle metriche di utilizzo della CPU o della memoria. Tuttavia, si noti che è possibile utilizzare il Pod Autoscaler verticale con il Pod Autoscaler orizzontale su metriche personalizzate ed esterne. Vedere Supporto per le metriche personalizzate nella documentazione di Kubernetes.
  • I suggerimenti di Vertical Pod Autoscaler potrebbero superare le risorse disponibili (ad esempio, dimensione del nodo, dimensione disponibile, quota disponibile). Tenere presente che l'applicazione dei suggerimenti potrebbe determinare lo stato dei pod in sospeso.
  • Ogni volta che Vertical Pod Autoscaler aggiorna le risorse pod, il pod viene ricreato, il che causa il riavvio di tutti i container in esecuzione. Si noti che il pod potrebbe essere ricreato su un nodo diverso.
  • È possibile utilizzare Kubernetes Vertical Pod Autoscaler con pool di nodi gestiti, ma non con pool di nodi virtuali.

Utilizzo di Vertical Pod Autoscaler

Le istruzioni riportate di seguito illustrano la distribuzione di Vertical Pod Autoscaler in un cluster. Descrivono come:

  • Verificare che il server delle metriche Kubernetes sia stato installato in un cluster.
  • Scarica e distribuisci il Vertical Pod Autoscaler.
  • Consente di distribuire un'applicazione di esempio.
  • Visualizzare l'operazione di scala in azione.
  • Visualizza il suggerimento.
  • Pulire, rimuovendo l'applicazione campione e il Vertical Pod Autoscaler.

Passo 1: verificare l'installazione del server delle metriche Kubernetes

  1. Se non è già stato fatto, attenersi alla procedura per impostare il file di configurazione kubeconfig del cluster e (se necessario) impostare la variabile di ambiente KUBECONFIG in modo che punti al file. Si noti che è necessario impostare il proprio file kubeconfig. Non è possibile accedere a un cluster utilizzando un file kubeconfig impostato da un altro utente. Vedere Impostazione dell'accesso al cluster.
  2. Verificare che il server delle metriche Kubernetes sia stato distribuito correttamente sul cluster ed è disponibile immettendo:

    kubectl -n kube-system get deployment/metrics-server

    Se il comando restituisce un errore `Not Found`, è necessario distribuire il server delle metriche Kubernetes nel cluster prima di continuare. Vedere Distribuzione del server metriche Kubernetes in un cluster.

Passo 2: Scarica e distribuisci il Vertical Pod Autoscaler

  1. Scarica il codice sorgente di Vertical Pod Autoscaler da GitHub. Ad esempio, immettendo:
    git clone -b vpa-release-0.8 https://github.com/kubernetes/autoscaler.git
  2. Spostarsi nella directory vertical-pod-autoscaler.

    cd autoscaler/vertical-pod-autoscaler
  3. Se in precedenza è stato distribuito Vertical Pod Autoscaler, eliminarlo immettendo:
    ./hack/vpa-down.sh
  4. Distribuire Vertical Pod Autoscaler immettendo:

    ./hack/vpa-up.sh
  5. Verificare che i pod Autoscaler pod verticali siano stati creati correttamente immettendo:

    kubectl get pods -n kube-system

    L'output del comando precedente mostra i pod:

    vpa-admission-controller-59d9965cfb-bzs8l 1/1 Running 0 6m34s
    vpa-recommender-5bcb58569-mqdds 1/1 Running 0 6m43s
    vpa-updater-5979cbf757-scw2d 1/1 Running 0 6m46s

    Tieni presente che probabilmente vedrai nomi e numeri diversi.

Passo 3: distribuire l'applicazione di esempio

  1. Distribuire l'applicazione hamster di esempio per creare una distribuzione e un corrispondente Vertical Pod Autoscaler immettendo:
    kubectl apply -f examples/hamster.yaml

    L'output del comando precedente conferma la distribuzione e la creazione:

    verticalpodautoscaler.autoscaling.k8s.io/hamster-vpa created
    deployment.apps/hamster created

    La distribuzione dell'applicazione hamster crea una distribuzione con due pod e un Vertical Pod Autoscaler che punta alla distribuzione.

  2. Verificare che i baccelli di criceto siano stati creati correttamente inserendo:
    kubectl get pods -l app=hamster

    L'output del comando precedente conferma la creazione:

    NAME                     READY STATUS  RESTARTS AGE
    hamster-7cbfd64f57-mqqnk 1/1   Running 0        54s
    hamster-7cbfd64f57-rq6wv 1/1   Running 0        55s

    Nota che probabilmente vedrai nomi diversi per i baccelli di criceto.

  3. Visualizzare le prenotazioni di CPU e memoria utilizzando il comando kubectl describe pod e uno dei nomi dei pod del criceto restituito nel passo precedente. Ad esempio:
    kubectl describe pod hamster-7cbfd64f57-rq6wv

    Si noti che il comando precedente è solo un esempio. È necessario utilizzare uno dei nomi dei baccelli di criceto restituiti durante l'esecuzione del comando kubectl get pods -l app=hamster nel passo precedente.

    Nella sezione Richieste dell'output, è possibile visualizzare le riserve correnti di CPU e memoria del pod. Ad esempio:

    Requests:
          cpu:        100m
          memory:     50Mi

    Il Vertical Pod Autoscaler (in particolare, il Recommender) analizza i pod e ne osserva il comportamento per determinare se queste riserve di CPU e memoria sono appropriate. Si noti che potrebbero essere visualizzate diverse prenotazioni di CPU e memoria.

    Le prenotazioni non sono sufficienti perché l'applicazione di criceto campione è deliberatamente scarsamente finanziata. Ogni pod esegue un singolo contenitore che:

    • richiede 100 millicores, ma cerca di utilizzare più di 500 millicores
    • riserva molto meno memoria di quella necessaria per l'esecuzione

Passo 4: Visualizzare l'operazione di scala

Dopo aver analizzato i pod originali nell'applicazione di criceto campione e determinato che le riserve di CPU e memoria sono inadeguate, il Vertical Pod Autoscaler (in particolare l'Aggiornatore) rilancia i pod con valori diversi come proposto dal Recommender. Si noti che Vertical Pod Autoscaler non modifica il modello nella distribuzione, ma aggiorna le richieste effettive dei pod.

  1. Monitorare i baccelli nell'applicazione di criceto campione e attendere che l'Aggiornatore avvii un nuovo baccello di criceto con un nuovo nome, inserendo:
    kubectl get --watch pods -l app=hamster
  2. Quando si nota l'avvio di un nuovo hamster pod, visualizzare le relative prenotazioni di CPU e memoria utilizzando il comando kubectl describe pod e il nome del pod. Ad esempio:
    kubectl describe pod hamster-7cbfd64f57-wmg4

    Nella sezione Richieste dell'output, è possibile visualizzare le riserve CPU e memoria del nuovo pod:

        Requests:
          cpu:        587m
          memory:     262144k

    Nell'esempio precedente, si noti che la prenotazione della CPU è aumentata a 587 millicore e la riserva di memoria è aumentata a 262.144 Kilobyte. Il pod originale era scarsamente rifornito e il Vertical Pod Autoscaler ha corretto le prenotazioni originali con valori più appropriati. Si noti che potrebbero essere visualizzate diverse prenotazioni di CPU e memoria.

Passo 5: visualizzare la raccomandazione

Visualizzare i suggerimenti forniti dal Vertical Pod Autoscaler (in particolare, dal Recommender) immettendo:

kubectl describe vpa/hamster-vpa

L'output del comando precedente mostra i suggerimenti:

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/v1
Kind:         VerticalPodAutoscaler
Metadata:
  Creation Timestamp:  2020-09-22T18:08:09Z
  Generation:          27
  Resource Version:    19466955
  Self Link:           /apis/autoscaling.k8s.io/v1/namespaces/default/verticalpodautoscalers/hamster-vpa
  UID:                 689cee90-6fed-404d-adf9-b6fa8c1da660
Spec:
  Resource Policy:
    Container Policies:
      Container Name:  *
      Controlled Resources:
        cpu
        memory
      Max Allowed:
        Cpu:     1
        Memory:  500Mi
      Min Allowed:
        Cpu:     100m
        Memory:  50Mi
  Target Ref:
    API Version:  apps/v1
    Kind:         Deployment
    Name:         hamster
  Update Policy:
    Update Mode:  Auto
Status:
  Conditions:
    Last Transition Time:  2020-09-22T18:10:10Z
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  hamster
      Lower Bound:
        Cpu:     519m
        Memory:  262144k
      Target:
        Cpu:     587m
        Memory:  262144k
      Uncapped Target:
        Cpu:     587m
        Memory:  262144k
      Upper Bound:
        Cpu:     1
        Memory:  500Mi
Events:          <none>

Si noti che potrebbero essere visualizzati consigli diversi.

Passo 6: Cancellare

  1. Rimuovere l'applicazione campione immettendo:
    kubectl delete -f examples/hamster.yaml
  2. Nella directory vertical-pod-autoscaler eliminare la distribuzione Autoscaler pod verticale immettendo:

    ./hack/vpa-down.sh