2016-11-04 5 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를위한 파이썬을 사용하고 그리고 난 더 tail 명령처럼 만들기 위해 tailLines=100와 아마 함께 follow=true 매개 변수를 사용하고 싶습니다.

follow 매개 변수를 사용할 때 요청이 응답을 수집하고 있지만 출력을 콘솔로 전달하는 방법을 모르겠습니다. 가능합니까?

답변

1

거의 다 왔어. 나는 당신이 원하는 것은 다음과 같은 생각 :

kubectl logs -f <your-pod-name> --tail=100 
다음과 같은 명령으로 포드의 이름을 얻을 수 있습니다

:

kubectl get pods 

희망 무엇 내가 없어진 것은 request.get 매개 변수 stream=True입니다

+0

i kno w'kubectl' 바이너리이지만 다른 사용자를 위해 간단한 스크립트를 만들어서 자신의 컴퓨터에서 꼬리 로그를 남기고 싶습니다. 나는'kubectl'을 로컬로 설정할 가능성이 있다는 것을 알고 있지만 파이썬으로 조금 놀고 싶습니다. :) – widget

1

을하는 데 도움이 응답 코드를 반복하여 코드가 다음과 같이 표시되도록합니다.

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") 
관련 문제