Listar todas as imagens de contêiner em execução no cluster

Esta página mostra como usar o kubectl para listar todas as imagens de contêineres dos Pods em execução no cluster.

Antes de você começar

Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o minikube ou pode usar um dos seguintes ambientes:

Para verificar a versão, digite kubectl version.

Neste exercício, você usará o kubectl para buscar todos os Pods em execução no cluster e formatar a saída com uma lista dos contêineres por imagem.

Listar todas as imagens de contêiner de todos os namespaces

  • Busque todos os Pods em todos os namespaces usando kubectl get pods --all-namespaces
  • Formate a saída incluindo apenas a lista de nomes das imagens de contêiner usando -o jsonpath={.items[*].spec['initContainers', 'containers'][*].image}. Isso irá analisar recursivamente o campo image do JSON retornado.
  • Formate a saída usando as ferramentas: tr, sort, uniq
    • Use tr para substituir espaços por quebras de linha
    • Use sort para ordenar os resultados
    • Use uniq para agregar a contagem de imagens
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c

O jsonpath é interpretado da seguinte forma:

  • .items[*]: para cada valor retornado
  • .spec: coleta a especificação do recurso informado
  • ['initContainers', 'containers'][*]: para cada contêiner
  • .image: coleta o nome da imagem

Listar imagens de contêiner por Pod

O formato de saída pode ser controlado ainda mais usando a operação range para iterar sobre os elementos individualmente.

kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort

Listar imagens de contêiner filtrando pelo label do Pod

Para selecionar apenas os Pods que correspondem a um label específico, use a flag -l. O comando a seguir seleciona apenas os Pods com o label app=nginx.

kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" -l app=nginx

Listar imagens de contêiner filtrando pelo namespace do Pod

Para selecionar apenas os Pods de um namespace específico, use a flag namespace. O comando a seguir seleciona apenas os Pods no namespace kube-system.

kubectl get pods --namespace kube-system -o jsonpath="{.items[*].spec.containers[*].image}"

Listar imagens de contêiner usando go-template ao invés de jsonpath

Como alternativa ao jsonpath, o kubectl suporta o uso de go-templates para formatar a saída:

kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"

Próximos passos

Referência