kubernetes 如何仅使用部署名称查看某个pod的日志

pwuypxnk  于 2023-05-06  发布在  Kubernetes
关注(0)|答案(2)|浏览(149)

问题陈述

我有一个Kubernetes集群,在一个特定的命名空间中运行着许多pod。我想使用Python和Paramiko SSH客户端读取特定pod的日志。
我有吊舱在下面运行

kubectl get pods -n <myNameSpace>

上面命令的结果如下所示

service1-8457bd9899-4jdzz
service2-765b497fbf-2w82j

这是我的Python代码,我知道部署名称,如service1,service2等
我想用这些名字来读日志

kubectl logs service1* -n <myNameSpace> -f --tail 100

但是上面的命令不起作用,因为正则表达式不起作用。

我的解决方案

我运行两个命令,一个获取完整的pod名称,另一个使用该完整名称检查日志

ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(f'kubectl get pods -n namespace1 |grep service1')
 pod_name_service1 = ssh_stdout.read().decode("utf-8").split(' ')[0]
 ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(
                f'kubectl logs {pod_name_service1} -n edge -f --tail 100')
 service1_logs = ssh_stdout.read().decode("utf-8")

问题

如何仅使用服务部署名称(不使用复制集名称+随机的5位字母数字)来检索日志?有没有其他的办法呢?

li9yvcax

li9yvcax1#

如果只有一个复制副本,或者您不关心获取哪个复制副本,则可以直接在命令行上使用Deployment名称

kubectl logs -n my-namespace deployment/service1 --tail 100 -f

请注意,这是在特定Pod上实际工作的几个命令之一,即使您可以使用deployment/name语法(其他对象类型也可以)。如果它连接的特定Pod退出,那么kubectl logs命令也会停止,即使其他副本保持不间断地运行。
(我还强烈建议修复代码中的shell注入漏洞。考虑使用Kubernetes SDK执行kubectl命令,如果需要,可以通过ssh连接端口转发Kubernetes API端点。

7vux5j2d

7vux5j2d2#

这可能会让你更容易到达那里。(与regex相比,就是这样。)

kubectl logs -l app=yourappname

文档

相关问题