Chcę wyświetlić listę wszystkich kontenerów w kapsule w skrypcie, który zbiera dzienniki po uruchomieniu testu. kubectl describe pods -l k8s-app=kube-dns
zwraca dużo informacji, ale szukam tylko zwrotu takiego jak:
etcd
kube2sky
skydns
Nie widzę prostego sposobu sformatowania opisanego wyniku. Czy jest inne polecenie? (i myślę, że najgorszym przypadkiem jest zawsze parsowanie wyniku opisania).
źródło
kubectl get pods -o json
.kubectl get pods kube-dns-q2oh6 -o jsonpath={.spec.containers[*].name}
Odpowiedź
kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'
Wyjaśnienie
Spowoduje to pobranie obiektu JSON reprezentującego pod. Następnie używa JSONpath kubectl do wyodrębnienia nazwy każdego kontenera z poda .
źródło
Szybki hack, aby uniknąć konstruowania zapytania JSONpath dla pojedynczego poda:
$ kubectl logs mypod-123 a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
źródło
containers
iinit containers
init containers
w ten sposób w wersji 1.18.8 :(Połączyłem kilka pomysłów w następujące:
Prosta linia:
kubectl get po -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\tname: "}{.name}{"\n\timage: "}{.image}{"\n"}{end}'
Podziel (dla czytelności):
kubectl get po -o jsonpath=' {range .items[*]} {"pod: "} {.metadata.name} {"\n"}{range .spec.containers[*]} {"\tname: "} {.name} {"\n\timage: "} {.image} {"\n"} {end}'
źródło
less
vi
COMMAND | less
vi<(COMMAND)
jeśli chcesz mieć wyraźny wynik pokazujący, które kontenery pochodzą z każdego zasobnika
kubectl get po -l k8s-app=kube-dns \ -o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name
źródło
Jeśli używasz
json
jako formatu wyjściowegokubectl get
, otrzymasz wiele szczegółów dotyczących plikupod
. Dziękijson
takim procesoromjq
łatwo jest wybrać lub filtrować określone części, które Cię interesują.Aby wyświetlić listę kontenerów kapsuły, należy wpisać
jq
zapytanie wygląda następująco:kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \ | jq --raw-output '.items[].spec.containers[].name'
Jeśli chcesz zobaczyć wszystkie szczegóły dotyczące jednego konkretnego kontenera, spróbuj czegoś takiego:
kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \ | jq '.items[].spec.containers[] | select(.name=="etcd")'
źródło
Używam tego do wyświetlania wersji obrazów na strąkach.
kubectl get pods -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'
To tylko mała modyfikacja skryptu stąd , z dodaniem nowej linii, aby rozpocząć następne polecenie konsoli w nowej linii, usuniętymi przecinkami na końcu każdej linii i wyświetleniem tylko moich podów, bez podów usług (np.
--all-namespaces
Opcja jest usunięta).źródło
Aby zobaczyć szczegółowe informacje wraz z mapami konfiguracji wszystkich kontenerów w określonym pod, użyj tego polecenia:
kubectl describe pod/<pod name> -n <namespace name>
źródło
Użyj poniższego polecenia:
kubectl get pods -o=custom-columns=PodName:.metadata.name,Containers:.spec.containers[*].name,Image:.spec.containers[*].image
źródło
Użyj poniższego polecenia, aby wyświetlić wszystkie informacje o konkretnym kapsule
kubectl get pod <pod name> -n <namespace name> -o yaml
źródło
Najłatwiejszy sposób na poznanie pojemników w kapsule:
logi kubectl -c -n
źródło