2015-10-11 30 views

risposta

14

È possibile utilizzare le etichette

kubectl logs -l app=elasticsearch 
+4

Buona soluzione e molto probabilmente sufficiente per rispondere alla domanda originale ma non coda: "errore: solo uno di seguito (- f) o il selettore (-l) è permesso ". –

+1

Inoltre, no '--all-namespace". –

16

Ho creato un piccolo script di bash chiamato kubetail che lo rende possibile. Per esempio alla coda tutti i registri per cialde chiamato "app1" Si può fare:

kubetail app1 

È possibile trovare lo script here.

+0

lavoro fantastico, kuddos – cahen

+0

Questo è uno script davvero interessante, avrebbe dovuto far parte di kubectl se me lo chiedessi – Yanai

1

Io uso questo script semplice per ottenere un log dai baccelli di una distribuzione:

#!/usr/bin/env bash 

DEPLOYMENT=$1 

for p in $(kubectl get pods | grep ^${DEPLOYMENT}- | cut -f 1 -d ' '); do 
    echo --------------------------- 
    echo $p 
    echo --------------------------- 
    kubectl logs $p 
done 

Gist of the script

Usage: log_deployment.sh "distribuzione-name".

Script mostrerà il registro di tutti i pod che iniziano con quel "nome di distribuzione".

1

Se i baccelli vengono chiamati per significato si potrebbe utilizzare semplici Plain Old Bash:

keyword=nodejs 
command="cat <(" 
for line in $(kubectl get pods | \ 
    grep $keyword | grep Running | awk '{print $1}'); do 
    command="$command (kubectl logs --tail=2 -f $line &) && " 
    done 
command="$command echo)" 
eval $command 

Spiegazione: Loop attraverso l'esecuzione di baccelli con il nome contenente "nodejs". Coda il log per ognuno di essi in parallelo (la singola e commerciale viene eseguita in background) assicurando che se uno dei pod non dovesse riuscire, l'intero comando verrà chiuso (doppia e commerciale). Cat i flussi da ciascuno dei comandi di coda in un flusso unico. Eval è necessario per eseguire questo comando costruito dinamicamente.

Problemi correlati