Ich möchte alle Container in einem Pod in einem Skript auflisten, das die Protokolle nach dem Ausführen eines Tests sammelt. kubectl describe pods -l k8s-app=kube-dns
gibt viele Informationen zurück, aber ich suche nur nach einer Rückgabe wie:
etcd
kube2sky
skydns
Ich sehe keine einfache Möglichkeit, die Beschreibungsausgabe zu formatieren. Gibt es einen anderen Befehl? (und ich denke, im schlimmsten Fall wird die Ausgabe von description immer analysiert).
quelle
kubectl get pods -o json
.kubectl get pods kube-dns-q2oh6 -o jsonpath={.spec.containers[*].name}
Antworten
kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'
Erläuterung
Dadurch wird das JSON-Objekt abgerufen, das den Pod darstellt. Anschließend wird der JSONpath von kubectl verwendet , um den Namen jedes Containers aus dem Pod zu extrahieren.
quelle
Schneller Hack, um zu vermeiden, dass die JSONpath-Abfrage für einen einzelnen Pod erstellt wird:
$ kubectl logs mypod-123 a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
quelle
containers
undinit containers
init containers
so auf v1.18.8 :(Ich habe einige Ideen wie folgt zusammengestellt:
Einfache Linie:
kubectl get po -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\tname: "}{.name}{"\n\timage: "}{.image}{"\n"}{end}'
Split (zur besseren Lesbarkeit):
kubectl get po -o jsonpath=' {range .items[*]} {"pod: "} {.metadata.name} {"\n"}{range .spec.containers[*]} {"\tname: "} {.name} {"\n\timage: "} {.image} {"\n"} {end}'
quelle
less
oder anvi
:COMMAND | less
odervi<(COMMAND)
Wenn Sie eine eindeutige Ausgabe der Container von jedem Pod wünschen
kubectl get po -l k8s-app=kube-dns \ -o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name
quelle
Wenn Sie
json
als Ausgabeformat von verwenden, erhaltenkubectl get
Sie viele Details von apod
. Mitjson
Prozessoren wie istjq
es einfach, bestimmte Teile auszuwählen oder zu filtern, an denen Sie interessiert sind.Um die Container eines Pods
jq
aufzulisten, sieht die Abfrage folgendermaßen aus:kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \ | jq --raw-output '.items[].spec.containers[].name'
Wenn Sie alle Details zu einem bestimmten Container anzeigen möchten, versuchen Sie Folgendes:
kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \ | jq '.items[].spec.containers[] | select(.name=="etcd")'
quelle
Ich benutze dies, um Bildversionen auf den Pods anzuzeigen.
kubectl get pods -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'
Es ist nur eine kleine Änderung des Skripts von hier aus , mit dem Hinzufügen einer neuen Zeile zum Starten des nächsten Konsolenbefehls in der neuen Zeile, Entfernen von Kommas am Ende jeder Zeile und Auflisten nur meiner Pods ohne Service-Pods (z. B.
--all-namespaces
Option wird entfernt).quelle
Verwenden Sie den folgenden Befehl, um alle Informationen eines bestimmten Pods anzuzeigen
kubectl get pod <pod name> -n <namespace name> -o yaml
quelle
Verwenden Sie diesen Befehl, um ausführliche Informationen zusammen mit Konfigurationszuordnungen aller Container in einem bestimmten Pod anzuzeigen:
kubectl describe pod/<pod name> -n <namespace name>
quelle