Perché i pod mostrano errori del tipo “ pull QPS exceeded ” durante il download delle immagini?

All'avvio dei pod, è possibile che vengano visualizzati errori che indicano che le operazioni di download delle immagini sono soggette a limitazioni, con messaggi del tipo “ pull QPS exceeded ”.

Quando si distribuiscono pod che devono estrarre immagini di container, si possono osservare i seguenti sintomi:

  • Messaggi di errore contenenti " pull QPS exceeded " durante l'avvio del pod
  • Tempi di estrazione delle immagini lenti, soprattutto quando si estraggono più immagini di grandi dimensioni
  • I baccelli impiegano più tempo del previsto per raggiungere lo stato di Running
  • Le operazioni di estrazione dell'immagine sembrano essere limitate o limitate nella velocità

La causa più probabile della lentezza nel recupero delle immagini, accompagnata da errori del tipo " pull QPS exceeded ", è che i nodi di lavoro della VPC stanno raggiungendo il limite di larghezza di banda dell'I/O del disco.

I nodi worker VPC hanno limiti di larghezza di banda diversi a seconda della loro configurazione:

  • Nodi worker standard (senza storage secondario): Limitato a 393 Mbps (49 MB/sec) per le operazioni di I/O su disco
  • Nodi worker con storage secondario: Limiti di larghezza di banda più elevati a seconda del livello di storage selezionato

Quando più pod tentano di estrarre contemporaneamente immagini di container di grandi dimensioni:

  1. Ogni operazione di estrazione dell'immagine consuma larghezza di banda I/O del disco
  2. La richiesta combinata di larghezza di banda può saturare rapidamente il limite di 49 MB/sec
  3. Una volta raggiunto il limite, le operazioni di estrazione delle immagini rallentano significativamente
  4. Kubernetes potrebbe segnalare errori del tipo “ pull QPS exceeded ” poiché limita le operazioni

Per determinare se si sta raggiungendo il limite di larghezza di banda del nodo worker VPC, utilizzare le funzionalità di monitoraggio di IBM Cloud.

Controllare la larghezza di banda I/O del disco

  1. Spostarsi su Osserva → Metriche nella console OpenShift del cluster.

  2. Utilizzare la seguente query Prometheus per monitorare le velocità di lettura e scrittura del disco:

    irate(node_disk_read_bytes_total[2m]) + irate(node_disk_written_bytes_total[2m])
    
  3. Interpretare i risultati:

    • Se i dispositivi mostrano valori prossimi o pari a 49M (49 MB/sec), significa che si sta raggiungendo il limite di larghezza di banda.
    • Valori sostenuti pari o vicini a questo limite durante le operazioni di estrazione delle immagini confermano la saturazione della larghezza di banda.
    • I picchi multipli a questo limite indicano ripetute limitazioni della larghezza di banda.

Controllare i tempi di estrazione delle immagini

È anche possibile controllare direttamente i tempi di estrazione delle immagini:

oc get events -A | grep -E "Successfully pulled image"

Questo comando mostra la durata di ogni estrazione di immagini, aiutando a identificare le estrazioni lente.

Risolvere il problema

Soluzione primaria: Utilizzare pool di lavoratori con storage secondario

La soluzione consigliata è quella di utilizzare pool di lavoratori con storage secondario collegato. L'archiviazione secondaria con 10iops-tier fornisce una larghezza di banda I/O dedicata che non compete con il disco di avvio, con conseguente throughput molto più elevato per l'estrazione simultanea di immagini e tempi di avvio del pod più rapidi.

  1. Creare un nuovo pool di lavoratori con storage secondario.

    • Quando si crea un nuovo pool di lavoratori, selezionare un flavor con storage secondario.
    • Utilizzate una delle opzioni di archiviazione di 10iops-tier per ottenere prestazioni ottimali.
  2. Migrare i carichi di lavoro nel nuovo pool.

  3. Svuotare e rimuovere il vecchio pool di lavoratori al termine della migrazione.

Ulteriori considerazioni

Sebbene l'aggiornamento allo storage secondario sia la soluzione principale, è anche possibile:

Ridurre le dimensioni delle immagini
Utilizzare costruzioni a più fasi e ridurre al minimo gli strati
Utilizzare la cache delle immagini
Pre-tirare le immagini più usate ai nodi worker
Ottimizzare imagePullPolicy
Configurare le specifiche del pod per ridurre i tiri non necessari:
  • Usare imagePullPolicy: IfNotPresent per estrarre le immagini solo se non esistono già sul nodo.
  • Evitare imagePullPolicy: Always a meno che non sia necessario prelevare ogni volta l'ultima versione.
  • Per i carichi di lavoro di produzione, utilizzare tag immagine specifici, non latest, combinati con IfNotPresent per ridurre al minimo le estrazioni.
Impostare il monitoraggio e gli avvisi
Impostare avvisi per velocità di I/O del disco elevate e sostenute che si avvicinano a 49 MB/sec.
  • Monitorate i tempi di estrazione delle immagini come parte delle metriche di distribuzione.
  • Tracciare i tempi di avvio dei pod per identificare il degrado delle prestazioni.