"kubectl logs" zeigt mir den stderr/stdout eines Kubernetes Containers. Wie kann ich den aggregierten stderr/stdout einer Gruppe von Pods erhalten, vorzugsweise solche, die von einem bestimmten Replikationscontroller erstellt wurden?Wie bekomme ich Protokolle von allen Pods eines Kubernetes-Replikations-Controllers?
Antwort
Sie können Etiketten verwenden
kubectl logs -l app=elasticsearch
Gute Lösung und höchstwahrscheinlich genug, um die ursprüngliche Frage zu beantworten, aber es wird nicht Schwanz: "Fehler: nur einer der folgen (- f) oder Selektor (-l) ist erlaubt ". –
Auch keine '--all-namespaces'. –
Eine Möglichkeit besteht darin, die Clusterprotokollierung über Fluentd/ElasticSearch wie unter https://kubernetes.io/docs/user-guide/logging/elasticsearch/ beschrieben einzurichten. Sobald sich die Protokolle in ES befinden, können Filter in Kibana einfach angewendet werden, um Protokolle aus bestimmten Containern anzuzeigen.
Ich habe ein kleines Bash-Skript namens kubetail
erstellt, das dies ermöglicht. Zum Beispiel an Schwanz alle Protokolle für Schoten dem Namen „app1“ Sie tun können:
kubetail app1
Sie können das Skript here finden.
Ich benutze dieses einfache Skript ein Protokoll aus den Schoten einer Bereitstellung zu erhalten:
#!/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
Verbrauch: log_deployment.sh "deployment-name".
Das Skript zeigt dann das Protokoll aller Pods an, die mit diesem "deployment-name" beginnen.
Wenn die Schoten nach Bedeutung benannt sind eine einfache Plain Old Bash verwenden:
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
Erläuterung: Schleife durch Lauf Schoten mit dem Namen mit "NodeJS". Lassen Sie das Protokoll für jeden von ihnen parallel ablaufen (einzelnes kaufmännisches Und läuft im Hintergrund) und stellen Sie sicher, dass bei Ausfall eines der Pods der gesamte Befehl beendet wird (doppeltes kaufmännisches Und). Cat die Ströme von jedem der Schwanz Befehle in einen einzigartigen Strom. Eval wird benötigt, um diesen dynamisch erstellten Befehl auszuführen.
Ich würde auch gerne wissen, ob dies möglich ist. docker-compose hat diese Funktion und es ist sehr hilfreich. – hamx0r