2016-11-04 95 views
1

我想知道是否有可能连续打印日志从HTTP请求到Kubernetes API。我使用python查询K8S API某事像从Kubernetes api打印日志

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

,我想可能是一起使用follow=true参数与tailLines=100,使其更像tail命令。

当我使用follow参数时,请求正在收集响应,但我不知道如何将其输出转发到控制台。 这可能吗?

回答

1

你快到了。我想你想要的是以下几点:

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

你可以荚名称使用以下命令:

kubectl get pods 

希望帮助

+0

i kno w'kubectl' binary,但我想为其他用户创建一些简单的脚本,这将允许他们从自己的计算机中删除日志。我知道有可能在本地配置'kubectl',但我想用python玩一下:) – widget

1

什么,我缺少的是request.get参数stream=True这允许遍历响应内容,因此我的代码如下所示:

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")