2016-11-04 3 views
1

HTTPリクエストからKubernetes APIへのログを継続的に印刷する可能性があるのだろうかと思っていました。私はKubernetes apiからのログを印刷

r = requests.get(self.url + "namespaces/" + namespace + "/pods/" + pod_name + "/log", cert=(self.cert, self.key), verify=False)

ようK8SのAPIのSTHを照会するためのpythonを使用していると私はそれよりtailコマンドのようにするためにtailLines=100とおそらく一緒follow=trueパラメータを使用したいと思います。

私がfollowパラメータを使用しているとき、リクエストは応答を収集していますが、出力をコンソールに転送する方法がわかりません。 可能ですか?

答えて

1

あなたはほぼあります。私が何をしたいことは、以下であると思う:

kubectl logs -f <your-pod-name> --tail=100 

あなたは、次のコマンドを使用して、ポッド名を取得することができます。

kubectl get pods 

私が行方不明になった何

+0

i kno w 'kubectl'バイナリですが、私は他のユーザのために簡単なスクリプトを作成して、自分のコンピュータから末尾のログを作成できるようにしたいと考えています。私は 'kubectl'をローカルに設定する可能性があることを知っていますが、私は少しPythonでやりたいです:) – widget

1

に役立ちます希望がどのstream=Truerequest.getでパラメータであり、レスポンスの内容を繰り返し処理して、コードは次のようになります。

import requests 

class Logs(): 
    def __init__(self, url='https://192.168.0.1:6443/api/v1/', 
       cert='./client.crt', 
       key='./client.key'): 
     self.url = url 
     self.cert = cert 
     self.key = key 
     requests.packages.urllib3.disable_warnings() 

    def get_pod_logs(self, namespace, pod_name): 

     params = dict(
      follow="true", 
      tailLines="100" 
     ) 

     r = requests.get(self.url + "namespaces/" + namespace + "/pods/" + pod_name + "/log", params=params, 
         cert=(self.cert, self.key), verify=False, stream=True) 

     for chunk in r.iter_content(chunk_size=256): 
      if chunk: 
       print(chunk) 

logs = Logs() 

logs.get_pod_logs(namespace="my-ns",pod_name="my-pod") 
関連する問題