K8S – python client获取POD日志
为了知晓为什么POD启动失败,我们需要一种方法获取POD内container的标准输出/标准错误输出,明确程序启动报错是什么。
在命令行中,我们可以利用kubectl logs命令获取container的输出:
1 2 3 4 5 |
[root@10-42-74-90 ~]# kubectl logs redis-master-fsx46 [1] 25 Nov 01:14:38.226 - Accepted 10.42.148.156:59804 [1] 25 Nov 01:14:38.229 - Accepted 10.42.37.63:35308 [1] 25 Nov 01:14:38.229 - Client closed connection [1] 25 Nov 01:14:40.669 - DB 0: 2 keys (0 volatile) in 4 slots HT. |
默认行为是获取POD内所有container的输出,并且实时滚动。
那么这样一个命令行功能,该如何用python实现呢?
其实只需要调用相关的K8S的API即可,官方SDK地址:https://github.com/kubernetes-client/python
1)首先初始化一个客户端:
1 2 3 |
from kubernetes import config, client k8s_client = config.new_client_from_config('./k8s.yaml') |
传入K8S集群配置文件,得到一个用于K8S通讯的Restful Http Client,它封装了认证与通讯的细节。
2)获取corev1的API子集:
获取POD日志的API属于corev1这个API Group,直接自己构造Restful Http请求比较麻烦,Python客户端已经为我们做好了封装。(你可以学习Kubernetes API的概念,了解K8S是如何基于Restful风格提供资源的CURD操作的,见链接)
我们先获取到corev1的API子集,通讯细节仍旧交由上面的client负责,返回的对象封装了corev1下面各种API的请求构造细节:
1 |
corev1api = client.CoreV1Api(api_client=k8s_client) |
3)调用corev1下面的具体方法:
获取POD日志的方法叫做read_namespaced_pod_log,文档:https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/CoreV1Api.md#read_namespaced_pod_log。
1 |
log_content = corev1api.read_namespaced_pod_log('redis-master-fsx46', 'default', pretty=True, tail_lines=200, container='redis-server') |
这行代码就完成了之前kubectl logs redis-master-fsx46的同样工作,只不过这里需要额外指定了一些参数:
- default命名空间
- pretty美化输出
- tail_lines=200输出最近200行
- container=’redis-server’只获取POD内该容器的输出
日志对于发布程序失败调试问题原因非常重要,相信对大家都有帮助。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~
