Bir kubernetes bölmesindeki tüm kapları nasıl temiz bir şekilde listelersiniz?


86

Bir bölmedeki tüm kapsayıcıları, bir testi çalıştırdıktan sonra günlüklerini toplayan bir komut dosyasında listelemek istiyorum. kubectl describe pods -l k8s-app=kube-dnsçok fazla bilgi döndürüyor, ancak şu şekilde bir dönüş arıyorum:

etcd
kube2sky
skydns

Açıklama çıktısını biçimlendirmenin basit bir yolunu görmüyorum. Başka bir komut var mı? (ve sanırım en kötü durum, her zaman açıklama çıktısının ayrıştırılmasıdır).

Yanıtlar:


60

( ) Bayrağıyla getdesteklenen çıktı şablonlarından birini kullanabilir ve seçebilirsiniz .--output-o

jsonpathÖrneğin alın , kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name}size verir etcd kube2sky skydns.

Diğer desteklenen çıktı çıktı şablonları go-şablonu, go-şablon-dosyası, jsonpath-dosyasıdır. Jsonpath şablonunun nasıl kullanılacağını öğrenmek için http://kubernetes.io/docs/user-guide/jsonpath/ adresine bakın . Git şablonunun nasıl kullanılacağını öğrenmek için https://golang.org/pkg/text/template/#pkg-overview adresine bakın .

Güncelleme: Kapsayıcı görüntülerini listelemek için diğer örnek komutlar için bu belgeye bakın: https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/


3
Json çıktısını görmek istiyorsanız, kullanın kubectl get pods -o json.
janetkuo

22
Belirli bir bölmeyle çalışıyorsanız, komut şudurkubectl get pods kube-dns-q2oh6 -o jsonpath={.spec.containers[*].name}
Charles L.

OP belirli bir kapsül içindi
Oliver

70

Cevap

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

Açıklama

Bu, bölmeyi temsil eden JSON nesnesini alır. Daha sonra , her bir kabın adını kapsülden çıkarmak için kubectl'in JSONyolunu kullanır .


27

Tek bir kapsül için JSONpath sorgusu oluşturmayı önlemek için hızlı bir şekilde müdahale edin:

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

Bu cevap tam olarak söylediği gibi .. hızlı bir hack. Gerçekten kullanışlı :) Elbette bir senaryo türünde kullanılamaz. İhtiyaca hizmet eder.
Rakesh N

containersinit containers
Neo

@Neo v1.18.8'de init containersbu şekilde görmüyorum :(
subtleseeker

11

Aşağıda bazı fikirleri bir araya getirdim:

Basit çizgi:

kubectl get po -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\tname: "}{.name}{"\n\timage: "}{.image}{"\n"}{end}'

Böl (okunabilirlik için):

kubectl get po -o jsonpath='
    {range .items[*]}
    {"pod: "}
    {.metadata.name}
    {"\n"}{range .spec.containers[*]}
    {"\tname: "}
    {.name}
    {"\n\timage: "}
    {.image}
    {"\n"}
    {end}'

@EzLo Tek satırlık formatı daha çok sevdiğimden emin değilim. Kaydırmak zorunda kalmanın hayranı değilim.
Shawn

her iki alternatifi de gösterebilirsiniz. İsterseniz eski haline dönmekten çekinmeyin. Kod biçimlendirmesini (CTRL + K) kullanmak, kod için tipografi nedeniyle genellikle alıntıdan (CTRL + Q) daha iyidir.
EzLo

Bu formatta her konteyner için kapsül adını listelememin bir yolu var mı?
Sam Thomas

Kaydırma ve manuel arama ihtiyacından kaçınmak için - bunu lessveya viCOMMAND | lessvi<(COMMAND)
şuna

yığın taşmasında kaydırma @SergeySmolnikov
Shawn

7

Her Bölmeden hangi kapların olduğu konusunda net bir çıktı almak istiyorsanız

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

2

jsonÇıktı formatı olarak kullanırsanız kubectl get, bir pod. Bu jsongibi işlemcilerle jq, ilgilendiğiniz belirli parçaları seçmek veya filtrelemek kolaydır.

Bir bölmenin kapsayıcılarını listelemek için jqsorgu şu şekilde görünür:

kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \
  | jq --raw-output '.items[].spec.containers[].name'

Belirli bir konteynırla ilgili tüm ayrıntıları görmek istiyorsanız, şuna benzer bir şey deneyin:

kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \
  | jq '.items[].spec.containers[] | select(.name=="etcd")'

1

Bunu bölmelerdeki görüntü sürümlerini görüntülemek için kullanıyorum.

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

Bu , yeni satırda bir sonraki konsol komutunu başlatmak için yeni satır ekleyerek, her satırın sonunda virgül kaldırarak ve servis bölmeleri olmadan yalnızca bölmelerimi listeleyerek (örn. Seçenek kaldırılır) , buradan sadece küçük bir komut dosyası değişikliği --all-namespaces.


1

Belirli bir bölmedeki tüm kapsayıcıların yapılandırma haritalarının yanı sıra ayrıntılı bilgileri görmek için şu komutu kullanın: kubectl describe pod/<pod name> -n <namespace name>


1

Aşağıdaki komutu kullanın:

kubectl get pods -o=custom-columns=PodName:.metadata.name,Containers:.spec.containers[*].name,Image:.spec.containers[*].image

0

Belirli bir bölmenin tüm bilgilerini görmek için aşağıdaki komutu kullanın

kubectl get pod <pod name> -n <namespace name> -o yaml

0

Bir bölmedeki kapları bilmenin en kolay yolu:

kubectl günlükleri -c -n


Not: çok kısa cevaplar ve / veya postere sorulan sorular muhtemelen yorum olmalıdır. Bir sorunun altında yorum yapmak için yalnızca 50 temsilci puanına ihtiyacınız var - bunu oraya taşıyabilir misiniz?
Tyler2P
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.