Condividi tramite


Risolvere i problemi di saturazione della memoria nei cluster del servizio Azure Kubernetes

Questo articolo illustra i metodi per la risoluzione dei problemi di saturazione della memoria. La saturazione della memoria si verifica se almeno un'applicazione o un processo richiede più memoria di quella fornita da un host contenitore o se l'host esaurisce la memoria disponibile.

Prerequisiti

Sintomi

La tabella seguente illustra i sintomi comuni della saturazione della memoria.

Sintomo Descrizione
Pod non pianificabili Non è possibile pianificare pod aggiuntivi se il nodo è vicino al limite di memoria impostato.
Rimozione dei pod Se la memoria di un nodo è insufficiente, il kubelet può rimuovere i pod. Anche se il piano di controllo tenta di ripianificare i pod rimossi in altri nodi con risorse, non esiste alcuna garanzia che altri nodi dispongano di memoria sufficiente per eseguire questi pod.
Nodo non pronto La saturazione della memoria può causare kubelet e containerd non rispondere, causando alla fine problemi di preparazione dei nodi.
Interruzione della memoria insufficiente (OOM) Si verifica un problema OOM se l'eliminazione del pod non può impedire un problema del nodo.

Elenco di controllo per la risoluzione dei problemi

Per ridurre la saturazione della memoria, usare strumenti di monitoraggio efficaci e applicare le procedure consigliate.

Passaggio 1: Identificare i nodi con saturazione di memoria

Usare uno dei metodi seguenti per identificare i nodi con saturazione di memoria:

  • In un Web browser usare la funzionalità Container Insights del servizio Azure Kubernetes nel portale di Azure.

  • In una console usare lo strumento da riga di comando Kubernetes (kubectl).

Container Insights è una funzionalità all'interno del servizio Azure Kubernetes che monitora le prestazioni del carico di lavoro del contenitore. Per altre informazioni, vedere Enable Container insights for servizio Azure Kubernetes cluster (AKS).

  1. Nel portale di Azure cercare e selezionare Servizi Kubernetes.

  2. Nell'elenco dei servizi Kubernetes selezionare il nome del cluster.

  3. Nel riquadro di spostamento del cluster individuare l'intestazione Monitoraggio e quindi selezionare Informazioni dettagliate.

  4. Impostare il valore intervallo di tempo appropriato.

  5. Selezionare la scheda Nodi .

  6. Nell'elenco Metrica selezionare Working set di memoria (calcolato da Allocatable).

  7. Nel selettore percentili impostare l'esempio su Max e quindi selezionare l'etichetta della colonna Max % due volte. Questa azione ordina i nodi della tabella in base alla percentuale massima di memoria usata, dal più alto al più basso.

    portale di Azure screenshot della visualizzazione Nodi in Container Insights all'interno di un cluster servizio Azure Kubernetes .

  8. Poiché il primo nodo ha l'utilizzo di memoria più elevato, selezionare tale nodo per analizzare l'utilizzo della memoria dei pod in esecuzione nel nodo.

    portale di Azure screenshot dei contenitori di un nodo nella visualizzazione Nodi in Container Insights all'interno di un cluster servizio Azure Kubernetes (servizio Azure Kubernetes).

    Nota

    La percentuale di utilizzo della CPU o della memoria per i pod si basa sulla richiesta della CPU specificata per il contenitore. Non rappresenta la percentuale di utilizzo della CPU o della memoria per il nodo. Esaminare quindi l'utilizzo effettivo della CPU o della memoria anziché la percentuale di utilizzo della CPU o della memoria per i pod.

Ora che sono stati identificati i pod che usano memoria elevata, è possibile identificare le applicazioni in esecuzione nel pod.

Passaggio 2: Esaminare le procedure consigliate per evitare la saturazione della memoria

Esaminare la tabella seguente per informazioni su come implementare le procedure consigliate per evitare la saturazione della memoria.

Procedura consigliata Descrizione
Usare le richieste e i limiti di memoria Kubernetes offre opzioni per specificare le dimensioni minime della memoria (richiesta) e le dimensioni massime della memoria (limite) per un contenitore. Configurando i limiti per i pod, è possibile evitare la pressione della memoria sul nodo. Assicurarsi che i limiti di aggregazione per tutti i pod in esecuzione non superino la memoria disponibile del nodo. Questa situazione è chiamata overcommitting. L'utilità di pianificazione Kubernetes alloca le risorse in base alle richieste e ai limiti impostati tramite QoS (Quality of Service ). Senza limiti appropriati, l'utilità di pianificazione potrebbe pianificare un numero eccessivo di pod in un singolo nodo. Questo potrebbe infine far cadere il nodo. Inoltre, mentre il kubelet rimuove i pod, assegna priorità ai pod in cui l'utilizzo della memoria supera le richieste definite. È consigliabile impostare la richiesta di memoria vicino all'utilizzo effettivo.
Abilitare la scalabilità automatica orizzontale dei pod Ridimensionando il cluster, è possibile bilanciare le richieste tra molti pod per evitare la saturazione della memoria. Questa tecnica può ridurre il footprint di memoria nel nodo specifico.
Usare tag anti-affinità Per gli scenari in cui la memoria non è associata per progettazione, è possibile usare selettori di nodo e tag di affinità o anti-affinità, che possono isolare il carico di lavoro in nodi specifici. Usando i tag anti-affinità, è possibile impedire ad altri carichi di lavoro di pianificare i pod in questi nodi. In questo modo si riduce il problema di saturazione della memoria.
Scegliere macchine virtuali SKU superiori Le macchine virtuali con una maggiore quantità di memoria ad accesso casuale (RAM) sono più adatte per gestire un utilizzo elevato della memoria. Per usare questa opzione, è necessario creare un nuovo pool di nodi, isolare i nodi (renderli non pianificabili) e svuotare il pool di nodi esistente.
Isolare i carichi di lavoro di sistema e utente È consigliabile eseguire le applicazioni in un pool di nodi utente. Questa configurazione assicura che sia possibile isolare i pod specifici di Kubernetes nel pool di nodi di sistema e mantenere le prestazioni del cluster.

Ulteriori informazioni

Dichiarazione di non responsabilità sulle informazioni di terze parti

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti

Dichiarazione di non responsabilità di contatti di terze parti

Microsoft fornisce informazioni di contatto di terze parti per aiutarti a trovare ulteriori informazioni su questo argomento. Queste informazioni di contatto sono soggette a modifica senza preavviso. Microsoft non garantisce l'accuratezza delle informazioni di contatto di terze parti.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.