Подтвердить что ты не робот

Как вы можете перечислить все контейнеры в контейнере кубернете?

Я ищу список всех контейнеров в контейнере в script, который собирает журналы после запуска теста. kubectl describe pods -l k8s-app=kube-dns возвращает много информации, но я просто ищу возврат, например:

etcd
kube2sky
skydns

Я не вижу простого способа форматирования вывода описания. Есть ли другая команда? (и, я думаю, худший случай всегда анализирует вывод описания).

4b9b3361

Ответ 1

Вы можете использовать get и выбрать один из поддерживаемых шаблонов вывода с --output (-o).

Возьмите jsonpath, например, kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name} дает etcd kube2sky skydns.

Другими поддерживаемыми шаблонами вывода являются go-template, go-template-file, jsonpath-file. См http://kubernetes.io/docs/user-guide/jsonpath/ для того, как использовать шаблон jsonpath. См. Https://golang.org/pkg/text/template/#pkg-overview, чтобы узнать, как использовать шаблон go.

Обновление: проверьте этот документ для других примеров команд для отображения изображений контейнера: https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/

Ответ 2

Ответ

kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'

объяснение

Это получает объект JSON, представляющий модуль. Затем он использует kubectl JSONpath для извлечения имени каждого контейнера из модуля.

Ответ 3

Быстрый взломать, чтобы избежать создания запроса JSONpath для одного контейнера:

$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]

Ответ 4

если вы хотите, чтобы явный вывод из каких контейнеров из каждого Pod

kubectl get po -l k8s-app=kube-dns \
   -o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name

Ответ 5

Если вы используете 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")'

Ответ 6

Я использую это для отображения версий изображений на стручках.

kubectl get pods  -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'

Это лишь небольшая модификация скрипта из здесь, с добавлением новой строки для запуска следующей команды консоли на новой линии, удаленные запятые в конце каждой строки и список только мои стручков, без обслуживания стручков (например --all-namespaces варианта удалены).

Ответ 7

Я собрал некоторые идеи в следующее:

Простая строка:

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}'