2015-11-25 9 views
22

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

etcd 
kube2sky 
skydns 

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

उत्तर

21

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

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

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

+1

आप, json उत्पादन देखना चाहते हैं का उपयोग 'kubectl फली -ओ json' मिलता है। – janetkuo

+4

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

0

यदि आप का उपयोग 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")' 
4

यदि आप एक स्पष्ट उत्पादन जिनमें से कंटेनर प्रत्येक Pod

से हैं चाहते हैं
kubectl get po -l k8s-app=kube-dns \ 
    -o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name 
4

उत्तर

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

स्पष्टीकरण

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

+0

किसी को भी कोई मिलान नहीं मिला है: jsonpath = {.spec.containers [*]। name} 'जब वे उस आदेश को निष्पादित करने का प्रयास करते हैं, तो' kubectl को पॉड्स प्राप्त करने का प्रयास करें POD_NAME_HERE -o jsonpath = '{spec.containers [*]। name}' ' – Pauline

+0

धन्यवाद @ पॉलिन मैंने जवाब अपडेट किया –

1

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

$ kubectl logs mypod-123 
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns] 
संबंधित मुद्दे