从Kubernetes api打印日志

时间:2016-11-04 11:29:42

标签: python api python-requests kubernetes

我想知道是否有可能连续将日志从HTTP请求打印到Kubernetes API。我正在使用python来查询K8S 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参数时,请求正在收集响应,但我不知道如何将其输出转发到控制台。 有可能吗?

2 个答案:

答案 0 :(得分:2)

我遗漏的是stream=True参数中的request.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")

答案 1 :(得分:-1)

你几乎就在那里。我想你想要的是以下内容:

 <form name="form" method="POST" action="/api/search.php" class="search-form" id="search-form">
   <input type="radio" name="role" data-role="wanted_specialty" value="1" class="radio-btn"><span class="overlay"></span> 1</label>
   <input type="radio" name="role" data-role="wanted_specialty" value="2" class="radio-btn"><span class="overlay"></span> 2</label>
   <input type="radio" name="role" data-role="wanted_specialty" value="3" class="radio-btn"><span class="overlay"></span> 3</label>
</form>




var form = document.querySelector('.search-form');
  form.addEventListener('mousedown',function(e){
    // DO SOMETHING
  });

您可以使用以下命令获取pod名称:

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

希望有所帮助