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 quanto possa fornire un host contenitore o se l'host esaurisce la memoria disponibile.

Prerequisiti

Sintomi

Nella tabella seguente vengono descritti 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 pod Se un nodo esaurisce la memoria, kubelet può rimuovere i pod. Anche se il piano di controllo tenta di riprogrammare i pod rimossi in altri nodi con risorse, non c'è 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 problemi di conformità del nodo.
Interruzione della memoria (OOM) Un problema di OOM si verifica se la rimozione 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 della memoria

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

  • In un Web browser usare la funzionalità Informazioni dettagliate contenitore del servizio Azure Kubernetes nel portale di Azure.

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

Informazioni dettagliate sui contenitori è una funzionalità del servizio Azure Kubernetes che monitora le prestazioni del carico di lavoro dei contenitori. Per altre informazioni, vedere Abilitare informazioni dettagliate sui contenitori per servizio Azure Kubernetes cluster del servizio Azure Kubernetes.

  1. Nella 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 Insights.

  4. Impostare il valore dell'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 di 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 Informazioni dettagliate contenitore in un cluster del servizio Azure Kubernetes (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 Informazioni dettagliate contenitore all'interno di un cluster del servizio Azure Kubernetes servizio Azure Kubernetes.

    Note

    La percentuale di utilizzo della CPU o della memoria per i pod si basa sulla richiesta di 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.

Dopo aver identificato 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

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

Procedura consigliata Descrizione
Usare richieste e 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 è detta overcommit. 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 troppi pod in un singolo nodo. In questo caso, il nodo potrebbe alla fine essere portato offline. Inoltre, mentre kubelet rimuove i pod, li gestisce per priorità in base ai casi in cui l'utilizzo della memoria supera le richieste definite. È consigliabile impostare una richiesta di memoria vicina all'utilizzo effettivo.
Abilitare la scalabilità automatica orizzontale dei pod Ridimensionando il cluster, è possibile bilanciare le richieste tra vari pod per evitare la saturazione della memoria. Questa tecnica può ridurre il footprint della memoria nel nodo specifico.
Usare tag di anti-affinità Per gli scenari in cui la memoria non è associata per impostazione predefinita, è possibile usare selettori di nodo e affinità o tag 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 memoria ad accesso casuale (RAM) sono più adatte per gestire l'utilizzo elevato della memoria. A tale scopo, è necessario creare un nuovo pool di nodi, disattivare i nodi per 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.