Я хочу перечислить все контейнеры в модуле в сценарии, который собирает журналы после запуска теста. kubectl describe pods -l k8s-app=kube-dns
возвращает много информации, но я просто ищу возврат, например:
etcd
kube2sky
skydns
Я не вижу простого способа отформатировать вывод описания. Есть еще одна команда? (и я предполагаю, что в худшем случае всегда есть анализ вывода описания).
источник
kubectl get pods -o json
.kubectl get pods kube-dns-q2oh6 -o jsonpath={.spec.containers[*].name}
Ответ
kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'
Объяснение
Это получает объект JSON, представляющий модуль. Затем он использует JSONpath kubectl для извлечения имени каждого контейнера из модуля.
источник
Быстрый прием, позволяющий избежать построения запроса JSONpath для отдельного модуля:
$ kubectl logs mypod-123 a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
источник
containers
иinit containers
init containers
этого на v1.18.8 :(Я собрал некоторые идеи в следующем:
Простая строка:
kubectl get po -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\tname: "}{.name}{"\n\timage: "}{.image}{"\n"}{end}'
Разделить (для удобства чтения):
kubectl get po -o jsonpath=' {range .items[*]} {"pod: "} {.metadata.name} {"\n"}{range .spec.containers[*]} {"\tname: "} {.name} {"\n\timage: "} {.image} {"\n"} {end}'
источник
less
или кvi
:COMMAND | less
илиvi<(COMMAND)
если вам нужен четкий вывод о том, какие контейнеры из каждого модуля
kubectl get po -l k8s-app=kube-dns \ -o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name
источник
Если вы используете в
json
качестве выходного формата,kubectl get
вы получите много информации оpod
. Сjson
подобными процессорамиjq
легко выбрать или отфильтровать определенные части, которые вам интересны.Чтобы вывести список контейнеров модуля,
jq
запрос выглядит следующим образом:kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \ | jq --raw-output '.items[].spec.containers[].name'
Если вы хотите увидеть все подробности об одном конкретном контейнере, попробуйте что-то вроде этого:
kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \ | jq '.items[].spec.containers[] | select(.name=="etcd")'
источник
Я использую это для отображения версий изображений на модулях.
kubectl get pods -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'
Это всего лишь небольшая модификация скрипта отсюда , с добавлением новой строки для запуска следующей консольной команды в новой строке, удалением запятых в конце каждой строки и перечислением только моих модулей без служебных модулей (например,
--all-namespaces
опция удалена).источник
Чтобы просмотреть подробную информацию вместе с конфигурационными картами всех контейнеров в конкретном модуле, используйте эту команду:
kubectl describe pod/<pod name> -n <namespace name>
источник
Используйте команду ниже:
kubectl get pods -o=custom-columns=PodName:.metadata.name,Containers:.spec.containers[*].name,Image:.spec.containers[*].image
источник
Используйте команду ниже, чтобы просмотреть всю информацию о конкретном модуле.
kubectl get pod <pod name> -n <namespace name> -o yaml
источник
Самый простой способ узнать контейнеры в контейнере:
журналы kubectl -c -n
источник