Guida per principianti al monitoraggio di Kubernetes

Kubernetes è uno dei migliori strumenti di orchestrazione dei container che aiuta a gestire i carichi di lavoro containerizzati senza problemi.

Prima di Kubernetes, i team DevOps e gli amministratori IT dovevano eseguire molti passaggi manuali per impostare, gestire e scalare le applicazioni containerizzate. Kubernetes ha rivoluzionato il processo fornendo la distribuzione, la gestione e la scalabilità automatizzate dei container.

Kubernetes, noto anche come K9s, si occupa delle complesse attività di orchestrazione dei container, consentendo alle aziende di concentrarsi sulle applicazioni. Non c'è da stupirsi che giganti della tecnologia come Google, Spotify e Airbnb abbiano adottato Kubernetes per scalare le loro aziende. Per scoprire tutti i vantaggi di Kubernetes, ti consigliamo di leggere anche la nostra guida pratica a Kubernetes.

Se da un lato Kubernetes ha semplificato il processo di gestione dei container, dall'altro ha aumentato la complessità del monitoraggio e della registrazione di diverse metriche importanti per i team DevOps e gli amministratori IT per mantenere le cose in ordine. In questo articolo parleremo in dettaglio del monitoraggio di Kubernetes.

kubernetes

Che cos'è il monitoraggio di Kubernetes?

Il monitoraggio di Kubernetes si riferisce alla gestione proattiva delle applicazioni distribuite sui cluster Kubernetes. Un corretto monitoraggio di Kubernetes implica il monitoraggio dello stato dell'ambiente Kubernetes e aiuta ad approfondire l'utilizzo delle risorse. Prima di entrare nei dettagli del monitoraggio di Kubernetes, diamo un'occhiata ai componenti essenziali.

Quali sono i componenti di Kubernetes?

I componenti di Kubernetes includono cluster, nodi, pod, spazi dei nomi e distribuzioni. Per saperne di più sugli oggetti di Kubernetes, consultate il nostro articolo "Cos'è Kubernetes?". A causa della natura dinamica di Kubernetes e dell'interazione dei vari oggetti e funzioni, K8s è diventato piuttosto complesso. Il monitoraggio aiuta a superare questa complessità per garantire il buon funzionamento dell'ambiente Kubernetes.

Perché è importante monitorare l'ambiente Kubernetes?

Dashboard Checkmk per il monitoraggio del cluster Kubernetes

Il monitoraggio di Kubernetes offre molti vantaggi alle aziende. Alcuni vantaggi fondamentali sono:

  1. Ottimizzazione dell'ambiente Kubernetes. Uno strumento di monitoraggio adeguato fornisce informazioni sull'utilizzo delle risorse. Grazie a un monitoraggio correttamente configurato, è possibile valutare qualsiasi sottoutilizzo o sovrautilizzo dell'infrastruttura e ricevere avvisi se le metriche definite superano una determinata soglia.
  2. Risoluzione efficiente dei problemi. La complessità del monitoraggio di un problema può essere problematica. Il monitoraggio di Kubernetes attraverso uno strumento di monitoraggio aiuterà a individuare rapidamente i log e i dati per risolvere il problema.
  3. Messa a punto delle prestazioni. Sulla base dei dati forniti dal monitoraggio, è possibile mettere a punto i diversi componenti del cluster Kubernetes senza impattare sulle prestazioni dell'applicazione. Se, ad esempio, un pod Kubernetes non funziona a causa di una memoria insufficiente, è possibile allocare più memoria a quel pod.

Perché utilizzare uno strumento di monitoraggio IT per monitorare Kubernetes?

I vantaggi del monitoraggio di Kubernetes dipendono dalle capacità della soluzione di monitoraggio utilizzata. Sebbene esistano già strumenti nativi di monitoraggio di Kubernetes, essi non sono sufficienti per ottenere tutti i vantaggi sopra menzionati. È necessario implementare strumenti come Kubernetes dashboard, kubectl e l'aggregazione dei log, che a loro volta creano ulteriore overhead. Sono adatti soprattutto per il monitoraggio dello stato o dei log. Per un'applicazione containerizzata di livello aziendale distribuita su un cluster Kubernetes, è necessario qualcosa di più.

Gli strumenti di monitoraggio nativi non dispongono delle seguenti funzioni vitali per il monitoraggio:

  • Mancano di raccolta e aggregazione automatica dei log. Con gli strumenti nativi, è necessario raccogliere manualmente i dati e capire come aggregarli in modo appropriato per ottenere informazioni significative.
  • Non possono raccogliere e valutare i dati di audit. Pertanto, non è possibile tracciare correttamente gli eventi di audit.
  • Mancano di un sistema di avvisi completo basato su metriche delle risorse, allarmi preconfigurati e avvisi di registro.

A causa dei punti deboli delle soluzioni di monitoraggio native, è necessaria una soluzione di monitoraggio di terze parti che risolva questi problemi con semplicità e facilità.

Quali sono le metriche fondamentali per il monitoraggio di Kubernetes?

Per avere un'idea generale dello stato di salute di un cluster, è necessario tenere traccia di alcune metriche. Le metriche chiave includono il numero di nodi in un cluster, l'utilizzo delle risorse dei nodi e il numero di pod.

Quando si monitorano i pod, non è importante solo l'utilizzo delle risorse dei singoli pod, ma anche quello del rispettivo deployment.

È inoltre possibile monitorare lo stato di salute dei deployment, ad esempio se è disponibile la quantità di repliche desiderata, nonché i container e le loro prestazioni.

È inoltre possibile ottenere informazioni più dettagliate. Ad esempio, lo strumento di monitoraggio dovrebbe dirvi se un container continua a bloccarsi. Altrimenti, dato che Kubernetes lo riavvia automaticamente, non è facile rilevarlo da soli. Pertanto, è necessario monitorare il contatore dei riavvii dei container per tenere sotto controllo questo problema.

Le metriche generali delle prestazioni da monitorare sono, ad esempio, CPU, memoria, file system, I/O su disco, prestazioni del kernel e thread. Il monitoraggio dovrebbe anche impostare soglie appropriate per attivare gli avvisi quando necessario.

Come funziona il monitoraggio di Kubernetes?

Monitoraggio dei servizi di un nodo Kubernetes con le metriche

È possibile utilizzare strumenti nativi per monitorare Kubernetes. Potete anche utilizzare strumenti che raccolgono e salvano le metriche per un'analisi successiva. Oppure si può seguire un approccio più olistico, raccogliendo le metriche da ogni nodo, come fa Checkmk. Per ottenere una visione olistica, è opportuno combinare il monitoraggio dei carichi di lavoro e dell'infrastruttura sottostante.

Inoltre, è necessario implementare l'aggregazione dei log per individuare schemi o indagare sui problemi.

Tuttavia, il monitoraggio di diversi oggetti Kubernetes differisce l'uno dall'altro.

Come si monitorano i container in Kubernetes?

È possibile monitorare i container tramite kubecetl. Si tratta di un comando get per il server API che fornisce un file JSON contenente lo stato e gli eventi del container. Se si ha più di un contenitore in esecuzione in un pod, è necessario specificare di ottenere i dati dal contenitore desiderato. Tuttavia, l'API non fornisce metriche di utilizzo.

È possibile utilizzare strumenti come Kubernetes Dashboard per ottenere i dati da una metrica di base in un'interfaccia utente. Tuttavia, è necessario implementare Dashboard, il che comporta un sovraccarico supplementare.

Per monitorare i container, Kubernetes dispone della funzione di liveness check. Su questa base, Kubernetes utilizza le sonde di liveness per monitorare se l'applicazione è disponibile o meno. In alternativa, lo stato può essere determinato anche utilizzando le sonde di disponibilità, ma di solito si utilizzano le sonde di disponibilità.

Come si monitorano i log in Kubernetes?

Il monitoraggio dei log è particolarmente importante per la risoluzione dei problemi. Con kubectl è possibile accedere ai log e avviare la risoluzione dei problemi quando si rileva un problema.

Normalmente, tuttavia, si lavora con gli endpoint di salute per monitorare lo stato delle applicazioni. Se qualcosa non va, il software di monitoraggio invia un avviso.

Come si monitorano i servizi in Kubernetes?

I servizi sono responsabili della comunicazione dei singoli oggetti all'interno di un cluster. Assegnano un nome e un indirizzo IP univoco a un gruppo di pod e garantiscono che siano accessibili agli altri pod.

Tuttavia, il monitoraggio di un servizio è interessante solo quando apre un'applicazione al mondo esterno. Il servizio consente quindi l'accesso agli endpoint dell'applicazione. È possibile monitorarli, ad esempio, con un controllo HTTP in Checkmk e verificare lo stato di salute dell'applicazione. Quindi, alla fine, non si sta monitorando il 'servizio' dell'oggetto Kubernetes, ma si sta utilizzando il servizio dell'applicazione per monitorare l'applicazione e verificare se è in esecuzione o meno.

Perché Kubernetes fallisce?

Ci sono molte ragioni per cui un cluster o un pod Kubernetes potrebbero essere difettosi. Le ragioni più comuni includono colli di bottiglia delle risorse, errori di configurazione, problemi di dipendenza, problemi di rete e attacchi mirati.

Alcuni comuni messaggi di errore dei pod includono:

  • "CrashLoopBackOff": Il pod non riesce ad avviarsi o si blocca ripetutamente.
  • "ImagePullBackOff": Il pod non è in grado di estrarre l'immagine del contenitore richiesta.
  • "ErrImagePull": Si è verificato un errore nell'estrazione dell'immagine del contenitore richiesto.
  • "ErrContainerNotFound": Il contenitore specificato nella configurazione del pod non è stato trovato.
  • "ContainerCannotRun": Il contenitore specificato nella configurazione del pod non è in grado di essere eseguito per qualche motivo (ad esempio, vincoli di risorse o errori di configurazione).

Best practice per il monitoraggio di Kubernetes

Dashboard Checkmk per il monitoraggio della distribuzione di Kubernetes

Il monitoraggio di Kubernetes offre numerosi vantaggi. Queste best practice vi aiuteranno a trovare la soluzione giusta:

1. Trova lo strumento giusto per le tue esigenze

Conoscere i propri requisiti e scegliere lo strumento più adatto alle proprie esigenze. Uno sviluppatore ha requisiti diversi per il monitoraggio di Kubernetes rispetto all'amministratore di un cluster. Per uno sviluppatore, è bene avere uno strumento in grado di memorizzare tutte le metriche necessarie per un'analisi successiva. Un amministratore di cluster, invece, è responsabile della gestione delle risorse e deve assicurarsi, tra le altre cose, che siano disponibili risorse sufficienti, che i nodi siano disponibili e sani e che un namespace non consumi tutte le risorse. Pertanto, l'amministratore ha bisogno di uno strumento di monitoraggio che fornisca tutte queste informazioni critiche e avvisi.

Kubernetes è complesso ed è facile perderne le tracce. Lo strumento di monitoraggio deve eliminare la complessità ed essere in grado di gestire i cambiamenti dinamici di Kubernetes. Deve essere in grado di effettuare il rilevamento automatico e di gestire i carichi di lavoro in continua evoluzione.

2. Ottieni una visione olistica

Non è sufficiente monitorare i carichi di lavoro Kubernetes. È necessario monitorare anche l'infrastruttura su cui girano le applicazioni, ovvero i nodi worker. Questo vale anche per gli ambienti Kubernetes gestiti. È necessario sapere cosa sta accadendo sui nodi, come ad esempio lo spawn di processi zombie o di applicazioni che inavvertitamente riempiono il file system, in quanto ciò può arrestare Kubernetes.

3. Tieni presente il knowledge gap di Kubernetes

Non dipendete da una sola persona, ma affidatevi a un software che spezzi la complessità di Kubernetes. Anche se un membro del team deve avere una grande familiarità con Kubernetes per impostare, ad esempio, gli avvisi di monitoraggio, anche gli altri che hanno poca o nessuna conoscenza di K8s devono essere in grado di capirli e comprenderli.

Immaginate il seguente scenario: I vostri esperti Kubernetes non sono disponibili e dovete impostare un avviso per un cron job Kubernetes specifico. Supponiamo che il seguente avviso sia stato impostato o, come spesso accade, semplicemente copiato da Internet:

regole per monitorare i cron job di Kubernetes con prometheus
Fonte: https://stackoverflow.com/questions/47343842/is-there-a-way-to-monitor-kube-cron-jobs-using-prometheus

Come procedere? Checkmk, ad esempio, non si limita a fornire avvisi preconfigurati per gli oggetti Kubernetes. Assegna automaticamente delle etichette che consentono di personalizzare facilmente le notifiche in base alle proprie esigenze.

Riflessioni finali

Kubernetes, come piattaforma di orchestrazione dei container, ha cambiato il modo in cui le aziende costruiscono le loro applicazioni containerizzate. Automatizza la distribuzione e la gestione di un gran numero di container, riducendo il lavoro manuale legato al monitoraggio, al roll-out, alla correzione, alla copia e alla migrazione dei container.

Questo articolo ha trattato vari aspetti del monitoraggio di Kubernetes. Ha introdotto l'architettura di base di Kubernetes, le metriche essenziali per il monitoraggio, i vantaggi principali e le best practice per un monitoraggio efficace.

Checkmk è una piattaforma di monitoraggio che controlla anche i cluster Kubernetes. Un software di monitoraggio di Kubernetes avanzato deve catturare tutti gli aspetti importanti dell'ambiente Kubernetes e fornire una visione olistica dei nodi. Grazie alle dashboard Kubernetes interconnesse, Checkmk consente anche di navigare dal cluster fino al livello di pod, in modo da poter analizzare le interrelazioni nel vostro ambiente, anche senza una precedente conoscenza di Kubernetes. Partecipate al Kubernetes Tour per vedere dal vivo il monitoraggio di Kubernetes in Checkmk.