K8S – python client获取POD日志

为了知晓为什么POD启动失败,我们需要一种方法获取POD内container的标准输出/标准错误输出,明确程序启动报错是什么。

在命令行中,我们可以利用kubectl logs命令获取container的输出:

默认行为是获取POD内所有container的输出,并且实时滚动。

那么这样一个命令行功能,该如何用python实现呢?

其实只需要调用相关的K8S的API即可,官方SDK地址:https://github.com/kubernetes-client/python

1)首先初始化一个客户端:

传入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的请求构造细节:

3)调用corev1下面的具体方法:

获取POD日志的方法叫做read_namespaced_pod_log,文档:https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/CoreV1Api.md#read_namespaced_pod_log

这行代码就完成了之前kubectl logs redis-master-fsx46的同样工作,只不过这里需要额外指定了一些参数:

  • default命名空间
  • pretty美化输出
  • tail_lines=200输出最近200行
  • container=’redis-server’只获取POD内该容器的输出

日志对于发布程序失败调试问题原因非常重要,相信对大家都有帮助。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~