La visualizzazione dei log del pod è spesso il primo passaggio per la diagnosi di un problema con i carichi di lavoro del tuo cluster. Ecco come utilizzare Kubectl per trasmettere in streaming i log sul tuo terminale, permettendoti di ispezionare l'output dalla tua applicazione.
Per iniziare
Assicurati di aver installato e connesso Kubectl al tuo cluster. Puoi specificare un file Kubeconfig impostando il KUBECONFIG
variabile di ambiente nella tua shell:
export KUBECONFIG=~/.kube/my-cluster.yaml
Quindi usa Kubectl per elencare i tuoi Pod:
kubectl get pods
Ricordati di aggiungere il --namespace
segnala quando i tuoi Pod risiedono al di fuori dello spazio dei nomi predefinito:
kubectl --namespace my-namespace get pods
L'aggiunta di un alias temporaneo alla tua shell è un buon modo per abbreviare questo passaggio, aiutandoti a eseguire diversi comandi sullo stesso spazio dei nomi:
alias k="kubectl --namespace my-namespace"
k get pods
Accesso ai registri del pod
I kubectl logs
comando ti consente di ispezionare i log prodotti da un Pod denominato:
kubectl logs pod-name
I registri esistenti del Pod verranno inviati al tuo terminale. Quando il Pod è formato da più contenitori, devi anche specificare il nome del contenitore che vuoi ispezionare:
kubectl logs pod-name container-name
In alternativa, imposta il --all-containers
flag per includere le linee di tronchi prodotte da uno qualsiasi dei contenitori nel Pod. Fai attenzione perché potresti vedere un output dettagliato e ripetitivo quando questo flag viene utilizzato contro un Pod occupato:
kubectl logs pod-name --all-containers
Puoi anche ottenere i log da un set di Pod con una determinata etichetta. Ciò ti consente di aggregare i log di diversi Pod, a condizione che condividano tutti la stessa etichetta:
kubectl logs -l my-label=my-value --all-containers
Log in streaming continuo
I semplici logs
il comando emette i log del Pod attualmente archiviati e quindi esce. Aggiungi il -f
(--follow
) segnala al comando per seguire i log e trasmetterli in streaming sul tuo terminale.
Kubectl emetterà ogni nuova riga di registro nel tuo terminale fino a quando non interromperai il comando con Ctrl+C. Questo equivale a usare tail -f
con un file di registro locale in un ambiente non containerizzato.
Visualizzazione dei registri meno recenti
kubectl logs
non includerà le linee di tronchi prodotte da vecchi contenitori che un tempo erano membri del Pod ma da allora sono stati sostituiti. È possibile accedere a questi registri aggiungendo il -p
(--previous
) bandiera.
Kubectl esporrà quindi l'intero registro archiviato per il Pod, comprese le righe emesse dai contenitori che sono stati successivamente chiusi.
Come ottenere i registri recenti
A volte non è necessario visualizzare l'intero flusso di log. Kubectl supporta un --since
segnala quali linee di registro emettono superfici dopo un determinato tempo:
kubectl logs pod-name --since=2h
Questo comando mostrerà l'output del registro da pod-name
prodotto nelle ultime due ore. Un'altra variante, --since-time
, supporta una stringa timestamp conforme a RFC3339 invece dell'espressione relativa all'ora mostrata sopra.
Il --tail
flag è un'altra opzione per condensare i log. Questo limita il numero di righe che vengono visualizzate, evitando un terminale pieno quando hai solo bisogno di vedere l'output molto recente:
# Shows the last 10 lines of the log
kubectl logs pod-name --tail=10
Kubectl non mostra i timestamp di riga per impostazione predefinita poiché molte applicazioni li includono già nel loro output di registro. Aggiungi il --timestamps
contrassegna per fare in modo che Kubectl aggiunga timestamp all'inizio delle righe quando il tuo carico di lavoro non li fornisce.
Puoi anche anteporre i nomi dei contenitori e dei contenitori ispezionati alle righe di registro. Questa funzionalità è attivata con il --prefix
bandiera. Può essere combinato con --timestamps
per visualizzare l'ora in cui ogni riga è stata creata e l'origine da cui ha avuto origine.
Accesso ai log da altri tipi di risorse
kubectl logs
funziona con la distribuzione e le risorse di lavoro oltre ai pod:
kubectl logs job/my-job
kubectl logs deployment/my-deployment
Otterrai i log dal primo contenitore all'interno del lavoro o della distribuzione. Usa --all-containers
contrassegnare i registri di superficie creati da uno qualsiasi dei contenitori corrispondenti. Puoi utilizzare tutti i flag descritti sopra sia che tu stia visualizzando un pod, una distribuzione o un lavoro.
Gestione dei registri più avanzata
Kubectl non include un modo per filtrare, cercare o trasformare i tuoi log. È meglio inviare i kubectl logs
output in strumenti terminali consolidati come awk
, grep
o sed
a questo scopo.
kubectl logs my-pod | grep search-expression
Allo stesso modo, usa le funzionalità di reindirizzamento esistenti nella tua shell per salvare i log in un file:
kubectl logs my-pod > my-pod-logs.txt
Riepilogo
Kubectl ti consente di accedere ai log dalle tue risorse su base per container o in forma aggregata. Puoi visualizzare un'istantanea dei registri attualmente raccolti, trasmettere continuamente nuove righe al tuo terminale e accedere alle righe cronologiche emesse dai contenitori terminati.
Il comando viene fornito con alcune opzioni di personalizzazione limitate tra cui un limitatore di conteggio delle righe e un semplice filtro della data. Quando è necessaria un'analisi più impegnativa, invia l'output ai comandi del terminale Unix per analizzare rapidamente i tuoi registri e trovare le cause degli errori nelle tue applicazioni.
Kubectl raccoglie i log dall'output standard e dai flussi di errore dei tuoi contenitori. È importante assicurarsi di scrivere correttamente l'output su questi flussi poiché un contenitore non configurato correttamente risulterà in un output vuoto quando si esegue kubectl logs
.