आप कुबेरनेट्स पॉड में सभी कंटेनरों को कैसे साफ करते हैं?


85

मैं एक स्क्रिप्ट में पॉड में सभी कंटेनरों को सूचीबद्ध करना चाहता हूं जो परीक्षण चलाने के बाद लॉग को इकट्ठा करते हैं। kubectl describe pods -l k8s-app=kube-dnsबहुत सारी जानकारी देता है, लेकिन मैं सिर्फ एक वापसी की तलाश में हूँ:

etcd
kube2sky
skydns

मुझे वर्णन आउटपुट को प्रारूपित करने का सरल तरीका नहीं दिखता है। क्या कोई और आदेश है? (और मुझे लगता है कि सबसे खराब स्थिति हमेशा वर्णन के उत्पादन को पार्स करती है)।

जवाबों:


60

आप ( ) ध्वज के getसाथ समर्थित आउटपुट टेम्पलेट में से किसी एक का उपयोग और चयन कर सकते हैं ।--output-o

jsonpathउदाहरण के लिए लीजिए , kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name}आपको देता है etcd kube2sky skydns

अन्य समर्थित आउटपुट आउटपुट टेम्पलेट गो-टेम्पलेट, गो-टेम्प्लेट-फ़ाइल, जोंसपैथ-फाइल हैं। Jsonosath टेम्पलेट का उपयोग कैसे करें के लिए http://kubernetes.io/docs/user-guide/jsonpath/ देखें । Go टेम्पलेट का उपयोग कैसे करें के लिए https://golang.org/pkg/text/template/#pkg-overview देखें ।

अद्यतन: कंटेनर छवियों को सूचीबद्ध करने के लिए अन्य उदाहरण आज्ञाओं के लिए इस डॉक्टर की जाँच करें: https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/


3
यदि आप json आउटपुट देखना चाहते हैं, तो उपयोग करें kubectl get pods -o json
२२:५२ पर जेनेटको

21
यदि आप एक विशिष्ट फली के साथ काम कर रहे हैं, तो कमांड हैkubectl get pods kube-dns-q2oh6 -o jsonpath={.spec.containers[*].name}
चार्ल्स एल।

ओपी एक विशिष्ट पॉड के लिए था
ओलिवर

69

उत्तर

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

व्याख्या

यह JSON पॉड का प्रतिनिधित्व करता है। यह तो kubectl के उपयोग करता JSONpath फली से प्रत्येक कंटेनर के नाम निकालने के लिए।


27

एक पॉड के लिए JSONpath क्वेरी के निर्माण से बचने के लिए त्वरित हैक:

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

यह जवाब वास्तव में यह क्या कहता है .. एक त्वरित हैक है। वास्तव में उपयोगी :) निश्चित रूप से एक तरह की स्क्रिप्ट में उपयोग नहीं किया जा सकता है। यह आवश्यकता को पूरा करता है।
राकेश एन

नवीनतम एक containersऔर दोनों को भी देता हैinit containers
Neo

@ मैं init containersइस तरह से v1.18.8 :(
सबटाइलेसर

11

मैंने कुछ विचारों को निम्नलिखित में एक साथ रखा:

सरल रेखा:

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

@ ईज़ल मुझे यकीन नहीं है कि मुझे सिंगल लाइन फॉर्मेट बेहतर लगता है। मैं स्क्रॉल करने का प्रशंसक नहीं हूं।
शॉन

आप दोनों विकल्प दिखा सकते हैं। यदि आप चाहते हैं तो वापस बदलने के लिए स्वतंत्र महसूस करें। कोड स्वरूपण (CTRL + K) का उपयोग करना आमतौर पर कोड के लिए टाइपोग्राफी के कारण उद्धरण (CTRL + Q) से बेहतर होता है।
एजेलो

वहाँ एक तरीका है मैं इस प्रारूप में प्रत्येक कंटेनर के लिए सूचीबद्ध पॉड नाम हो सकता है?
सैम थॉमस

स्क्रॉलिंग और मैन्युअल खोज की आवश्यकता से बचने के लिए - इसे पाइप पर lessया vi: COMMAND | less याvi<(COMMAND)
सर्गेई स्मोलनिकोव

स्टैक ओवरफ्लो पर स्क्रॉल करना @SergeySmolnikov
Shawn

7

यदि आप एक स्पष्ट आउटपुट चाहते हैं कि कौन से कंटेनर प्रत्येक पॉड से हैं

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

2

यदि आप jsonआउटपुट स्वरूप के रूप में उपयोग करते हैं, तो आपको इसका kubectl getविवरण मिलता है podjsonप्रोसेसर के साथ जैसे 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")'

1

मैं फली पर छवि संस्करण प्रदर्शित करने के लिए इसका उपयोग करता हूं।

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

यह यहाँ से स्क्रिप्ट का सिर्फ एक छोटा संशोधन है , नई लाइन पर अगली कंसोल कमांड को शुरू करने के लिए नई लाइन जोड़ने के साथ, प्रत्येक लाइन के अंत में कॉमा को हटा दिया गया और केवल मेरे पॉड को सूचीबद्ध किया गया, बिना सर्विस पॉड्स (जैसे --all-namespacesविकल्प हटा दिया गया है)।


1

नीचे दिए गए आदेश का उपयोग करें:

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

0

एक विशेष फली की सभी जानकारी देखने के लिए नीचे दिए गए कमांड का उपयोग करें

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

0

किसी विशेष पॉड में सभी कंटेनरों के विन्यास के साथ क्रिया संबंधी जानकारी देखने के लिए, इस कमांड का उपयोग करें: kubectl describe pod/<pod name> -n <namespace name>


0

एक फली में कंटेनरों को जानने का सबसे आसान तरीका:

kubectl लॉग -c -n


नोट: उत्तर जो बहुत संक्षिप्त हैं और / या पोस्टर पर वापस प्रश्न हैं शायद टिप्पणियां होनी चाहिए। आपको एक प्रश्न के तहत टिप्पणी करने के लिए केवल 50 प्रतिनिधि अंक चाहिए - क्या आप इसे वहां स्थानांतरित कर सकते हैं?
Tyler2P
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.