2015-10-11 4 views
18

"kubectl logs" मुझे एक कुबेरनेट कंटेनर का stderr/stdout दिखाता है। मैं फली के एक सेट के समेकित stderr/stdout कैसे प्राप्त कर सकता हूं, अधिमानतः उन लोगों को एक निश्चित प्रतिकृति नियंत्रक द्वारा बनाया गया है?मैं कुबेरनेट प्रतिकृति नियंत्रक के सभी फोड से लॉग कैसे प्राप्त करूं?

+0

मैं यह भी जानना चाहूंगा कि यह संभव है या नहीं। डॉकर-कंपोज़ में यह सुविधा है और यह बहुत उपयोगी है। – hamx0r

उत्तर

14

आप लेबल

kubectl logs -l app=elasticsearch 
+4

अच्छा समाधान और मूल प्रश्न का उत्तर देने के लिए पर्याप्त संभावना है लेकिन यह पूंछ नहीं होगा: "त्रुटि: केवल अनुसरण करने में से एक (- एफ) या चयनकर्ता (-एल) की अनुमति है "। –

+1

इसके अलावा, कोई '- सभी नामस्थान' नहीं। –

4

एक विकल्प Fluentd/ElasticSearch के माध्यम से क्लस्टर लॉगिंग सेट करना है जैसा कि https://kubernetes.io/docs/user-guide/logging/elasticsearch/ पर वर्णित है। एक बार लॉग में ES हो जाने पर, कुछ कंटेनरों से लॉग देखने के लिए किबाना में फ़िल्टर लागू करना आसान होता है।

16

मैंने kubetail नामक एक छोटी बैश स्क्रिप्ट बनाई है जो इसे संभव बनाता है। पूंछ के उदाहरण के लिए फली के लिए सभी लॉग नाम "APP1" आप कर सकते हैं:

kubetail app1 

आप स्क्रिप्ट here पा सकते हैं।

+0

कमाल का काम, कुडोस – cahen

+0

यह वास्तव में एक अच्छी स्क्रिप्ट है, अगर आप मुझसे पूछें तो – Yanai

1

मैं एक तैनाती की फली से एक लॉग प्राप्त करने के लिए इस सरल स्क्रिप्ट का उपयोग:

#!/usr/bin/env bash 

DEPLOYMENT=$1 

for p in $(kubectl get pods | grep ^${DEPLOYMENT}- | cut -f 1 -d ' '); do 
    echo --------------------------- 
    echo $p 
    echo --------------------------- 
    kubectl logs $p 
done 

Gist of the script

उपयोग: log_deployment.sh "तैनाती-नाम"।

स्क्रिप्ट तब उन सभी फोडों का लॉग दिखाएगी जो "तैनाती-नाम" से शुरू होती हैं।

1

उपयोग कर सकते हैं फली सार्थक एक साधारण सादा पुराना बैश इस्तेमाल कर सकते हैं नामित कर रहे हैं: "NodeJS" युक्त नाम के साथ फली चल के माध्यम से लूप:

keyword=nodejs 
command="cat <(" 
for line in $(kubectl get pods | \ 
    grep $keyword | grep Running | awk '{print $1}'); do 
    command="$command (kubectl logs --tail=2 -f $line &) && " 
    done 
command="$command echo)" 
eval $command 

स्पष्टीकरण। उनमें से प्रत्येक के लिए समानांतर (सिंगल एम्पर्सेंड पृष्ठभूमि में चलता है) में लॉग इन करें ताकि यह सुनिश्चित किया जा सके कि यदि कोई भी फोड विफल हो जाता है तो पूरा आदेश बाहर निकलता है (डबल एम्पर्सेंड)। प्रत्येक पूंछ के आदेशों से धाराओं को एक अद्वितीय धारा में रखें। इस गतिशील रूप से निर्मित कमांड को चलाने के लिए इवल की आवश्यकता है।

संबंधित मुद्दे